<?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>177629</bug_id>
          
          <creation_ts>2017-09-28 16:23:51 -0700</creation_ts>
          <short_desc>Add more infrastructure to apply custom header fields to same-origin requests</short_desc>
          <delta_ts>2017-10-16 14:10:06 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>178356</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>dbates</cc>
    
    <cc>japhet</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1354362</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-09-28 16:23:51 -0700</bug_when>
    <thetext>Apply custom headers to same-origin requests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354370</commentid>
    <comment_count>1</comment_count>
      <attachid>322144</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-09-28 16:44:12 -0700</bug_when>
    <thetext>Created attachment 322144
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354405</commentid>
    <comment_count>2</comment_count>
      <attachid>322144</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-09-28 18:43:07 -0700</bug_when>
    <thetext>Comment on attachment 322144
Patch

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

&gt; Source/WebCore/loader/HTTPHeaderField.h:38
&gt; +    bool isValid() { return !m_name.isNull() &amp;&amp; !m_value.isNull(); }

Can you give an example where create() would return an invalid HTTPHeaderField?

&gt; Source/WebCore/loader/cache/CachedResourceLoader.cpp:754
&gt; +    // Add custom headers to same-origin requests only.

This comment saids what the code does. Either the comment should explain why or we should remove this comment.

&gt; Source/WebCore/loader/cache/CachedResourceLoader.cpp:756
&gt; +        if (type == CachedResource::Type::MainResource || (document() &amp;&amp; document()-&gt;topOrigin().equal(SecurityOrigin::create(request.resourceRequest().url()).ptr()))) {

How did you come to the decision to look at the top origin as opposed to the document’s origin?

&gt; Source/WebKit/UIProcess/API/C/WKWebsitePolicies.cpp:76
&gt; +        if (field &amp;&amp; field-&gt;name().startsWithIgnoringASCIICase(&quot;X-&quot;)) // Let&apos;s just pretend RFC6648 never happened.

This comment is not useful. Please explain why we should “pretend”.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354448</commentid>
    <comment_count>3</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-09-28 21:48:25 -0700</bug_when>
    <thetext>(In reply to Daniel Bates from comment #2)
&gt; Comment on attachment 322144 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=322144&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/loader/HTTPHeaderField.h:38
&gt; &gt; +    bool isValid() { return !m_name.isNull() &amp;&amp; !m_value.isNull(); }
&gt; 
&gt; Can you give an example where create() would return an invalid
&gt; HTTPHeaderField?

There are many such examples in HTTPHeaderField.cpp in TestWebKitAPI.

&gt; &gt; Source/WebCore/loader/cache/CachedResourceLoader.cpp:754
&gt; &gt; +    // Add custom headers to same-origin requests only.
&gt; 
&gt; This comment saids what the code does. Either the comment should explain why
&gt; or we should remove this comment.

I&apos;ll remove the comment.

&gt; &gt; Source/WebCore/loader/cache/CachedResourceLoader.cpp:756
&gt; &gt; +        if (type == CachedResource::Type::MainResource || (document() &amp;&amp; document()-&gt;topOrigin().equal(SecurityOrigin::create(request.resourceRequest().url()).ptr()))) {
&gt; 
&gt; How did you come to the decision to look at the top origin as opposed to the
&gt; document’s origin?

The custom headers are passed to the main document&apos;s DocumentLoader through the WebsitePolicies during decidePolicyForNavigationAction&apos;s response.  They are to be applied only to that origin, which is the top document&apos;s security origin.

&gt; &gt; Source/WebKit/UIProcess/API/C/WKWebsitePolicies.cpp:76
&gt; &gt; +        if (field &amp;&amp; field-&gt;name().startsWithIgnoringASCIICase(&quot;X-&quot;)) // Let&apos;s just pretend RFC6648 never happened.
&gt; 
&gt; This comment is not useful. Please explain why we should “pretend”.

RFC6648 says we shouldn&apos;t use the X- prefix for custom headers any more because some of them have become de-facto standards because of widespread use, but we need a way to make this only custom headers, so we check the X- anyways.
Do you think I should explain this more fully in the comment or remove it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354457</commentid>
    <comment_count>4</comment_count>
      <attachid>322144</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-09-28 22:35:53 -0700</bug_when>
    <thetext>Comment on attachment 322144
Patch

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

&gt;&gt;&gt; Source/WebCore/loader/HTTPHeaderField.h:38
&gt;&gt;&gt; +    bool isValid() { return !m_name.isNull() &amp;&amp; !m_value.isNull(); }
&gt;&gt; 
&gt;&gt; Can you give an example where create() would return an invalid HTTPHeaderField?
&gt; 
&gt; There are many such examples in HTTPHeaderField.cpp in TestWebKitAPI.

IsValid() is never used in this patch. Where is an example of create() returning a non-nullopt value whose isValid() is false?

&gt;&gt;&gt; Source/WebKit/UIProcess/API/C/WKWebsitePolicies.cpp:76
&gt;&gt;&gt; +        if (field &amp;&amp; field-&gt;name().startsWithIgnoringASCIICase(&quot;X-&quot;)) // Let&apos;s just pretend RFC6648 never happened.
&gt;&gt; 
&gt;&gt; This comment is not useful. Please explain why we should “pretend”.
&gt; 
&gt; RFC6648 says we shouldn&apos;t use the X- prefix for custom headers any more because some of them have become de-facto standards because of widespread use, but we need a way to make this only custom headers, so we check the X- anyways.
&gt; Do you think I should explain this more fully in the comment or remove it?

I am tired and going to bed. Will reply back to you tomorrow.

&gt; Tools/TestWebKitAPI/Tests/WebCore/HTTPHeaderField.cpp:39
&gt; +    return makeString(field-&gt;name(), &apos;:&apos;, &apos; &apos;, field-&gt;value());

‘:’, ‘ ‘ =&gt; “: “</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354671</commentid>
    <comment_count>5</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-09-29 13:40:11 -0700</bug_when>
    <thetext>(In reply to Daniel Bates from comment #4)
&gt; IsValid() is never used in this patch. Where is an example of create()
&gt; returning a non-nullopt value whose isValid() is false?
Oh, shoot.  You&apos;re right.  I had this before I had it return a std::nullopt, but I decided not to require every client to call isValid to help them realize parsing can fail.  I&apos;ll remove isValid.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354787</commentid>
    <comment_count>6</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-09-29 17:04:34 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #3)
&gt; &gt; &gt; Source/WebKit/UIProcess/API/C/WKWebsitePolicies.cpp:76
&gt; &gt; &gt; +        if (field &amp;&amp; field-&gt;name().startsWithIgnoringASCIICase(&quot;X-&quot;)) // Let&apos;s just pretend RFC6648 never happened.
&gt; &gt; 
&gt; &gt; This comment is not useful. Please explain why we should “pretend”.
&gt; 
&gt; RFC6648 says we shouldn&apos;t use the X- prefix for custom headers any more
&gt; because some of them have become de-facto standards because of widespread
&gt; use, but we need a way to make this only custom headers, so we check the X-
&gt; anyways.
&gt; Do you think I should explain this more fully in the comment or remove it?

I do not think a comment is necessary. The code reflects our policy at the time it was written: a custom header is defined to a be a header whose name begins with &quot;X-&quot;. If you feel that this definition should never change in the future and/or you feel that a person may question why we chose this definition given the existence of RFC6648 at the time the code was written and assume (wrongly) that author ignorance is the cause for the code being written the way it is then adding a comment that explained that the code was written intentionally against the recommendation of RFC6648 and why would be informative. For example, &quot;Although RFC6648 recommends custom headers not be prefixed with X-, we require this prefix because of A, B, C.....&quot;. Alternatively you could document this reasoning in the ChangeLog and omit the comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355356</commentid>
    <comment_count>7</comment_count>
      <attachid>322401</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-10-02 11:37:37 -0700</bug_when>
    <thetext>Created attachment 322401
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355362</commentid>
    <comment_count>8</comment_count>
      <attachid>322404</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-10-02 11:47:05 -0700</bug_when>
    <thetext>Created attachment 322404
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355386</commentid>
    <comment_count>9</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-10-02 12:12:56 -0700</bug_when>
    <thetext>rdar://problem/31074470</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356162</commentid>
    <comment_count>10</comment_count>
      <attachid>322404</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-10-03 17:06:20 -0700</bug_when>
    <thetext>Comment on attachment 322404
Patch

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

&gt; Source/WebCore/ChangeLog:4
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=177629

Please add the radar URL below this line before landing.

&gt; Source/WebCore/loader/cache/CachedResourceLoader.cpp:760
&gt; +    if (m_documentLoader &amp;&amp; !m_documentLoader-&gt;customHeaderFields().isEmpty() &amp;&amp; m_documentLoader-&gt;frame() &amp;&amp; m_documentLoader-&gt;frame()-&gt;isMainFrame()) {
&gt; +        bool loadingSameOriginSubresource = document() &amp;&amp; document()-&gt;securityOrigin().equal(SecurityOrigin::create(request.resourceRequest().url()).ptr());
&gt; +        if (type == CachedResource::Type::MainResource || loadingSameOriginSubresource) {
&gt; +            for (auto&amp; field : m_documentLoader-&gt;customHeaderFields())
&gt; +                request.resourceRequest().addHTTPHeaderField(field.name(), field.value());
&gt; +        }
&gt; +    }

Is it intentional that we do not apply the custom header fields to subframes and child windows?

&gt; Tools/TestWebKitAPI/Tests/WebCore/HTTPHeaderField.cpp:39
&gt; +    if (!field)
&gt; +        return { };
&gt; +    return makeString(field-&gt;name(), &quot;: &quot;, field-&gt;value());

This is OK as-is. I would write this in one line using the ternary operator:

return field ? makeString(field-&gt;name(), &quot;: &quot;, field-&gt;value()) : { };</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357742</commentid>
    <comment_count>11</comment_count>
      <attachid>323046</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-10-06 14:45:18 -0700</bug_when>
    <thetext>Created attachment 323046
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357746</commentid>
    <comment_count>12</comment_count>
      <attachid>323046</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-10-06 15:04:59 -0700</bug_when>
    <thetext>Comment on attachment 323046
Patch

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

&gt; Source/WebCore/platform/network/ResourceRequestBase.cpp:152
&gt; -    if (url().protocolIsInHTTPFamily())
&gt; -        m_platformRequestUpdated = false;
&gt; +    m_platformRequestUpdated = false;

We should probably do this work when we make the test working.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357753</commentid>
    <comment_count>13</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-10-06 15:08:00 -0700</bug_when>
    <thetext>Committed without the ResourceRequestBase.cpp change.
http://trac.webkit.org/r223001</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357800</commentid>
    <comment_count>14</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-10-06 16:12:06 -0700</bug_when>
    <thetext>&lt;rdar://problem/34866836&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357802</commentid>
    <comment_count>15</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-10-06 16:13:02 -0700</bug_when>
    <thetext>Let&apos;s use a separate Bugzilla bug to land the remaining pieces to make things clear.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357847</commentid>
    <comment_count>16</comment_count>
      <attachid>323046</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-10-06 18:21:10 -0700</bug_when>
    <thetext>Comment on attachment 323046
Patch

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

I am disappointed to see that this patch was reviewed and landed. This patch reverts the purpose of the change made in bug #175524 and returns us (the WebKit OpenSource community) to having a CachedResourceRequest that exposes its underlying resource request. This is error prone. On another note, the ChangeLog is out-of-date, does not reflect the actual changes in this patch, and does not provide any explanatory text to help clarify the purpose of this feature or what part this patch represents in the journey to add this feature.

&gt; Source/WebCore/ChangeLog:27
&gt; +        (WebCore::CachedResourceLoader::requestResource):
&gt; +        
&gt; +        If the DocumentLoader has custom header fields from the WebsitePolicies, apply them to any same-origin requests.
&gt; +        

Where is this code?

&gt; Source/WebCore/loader/cache/CachedResourceRequest.h:55
&gt; +    ResourceRequest&amp; resourceRequest() { return m_resourceRequest; }

This reverts the change made in r220632 (bug #175524) and makes this class error prone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357850</commentid>
    <comment_count>17</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-10-06 18:27:11 -0700</bug_when>
    <thetext>(In reply to Daniel Bates from comment #16)
&gt; This patch reverts the purpose of the change made in bug #175524 and returns us (the
&gt; WebKit OpenSource community) to having a CachedResourceRequest that exposes
&gt; its underlying resource request. This is error prone.

Disregard this remark.

&gt; &gt; Source/WebCore/loader/cache/CachedResourceRequest.h:55
&gt; &gt; +    ResourceRequest&amp; resourceRequest() { return m_resourceRequest; }
&gt; 
&gt; This reverts the change made in r220632 (bug #175524) and makes this class
&gt; error prone.

Disregard this remark.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322144</attachid>
            <date>2017-09-28 16:44:12 -0700</date>
            <delta_ts>2017-10-02 11:37:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177629-20170928164411.patch</filename>
            <type>text/plain</type>
            <size>31379</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMjYwMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBACisyMDE3LTA5LTI4ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQXBwbHkgY3Vz
dG9tIGhlYWRlciBmaWVsZHMgdG8gc2FtZS1vcmlnaW4gcmVxdWVzdHMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzYyOQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvdmVyZWQgYnkgbmV3IEFQSSB0ZXN0
cy4KKworICAgICAgICAqIGxvYWRlci9Eb2N1bWVudExvYWRlci5oOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnRMb2FkZXI6OmN1c3RvbUhlYWRlckZpZWxkcyk6CisgICAgICAgICogbG9hZGVy
L0hUVFBIZWFkZXJGaWVsZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVFRQSGVhZGVyRmllbGQ6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVFRQSGVhZGVyRmllbGQ6OkhUVFBIZWFkZXJG
aWVsZCk6IERlbGV0ZWQuCisgICAgICAgICogbG9hZGVyL0hUVFBIZWFkZXJGaWVsZC5oOgorICAg
ICAgICAoV2ViQ29yZTo6SFRUUEhlYWRlckZpZWxkOjplbmNvZGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SFRUUEhlYWRlckZpZWxkOjpkZWNvZGUpOgorICAgICAgICAKKyAgICAgICAgQ2hh
bmdlIEhUVFBIZWFkZXJGaWVsZCBmcm9tIG9uZSBTdHJpbmcgY29udGFpbmluZyB0aGUgbmFtZSBh
bmQgdmFsdWUKKyAgICAgICAgdG8gYSBzdHJpbmcgZm9yIHRoZSBuYW1lIGFuZCBhbm90aGVyIGZv
ciB2YWx1ZS4gIFRoaXMgbWF0Y2hlcyBIVFRQSGVhZGVyTWFwCisgICAgICAgIGFuZCBOU1VSTFJl
cXVlc3QgbW9yZSBjbG9zZWx5IHdoZXJlIG5hbWVzIGFuZCB2YWx1ZXMgYXJlIHRyZWF0ZWQgYXMg
c2VwYXJhdGUgU3RyaW5ncy4KKyAgICAgICAgCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hl
ZFJlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9h
ZGVyOjpyZXF1ZXN0UmVzb3VyY2UpOgorICAgICAgICAKKyAgICAgICAgSWYgdGhlIERvY3VtZW50
TG9hZGVyIGhhcyBjdXN0b20gaGVhZGVyIGZpZWxkcyBmcm9tIHRoZSBXZWJzaXRlUG9saWNpZXMs
IGFwcGx5IHRoZW0gdG8gYW55IHNhbWUtb3JpZ2luIHJlcXVlc3RzLgorICAgICAgICAKKyAgICAg
ICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0Lmg6CisgICAgICAgIChXZWJD
b3JlOjpDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6OnJlc291cmNlUmVxdWVzdCk6CisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OnNldENhY2hlUG9saWN5KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OnNldFRpbWVvdXRJbnRlcnZhbCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpzZXRIVFRQTWV0aG9kKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OnNldEhUVFBIZWFkZXJGaWVsZCk6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpjbGVhckhUVFBBdXRob3JpemF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OmNsZWFySFRUUENvbnRlbnRU
eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OmNsZWFySFRUUFJl
ZmVycmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OmNsZWFySFRU
UE9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpjbGVhckhU
VFBVc2VyQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6Y2xl
YXJIVFRQQWNjZXB0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OmNs
ZWFySFRUUEFjY2VwdEVuY29kaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dEJhc2U6OnNldFJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OnNldEhUVFBCb2R5KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OnNldEFsbG93Q29va2llcyk6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpzZXRQcmlvcml0eSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjphZGRIVFRQSGVhZGVyRmllbGRJ
Zk5vdFByZXNlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6YWRk
SFRUUEhlYWRlckZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6
OnNldEhUVFBIZWFkZXJGaWVsZHMpOgorICAgICAgICAKKyAgICAgICAgbm9uLUhUVFAvSFRUUFMg
UmVzb3VyY2VSZXF1ZXN0cyBuZWVkIHRvIGJlIHVwZGF0ZWQsIHRvbywgaWYgaGVhZGVyIGZpZWxk
cyBhcmUgYWRkZWQuCisgICAgICAgIFNraXBwaW5nIHVwZGF0aW5nIG5vbi1IVFRQL0hUVFBTIFJl
c291cmNlUmVxdWVzdHMgaXMgbm90IGEgdmFsaWQgc2hvcnRjdXQsIGFuZCB3aXRoIHRoZQorICAg
ICAgICBncm93aW5nIGltcG9ydGFuY2Ugb2YgY3VzdG9tIHNjaGVtZXMgd2l0aCBvdXIgbmV3IHB1
YmxpYyBBUEksIHdlIHNob3VsZCB1cGRhdGUgUmVzb3VyY2VSZXF1ZXN0cworICAgICAgICBvZiBj
dXN0b20gc2NoZW1lcyBjb3JyZWN0bHkuCisKIDIwMTctMDktMjcgIEFsZXggQ2hyaXN0ZW5zZW4g
IDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgV0tDb250ZW50UnVsZUxp
c3Qgbm90aWZ5IGFjdGlvbiB0eXBlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1l
bnRMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRM
b2FkZXIuaAkocmV2aXNpb24gMjIyNjAyKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3Vt
ZW50TG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5Nyw2ICsyOTcsNyBAQCBwdWJsaWM6CiAg
ICAgY29uc3QgVmVjdG9yPExpbmtJY29uPiYgbGlua0ljb25zKCkgY29uc3QgeyByZXR1cm4gbV9s
aW5rSWNvbnM7IH0KIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Q3VzdG9tSGVhZGVyRmll
bGRzKFZlY3RvcjxIVFRQSGVhZGVyRmllbGQ+JiYgZmllbGRzKTsKKyAgICBjb25zdCBWZWN0b3I8
SFRUUEhlYWRlckZpZWxkPiYgY3VzdG9tSGVhZGVyRmllbGRzKCkgeyByZXR1cm4gbV9jdXN0b21I
ZWFkZXJGaWVsZHM7IH0KICAgICAKIHByb3RlY3RlZDoKICAgICBXRUJDT1JFX0VYUE9SVCBEb2N1
bWVudExvYWRlcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdWJzdGl0dXRlRGF0YSYp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0hUVFBIZWFkZXJGaWVsZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0hUVFBIZWFkZXJGaWVsZC5jcHAJKHJldmlz
aW9uIDIyMjYwMikKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9IVFRQSGVhZGVyRmllbGQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsMTggKzIwMiwxNiBAQCBzdGF0aWMgYm9vbCBpc1ZhbGlk
VmFsdWUoU3RyaW5nVmlldyB2YWx1CiAKIH0gLy8gbmFtZXNwYWNlIFJGQzcyMzAKIAotSFRUUEhl
YWRlckZpZWxkOjpIVFRQSGVhZGVyRmllbGQoY29uc3QgU3RyaW5nJiBmaWVsZCkKK3N0ZDo6b3B0
aW9uYWw8SFRUUEhlYWRlckZpZWxkPiBIVFRQSGVhZGVyRmllbGQ6OmNyZWF0ZShTdHJpbmcmJiB1
bnBhcnNlZE5hbWUsIFN0cmluZyYmIHVucGFyc2VkVmFsdWUpCiB7Ci0gICAgc2l6ZV90IGNvbG9u
TG9jYXRpb24gPSBmaWVsZC5maW5kKCc6Jyk7Ci0gICAgaWYgKGNvbG9uTG9jYXRpb24gPT0gbm90
Rm91bmQpCi0gICAgICAgIHJldHVybjsKKyAgICBTdHJpbmdWaWV3IHN0cmlwcGVkTmFtZSA9IFN0
cmluZ1ZpZXcodW5wYXJzZWROYW1lKS5zdHJpcExlYWRpbmdBbmRUcmFpbGluZ01hdGNoZWRDaGFy
YWN0ZXJzKFJGQzcyMzA6OmlzV2hpdGVzcGFjZSk7CisgICAgU3RyaW5nVmlldyBzdHJpcHBlZFZh
bHVlID0gU3RyaW5nVmlldyh1bnBhcnNlZFZhbHVlKS5zdHJpcExlYWRpbmdBbmRUcmFpbGluZ01h
dGNoZWRDaGFyYWN0ZXJzKFJGQzcyMzA6OmlzV2hpdGVzcGFjZSk7CisgICAgaWYgKCFSRkM3MjMw
Ojppc1ZhbGlkTmFtZShzdHJpcHBlZE5hbWUpIHx8ICFSRkM3MjMwOjppc1ZhbGlkVmFsdWUoc3Ry
aXBwZWRWYWx1ZSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBTdHJpbmdW
aWV3IG5hbWUgPSBTdHJpbmdWaWV3KGZpZWxkKS5zdWJzdHJpbmcoMCwgY29sb25Mb2NhdGlvbiku
c3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdNYXRjaGVkQ2hhcmFjdGVycyhSRkM3MjMwOjppc1doaXRl
c3BhY2UpOwotICAgIFN0cmluZ1ZpZXcgdmFsdWUgPSBTdHJpbmdWaWV3KGZpZWxkKS5zdWJzdHJp
bmcoY29sb25Mb2NhdGlvbiArIDEpLnN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nTWF0Y2hlZENoYXJh
Y3RlcnMoUkZDNzIzMDo6aXNXaGl0ZXNwYWNlKTsKLSAgICBpZiAoIVJGQzcyMzA6OmlzVmFsaWRO
YW1lKG5hbWUpIHx8ICFSRkM3MjMwOjppc1ZhbGlkVmFsdWUodmFsdWUpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX2ZpZWxkID0gbWFrZVN0cmluZyhuYW1lLCAnOicsICcgJywgIHZhbHVlKTsK
KyAgICBTdHJpbmcgbmFtZSA9IHN0cmlwcGVkTmFtZS5sZW5ndGgoKSA9PSB1bnBhcnNlZE5hbWUu
bGVuZ3RoKCkgPyBXVEZNb3ZlKHVucGFyc2VkTmFtZSkgOiBzdHJpcHBlZE5hbWUudG9TdHJpbmco
KTsKKyAgICBTdHJpbmcgdmFsdWUgPSBzdHJpcHBlZFZhbHVlLmxlbmd0aCgpID09IHVucGFyc2Vk
VmFsdWUubGVuZ3RoKCkgPyBXVEZNb3ZlKHVucGFyc2VkVmFsdWUpIDogc3RyaXBwZWRWYWx1ZS50
b1N0cmluZygpOworICAgIHJldHVybiB7eyBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHZhbHVlKSB9
fTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0hUVFBIZWFkZXJGaWVsZC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9IVFRQSGVhZGVyRmllbGQuaAko
cmV2aXNpb24gMjIyNjAyKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0hUVFBIZWFkZXJGaWVs
ZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwzMiArMzEsNDUgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBXRUJDT1JFX0VYUE9SVCBIVFRQSGVhZGVyRmllbGQgewogcHVibGljOgotICAg
IEhUVFBIZWFkZXJGaWVsZChjb25zdCBTdHJpbmcmKTsKLSAgICAKLSAgICBjb25zdCBTdHJpbmcm
IGZpZWxkKCkgY29uc3QgeyByZXR1cm4gbV9maWVsZDsgfQorICAgIHN0YXRpYyBzdGQ6Om9wdGlv
bmFsPEhUVFBIZWFkZXJGaWVsZD4gY3JlYXRlKFN0cmluZyYmIG5hbWUsIFN0cmluZyYmIHZhbHVl
KTsKKworICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQor
ICAgIGNvbnN0IFN0cmluZyYgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAg
Ym9vbCBpc1ZhbGlkKCkgeyByZXR1cm4gIW1fbmFtZS5pc051bGwoKSAmJiAhbV92YWx1ZS5pc051
bGwoKTsgfQogCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2Rl
ciYpIGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBzdGQ6Om9wdGlv
bmFsPEhUVFBIZWFkZXJGaWVsZD4gZGVjb2RlKERlY29kZXImKTsKIAogcHJpdmF0ZToKLSAgICBT
dHJpbmcgbV9maWVsZDsKKyAgICBIVFRQSGVhZGVyRmllbGQoU3RyaW5nJiYgbmFtZSwgU3RyaW5n
JiYgdmFsdWUpCisgICAgICAgIDogbV9uYW1lKFdURk1vdmUobmFtZSkpCisgICAgICAgICwgbV92
YWx1ZShXVEZNb3ZlKHZhbHVlKSkKKyAgICB7IH0KKyAgICBTdHJpbmcgbV9uYW1lOworICAgIFN0
cmluZyBtX3ZhbHVlOwogfTsKIAogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KIHZvaWQgSFRUUEhl
YWRlckZpZWxkOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKIHsKLSAgICBlbmNvZGVy
IDw8IG1fZmllbGQ7CisgICAgZW5jb2RlciA8PCBtX25hbWU7CisgICAgZW5jb2RlciA8PCBtX3Zh
bHVlOwogfQogCiB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPgogc3RkOjpvcHRpb25hbDxIVFRQSGVh
ZGVyRmllbGQ+IEhUVFBIZWFkZXJGaWVsZDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiB7Ci0g
ICAgc3RkOjpvcHRpb25hbDxTdHJpbmc+IGZpZWxkOwotICAgIGRlY29kZXIgPj4gZmllbGQ7Ci0g
ICAgaWYgKCFmaWVsZCkKKyAgICBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gbmFtZTsKKyAgICBkZWNv
ZGVyID4+IG5hbWU7CisgICAgaWYgKCFuYW1lKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworCisgICAgc3RkOjpvcHRpb25hbDxTdHJpbmc+IHZhbHVlOworICAgIGRlY29kZXIgPj4gdmFs
dWU7CisgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAg
IHJldHVybiB7eyBXVEZNb3ZlKCpmaWVsZCkgfX07CisgICAgcmV0dXJuIHt7IFdURk1vdmUoKm5h
bWUpLCBXVEZNb3ZlKCp2YWx1ZSkgfX07CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNl
TG9hZGVyLmNwcAkocmV2aXNpb24gMjIyNjAyKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nh
Y2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEs
NyBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1l
bnQuaCIKICNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVFRQ
SGVhZGVyRmllbGQuaCIKICNpbmNsdWRlICJMb2FkZXJTdHJhdGVneS5oIgogI2luY2x1ZGUgIkxv
Y2FsaXplZFN0cmluZ3MuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCkBAIC03NTAsNiArNzUxLDE0
IEBAIFJlc291cmNlRXJyb3JPcjxDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWMKICAgICB9CiAjZW5k
aWYKIAorICAgIC8vIEFkZCBjdXN0b20gaGVhZGVycyB0byBzYW1lLW9yaWdpbiByZXF1ZXN0cyBv
bmx5LgorICAgIGlmIChtX2RvY3VtZW50TG9hZGVyICYmICFtX2RvY3VtZW50TG9hZGVyLT5jdXN0
b21IZWFkZXJGaWVsZHMoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ2FjaGVk
UmVzb3VyY2U6OlR5cGU6Ok1haW5SZXNvdXJjZSB8fCAoZG9jdW1lbnQoKSAmJiBkb2N1bWVudCgp
LT50b3BPcmlnaW4oKS5lcXVhbChTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKHJlcXVlc3QucmVzb3Vy
Y2VSZXF1ZXN0KCkudXJsKCkpLnB0cigpKSkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byYgZmll
bGQgOiBtX2RvY3VtZW50TG9hZGVyLT5jdXN0b21IZWFkZXJGaWVsZHMoKSkKKyAgICAgICAgICAg
ICAgICByZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLmFkZEhUVFBIZWFkZXJGaWVsZChmaWVsZC5u
YW1lKCksIGZpZWxkLnZhbHVlKCkpOworICAgICAgICB9CisgICAgfQorCiAgICAgTG9hZFRpbWlu
ZyBsb2FkVGltaW5nOwogICAgIGxvYWRUaW1pbmcubWFya1N0YXJ0VGltZUFuZEZldGNoU3RhcnQo
KTsKICAgICBJbml0aWF0b3JDb250ZXh0IGluaXRpYXRvckNvbnRleHQgPSByZXF1ZXN0Lm9wdGlv
bnMoKS5pbml0aWF0b3JDb250ZXh0OwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hl
L0NhY2hlZFJlc291cmNlUmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuaAkocmV2aXNpb24gMjIyNjAyKQorKysg
U291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVzdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Miw2ICs1Miw3IEBAIHB1YmxpYzoKIAogICAgIFJlc291cmNlUmVxdWVz
dCYmIHJlbGVhc2VSZXNvdXJjZVJlcXVlc3QoKSB7IHJldHVybiBXVEZNb3ZlKG1fcmVzb3VyY2VS
ZXF1ZXN0KTsgfQogICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0KCkg
Y29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZVJlcXVlc3Q7IH0KKyAgICBSZXNvdXJjZVJlcXVlc3Qm
IHJlc291cmNlUmVxdWVzdCgpIHsgcmV0dXJuIG1fcmVzb3VyY2VSZXF1ZXN0OyB9CiAgICAgY29u
c3QgU3RyaW5nJiBjaGFyc2V0KCkgY29uc3QgeyByZXR1cm4gbV9jaGFyc2V0OyB9CiAgICAgdm9p
ZCBzZXRDaGFyc2V0KGNvbnN0IFN0cmluZyYgY2hhcnNldCkgeyBtX2NoYXJzZXQgPSBjaGFyc2V0
OyB9CiAgICAgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJiBvcHRpb25zKCkgY29uc3QgeyBy
ZXR1cm4gbV9vcHRpb25zOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAJKHJldmlzaW9uIDIyMjYwMikK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OSw4ICsxNDksNyBAQCB2b2lkIFJlc291cmNlUmVxdWVz
dEJhc2U6OnNldENhY2hlUG9saWN5CiAgICAgCiAgICAgbV9jYWNoZVBvbGljeSA9IGNhY2hlUG9s
aWN5OwogICAgIAotICAgIGlmICh1cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCi0gICAg
ICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOworICAgIG1fcGxhdGZvcm1SZXF1
ZXN0VXBkYXRlZCA9IGZhbHNlOwogfQogCiBkb3VibGUgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6dGlt
ZW91dEludGVydmFsKCkgY29uc3QKQEAgLTE2OSw4ICsxNjgsNyBAQCB2b2lkIFJlc291cmNlUmVx
dWVzdEJhc2U6OnNldFRpbWVvdXRJbnRlCiAKICAgICBtX3RpbWVvdXRJbnRlcnZhbCA9IHRpbWVv
dXRJbnRlcnZhbDsKICAgICAKLSAgICBpZiAodXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgp
KQotICAgICAgICBtX3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQgPSBmYWxzZTsKKyAgICBtX3BsYXRm
b3JtUmVxdWVzdFVwZGF0ZWQgPSBmYWxzZTsKIH0KIAogY29uc3QgVVJMJiBSZXNvdXJjZVJlcXVl
c3RCYXNlOjpmaXJzdFBhcnR5Rm9yQ29va2llcygpIGNvbnN0CkBAIC0yMDgsOCArMjA2LDcgQEAg
dm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpzZXRIVFRQTWV0aG9kKAogCiAgICAgbV9odHRwTWV0
aG9kID0gaHR0cE1ldGhvZDsKICAgICAKLSAgICBpZiAodXJsKCkucHJvdG9jb2xJc0luSFRUUEZh
bWlseSgpKQotICAgICAgICBtX3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQgPSBmYWxzZTsKKyAgICBt
X3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQgPSBmYWxzZTsKIH0KIAogY29uc3QgSFRUUEhlYWRlck1h
cCYgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6aHR0cEhlYWRlckZpZWxkcygpIGNvbnN0CkBAIC0yMzks
OCArMjM2LDcgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpzZXRIVFRQSGVhZGVyRgogCiAg
ICAgbV9odHRwSGVhZGVyRmllbGRzLnNldChuYW1lLCB2YWx1ZSk7CiAgICAgCi0gICAgaWYgKHVy
bCgpLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkKLSAgICAgICAgbV9wbGF0Zm9ybVJlcXVlc3RV
cGRhdGVkID0gZmFsc2U7CisgICAgbV9wbGF0Zm9ybVJlcXVlc3RVcGRhdGVkID0gZmFsc2U7CiB9
CiAKIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6c2V0SFRUUEhlYWRlckZpZWxkKEhUVFBIZWFk
ZXJOYW1lIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCkBAIC0yNDksOCArMjQ1LDcgQEAgdm9p
ZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpzZXRIVFRQSGVhZGVyRgogCiAgICAgbV9odHRwSGVhZGVy
RmllbGRzLnNldChuYW1lLCB2YWx1ZSk7CiAKLSAgICBpZiAodXJsKCkucHJvdG9jb2xJc0luSFRU
UEZhbWlseSgpKQotICAgICAgICBtX3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQgPSBmYWxzZTsKKyAg
ICBtX3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQgPSBmYWxzZTsKIH0KIAogdm9pZCBSZXNvdXJjZVJl
cXVlc3RCYXNlOjpjbGVhckhUVFBBdXRob3JpemF0aW9uKCkKQEAgLTI2MCw4ICsyNTUsNyBAQCB2
b2lkIFJlc291cmNlUmVxdWVzdEJhc2U6OmNsZWFySFRUUEF1dGhvCiAgICAgaWYgKCFtX2h0dHBI
ZWFkZXJGaWVsZHMucmVtb3ZlKEhUVFBIZWFkZXJOYW1lOjpBdXRob3JpemF0aW9uKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgaWYgKHVybCgpLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkKLSAg
ICAgICAgbV9wbGF0Zm9ybVJlcXVlc3RVcGRhdGVkID0gZmFsc2U7CisgICAgbV9wbGF0Zm9ybVJl
cXVlc3RVcGRhdGVkID0gZmFsc2U7CiB9CiAKIFN0cmluZyBSZXNvdXJjZVJlcXVlc3RCYXNlOjpo
dHRwQ29udGVudFR5cGUoKSBjb25zdApAQCAtMjgwLDggKzI3NCw3IEBAIHZvaWQgUmVzb3VyY2VS
ZXF1ZXN0QmFzZTo6Y2xlYXJIVFRQQ29udGUKIAogICAgIG1faHR0cEhlYWRlckZpZWxkcy5yZW1v
dmUoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRUeXBlKTsKIAotICAgIGlmICh1cmwoKS5wcm90b2Nv
bElzSW5IVFRQRmFtaWx5KCkpCi0gICAgICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZh
bHNlOworICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOwogfQogCiBTdHJpbmcg
UmVzb3VyY2VSZXF1ZXN0QmFzZTo6aHR0cFJlZmVycmVyKCkgY29uc3QKQEAgLTMwNSw4ICsyOTgs
NyBAQCB2b2lkIFJlc291cmNlUmVxdWVzdEJhc2U6OmNsZWFySFRUUFJlZmVyCiAKICAgICBtX2h0
dHBIZWFkZXJGaWVsZHMucmVtb3ZlKEhUVFBIZWFkZXJOYW1lOjpSZWZlcmVyKTsKIAotICAgIGlm
ICh1cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCi0gICAgICAgIG1fcGxhdGZvcm1SZXF1
ZXN0VXBkYXRlZCA9IGZhbHNlOworICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNl
OwogfQogCiBTdHJpbmcgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6aHR0cE9yaWdpbigpIGNvbnN0CkBA
IC0zMzAsOCArMzIyLDcgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpjbGVhckhUVFBPcmln
aQogCiAgICAgbV9odHRwSGVhZGVyRmllbGRzLnJlbW92ZShIVFRQSGVhZGVyTmFtZTo6T3JpZ2lu
KTsKIAotICAgIGlmICh1cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCi0gICAgICAgIG1f
cGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOworICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBk
YXRlZCA9IGZhbHNlOwogfQogCiBib29sIFJlc291cmNlUmVxdWVzdEJhc2U6Omhhc0hUVFBIZWFk
ZXIoSFRUUEhlYWRlck5hbWUgbmFtZSkgY29uc3QKQEAgLTM1NSw4ICszNDYsNyBAQCB2b2lkIFJl
c291cmNlUmVxdWVzdEJhc2U6OmNsZWFySFRUUFVzZXJBCiAKICAgICBtX2h0dHBIZWFkZXJGaWVs
ZHMucmVtb3ZlKEhUVFBIZWFkZXJOYW1lOjpVc2VyQWdlbnQpOwogCi0gICAgaWYgKHVybCgpLnBy
b3RvY29sSXNJbkhUVFBGYW1pbHkoKSkKLSAgICAgICAgbV9wbGF0Zm9ybVJlcXVlc3RVcGRhdGVk
ID0gZmFsc2U7CisgICAgbV9wbGF0Zm9ybVJlcXVlc3RVcGRhdGVkID0gZmFsc2U7CiB9CiAKIFN0
cmluZyBSZXNvdXJjZVJlcXVlc3RCYXNlOjpodHRwQWNjZXB0KCkgY29uc3QKQEAgLTM3NSw4ICsz
NjUsNyBAQCB2b2lkIFJlc291cmNlUmVxdWVzdEJhc2U6OmNsZWFySFRUUEFjY2VwCiAKICAgICBt
X2h0dHBIZWFkZXJGaWVsZHMucmVtb3ZlKEhUVFBIZWFkZXJOYW1lOjpBY2NlcHQpOwogCi0gICAg
aWYgKHVybCgpLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkKLSAgICAgICAgbV9wbGF0Zm9ybVJl
cXVlc3RVcGRhdGVkID0gZmFsc2U7CisgICAgbV9wbGF0Zm9ybVJlcXVlc3RVcGRhdGVkID0gZmFs
c2U7CiB9CiAKIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6Y2xlYXJIVFRQQWNjZXB0RW5jb2Rp
bmcoKQpAQCAtMzg1LDggKzM3NCw3IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6Y2xlYXJI
VFRQQWNjZXAKIAogICAgIG1faHR0cEhlYWRlckZpZWxkcy5yZW1vdmUoSFRUUEhlYWRlck5hbWU6
OkFjY2VwdEVuY29kaW5nKTsKIAotICAgIGlmICh1cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5
KCkpCi0gICAgICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOworICAgIG1fcGxh
dGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOwogfQogCiB2b2lkIFJlc291cmNlUmVxdWVzdEJh
c2U6OnNldFJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5KGNv
bnN0IFN0cmluZyYgZW5jb2RpbmcxLCBjb25zdCBTdHJpbmcmIGVuY29kaW5nMiwgY29uc3QgU3Ry
aW5nJiBlbmNvZGluZzMpCkBAIC00MDIsOCArMzkwLDcgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3RC
YXNlOjpzZXRSZXNwb25zZUNvbgogICAgIGlmICghZW5jb2RpbmczLmlzTnVsbCgpKQogICAgICAg
ICBtX3Jlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5LnVuY2hl
Y2tlZEFwcGVuZChlbmNvZGluZzMpOwogICAgIAotICAgIGlmICh1cmwoKS5wcm90b2NvbElzSW5I
VFRQRmFtaWx5KCkpCi0gICAgICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOwor
ICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOwogfQogCiBGb3JtRGF0YSogUmVz
b3VyY2VSZXF1ZXN0QmFzZTo6aHR0cEJvZHkoKSBjb25zdApAQCAtNDIxLDggKzQwOCw3IEBAIHZv
aWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6c2V0SFRUUEJvZHkoUmUKIAogICAgIG1fcmVzb3VyY2VS
ZXF1ZXN0Qm9keVVwZGF0ZWQgPSB0cnVlOwogCi0gICAgaWYgKHVybCgpLnByb3RvY29sSXNJbkhU
VFBGYW1pbHkoKSkKLSAgICAgICAgbV9wbGF0Zm9ybVJlcXVlc3RCb2R5VXBkYXRlZCA9IGZhbHNl
OworICAgIG1fcGxhdGZvcm1SZXF1ZXN0Qm9keVVwZGF0ZWQgPSBmYWxzZTsKIH0KIAogYm9vbCBS
ZXNvdXJjZVJlcXVlc3RCYXNlOjphbGxvd0Nvb2tpZXMoKSBjb25zdApAQCAtNDQxLDggKzQyNyw3
IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6c2V0QWxsb3dDb29raWUKIAogICAgIG1fYWxs
b3dDb29raWVzID0gYWxsb3dDb29raWVzOwogICAgIAotICAgIGlmICh1cmwoKS5wcm90b2NvbElz
SW5IVFRQRmFtaWx5KCkpCi0gICAgICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNl
OworICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOwogfQogCiBSZXNvdXJjZUxv
YWRQcmlvcml0eSBSZXNvdXJjZVJlcXVlc3RCYXNlOjpwcmlvcml0eSgpIGNvbnN0CkBAIC00NjEs
OCArNDQ2LDcgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpzZXRQcmlvcml0eShSZQogCiAg
ICAgbV9wcmlvcml0eSA9IHByaW9yaXR5OwogCi0gICAgaWYgKHVybCgpLnByb3RvY29sSXNJbkhU
VFBGYW1pbHkoKSkKLSAgICAgICAgbV9wbGF0Zm9ybVJlcXVlc3RVcGRhdGVkID0gZmFsc2U7Cisg
ICAgbV9wbGF0Zm9ybVJlcXVlc3RVcGRhdGVkID0gZmFsc2U7CiB9CiAKIHZvaWQgUmVzb3VyY2VS
ZXF1ZXN0QmFzZTo6YWRkSFRUUEhlYWRlckZpZWxkSWZOb3RQcmVzZW50KEhUVFBIZWFkZXJOYW1l
IG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCkBAIC00NzIsOCArNDU2LDcgQEAgdm9pZCBSZXNv
dXJjZVJlcXVlc3RCYXNlOjphZGRIVFRQSGVhZGVyRgogICAgIGlmICghbV9odHRwSGVhZGVyRmll
bGRzLmFkZElmTm90UHJlc2VudChuYW1lLCB2YWx1ZSkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGlmICh1cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCi0gICAgICAgIG1fcGxhdGZvcm1S
ZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOworICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZh
bHNlOwogfQogCiB2b2lkIFJlc291cmNlUmVxdWVzdEJhc2U6OmFkZEhUVFBIZWFkZXJGaWVsZChI
VFRQSGVhZGVyTmFtZSBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQpAQCAtNDgyLDggKzQ2NSw3
IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6YWRkSFRUUEhlYWRlckYKIAogICAgIG1faHR0
cEhlYWRlckZpZWxkcy5hZGQobmFtZSwgdmFsdWUpOwogCi0gICAgaWYgKHVybCgpLnByb3RvY29s
SXNJbkhUVFBGYW1pbHkoKSkKLSAgICAgICAgbV9wbGF0Zm9ybVJlcXVlc3RVcGRhdGVkID0gZmFs
c2U7CisgICAgbV9wbGF0Zm9ybVJlcXVlc3RVcGRhdGVkID0gZmFsc2U7CiB9CiAKIHZvaWQgUmVz
b3VyY2VSZXF1ZXN0QmFzZTo6YWRkSFRUUEhlYWRlckZpZWxkKGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKQEAgLTQ5Miw4ICs0NzQsNyBAQCB2b2lkIFJlc291cmNlUmVx
dWVzdEJhc2U6OmFkZEhUVFBIZWFkZXJGCiAKICAgICBtX2h0dHBIZWFkZXJGaWVsZHMuYWRkKG5h
bWUsIHZhbHVlKTsKIAotICAgIGlmICh1cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCi0g
ICAgICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOworICAgIG1fcGxhdGZvcm1S
ZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOwogfQogCiBib29sIFJlc291cmNlUmVxdWVzdEJhc2U6Omhh
c0hUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZSBoZWFkZXJOYW1lKSBjb25zdApAQCAtNTA3
LDggKzQ4OCw3IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6c2V0SFRUUEhlYWRlckYKIAog
ICAgIG1faHR0cEhlYWRlckZpZWxkcyA9IFdURk1vdmUoaGVhZGVyRmllbGRzKTsKIAotICAgIGlm
ICh1cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCi0gICAgICAgIG1fcGxhdGZvcm1SZXF1
ZXN0VXBkYXRlZCA9IGZhbHNlOworICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNl
OwogfQogCiBib29sIGVxdWFsSWdub3JpbmdIZWFkZXJGaWVsZHMoY29uc3QgUmVzb3VyY2VSZXF1
ZXN0QmFzZSYgYSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0QmFzZSYgYikKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAyMjI2MDIpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDIzIEBACisyMDE3LTA5LTI4ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlz
dGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQXBwbHkgY3VzdG9tIGhlYWRlcnMgdG8gc2Ft
ZS1vcmlnaW4gcmVxdWVzdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3NzYyOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZVBvbGljaWVzLmNwcDoKKyAgICAg
ICAgKFdLV2Vic2l0ZVBvbGljaWVzQ29weUN1c3RvbUhlYWRlckZpZWxkcyk6CisgICAgICAgIChX
S1dlYnNpdGVQb2xpY2llc1NldEN1c3RvbUhlYWRlckZpZWxkcyk6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9DL1dLV2Vic2l0ZVBvbGljaWVzLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9D
b2NvYS9fV0tXZWJzaXRlUG9saWNpZXMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29h
L19XS1dlYnNpdGVQb2xpY2llcy5tbToKKyAgICAgICAgKC1bX1dLV2Vic2l0ZVBvbGljaWVzIGN1
c3RvbUhlYWRlckZpZWxkc10pOgorICAgICAgICAoLVtfV0tXZWJzaXRlUG9saWNpZXMgc2V0Q3Vz
dG9tSGVhZGVyRmllbGRzOl0pOgorCisgICAgICAgIE1ha2UgdGhlIFNQSSBmb3Igc2V0dGluZyBj
dXN0b20gaGVhZGVyIGZpZWxkcyB0YWtlIGEgZGljdGlvbmFyeTxTdHJpbmcsIFN0cmluZz4KKyAg
ICAgICAgaW5zdGVhZCBvZiBhbiBhcnJheSBvZiBTdHJpbmdzIHdpdGggY29sb25zLiBUaGlzIG1h
dGNoZXMgTlNVUkxSZXF1ZXN0IGFuZCBvdGhlcgorICAgICAgICBBUElzIHRoYXQgZGVhbCB3aXRo
IGhlYWRlciBmaWVsZHMuCisKIDIwMTctMDktMjcgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0
ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgV0tDb250ZW50UnVsZUxpc3Qgbm90aWZ5
IGFjdGlvbiB0eXBlCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNp
dGVQb2xpY2llcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0MvV0tXZWJzaXRlUG9saWNpZXMuY3BwCShyZXZpc2lvbiAyMjI2MDIpCisrKyBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVQb2xpY2llcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDEwICsyNiwxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldLV2Vi
c2l0ZVBvbGljaWVzLmgiCiAKLSNpbmNsdWRlICJBUElBcnJheS5oIgorI2luY2x1ZGUgIkFQSURp
Y3Rpb25hcnkuaCIKICNpbmNsdWRlICJBUElXZWJzaXRlUG9saWNpZXMuaCIKICNpbmNsdWRlICJX
S0FQSUNhc3QuaCIKICNpbmNsdWRlICJXS0FycmF5LmgiCisjaW5jbHVkZSAiV0tEaWN0aW9uYXJ5
LmgiCisjaW5jbHVkZSAiV0tSZXRhaW5QdHIuaCIKICNpbmNsdWRlICJXZWJzaXRlUG9saWNpZXMu
aCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKQEAgLTU0LDI2ICs1NiwyNSBAQCBib29sIFdL
V2Vic2l0ZVBvbGljaWVzR2V0Q29udGVudEJsb2NrZXJzCiAgICAgcmV0dXJuIHRvSW1wbCh3ZWJz
aXRlUG9saWNpZXMpLT5jb250ZW50QmxvY2tlcnNFbmFibGVkKCk7CiB9CiAKLVdLX0VYUE9SVCBX
S0FycmF5UmVmIFdLV2Vic2l0ZVBvbGljaWVzQ29weUN1c3RvbUhlYWRlckZpZWxkcyhXS1dlYnNp
dGVQb2xpY2llc1JlZiB3ZWJzaXRlUG9saWNpZXMpCitXS19FWFBPUlQgV0tEaWN0aW9uYXJ5UmVm
IFdLV2Vic2l0ZVBvbGljaWVzQ29weUN1c3RvbUhlYWRlckZpZWxkcyhXS1dlYnNpdGVQb2xpY2ll
c1JlZiB3ZWJzaXRlUG9saWNpZXMpCiB7Ci0gICAgY29uc3QgYXV0byYgZmllbGRzID0gdG9JbXBs
KHdlYnNpdGVQb2xpY2llcyktPmN1c3RvbUhlYWRlckZpZWxkcygpOwotICAgIFZlY3RvcjxSZWZQ
dHI8QVBJOjpPYmplY3Q+PiBzdHJpbmdzOwotICAgIHN0cmluZ3MucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShmaWVsZHMuc2l6ZSgpKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGZpZWxkIDogZmllbGRz
KQotICAgICAgICBzdHJpbmdzLnVuY2hlY2tlZEFwcGVuZChBUEk6OlN0cmluZzo6Y3JlYXRlKGZp
ZWxkLmZpZWxkKCkpKTsKLSAgICByZXR1cm4gdG9BUEkoQVBJOjpBcnJheTo6Y3JlYXRlKFdURk1v
dmUoc3RyaW5ncykpLnB0cigpKTsKKyAgICBIYXNoTWFwPFdURjo6U3RyaW5nLCBSZWZQdHI8QVBJ
OjpPYmplY3Q+PiBmaWVsZHM7CisgICAgZm9yIChjb25zdCBhdXRvJiBmaWVsZCA6IHRvSW1wbCh3
ZWJzaXRlUG9saWNpZXMpLT5jdXN0b21IZWFkZXJGaWVsZHMoKSkKKyAgICAgICAgZmllbGRzLmFk
ZChmaWVsZC5uYW1lKCksIEFQSTo6U3RyaW5nOjpjcmVhdGUoZmllbGQudmFsdWUoKSkpOworICAg
IHJldHVybiB0b0FQSShBUEk6OkRpY3Rpb25hcnk6OmNyZWF0ZShXVEZNb3ZlKGZpZWxkcykpLnB0
cigpKTsKIH0KIAotV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlUG9saWNpZXNTZXRDdXN0b21IZWFk
ZXJGaWVsZHMoV0tXZWJzaXRlUG9saWNpZXNSZWYgd2Vic2l0ZVBvbGljaWVzLCBXS0FycmF5UmVm
IGFycmF5KQorV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlUG9saWNpZXNTZXRDdXN0b21IZWFkZXJG
aWVsZHMoV0tXZWJzaXRlUG9saWNpZXNSZWYgd2Vic2l0ZVBvbGljaWVzLCBXS0RpY3Rpb25hcnlS
ZWYgZGljdGlvbmFyeSkKIHsKLSAgICBzaXplX3QgbGVuZ3RoID0gV0tBcnJheUdldFNpemUoYXJy
YXkpOworICAgIGF1dG8ga2V5cyA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q29weUtleXMoZGljdGlv
bmFyeSkpOworICAgIHNpemVfdCBsZW5ndGggPSBXS0FycmF5R2V0U2l6ZShrZXlzLmdldCgpKTsK
ICAgICBWZWN0b3I8V2ViQ29yZTo6SFRUUEhlYWRlckZpZWxkPiBmaWVsZHM7CiAgICAgZmllbGRz
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIFdlYkNvcmU6OkhUVFBIZWFkZXJGaWVsZCBwYXJz
ZWRGaWVsZCh0b0ltcGwoc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLQXJyYXlHZXRJdGVtQXRJ
bmRleChhcnJheSwgaSkpKS0+c3RyaW5nKCkpOwotICAgICAgICBpZiAoIXBhcnNlZEZpZWxkLmZp
ZWxkKCkuaXNOdWxsKCkKLSAgICAgICAgICAgICYmIHBhcnNlZEZpZWxkLmZpZWxkKCkuc3RhcnRz
V2l0aElnbm9yaW5nQVNDSUlDYXNlKCJYLSIpKSAvLyBMZXQncyBqdXN0IHByZXRlbmQgUkZDNjY0
OCBuZXZlciBoYXBwZW5lZC4KLSAgICAgICAgICAgIGZpZWxkcy51bmNoZWNrZWRBcHBlbmQoV1RG
TW92ZShwYXJzZWRGaWVsZCkpOworICAgICAgICBXS1N0cmluZ1JlZiBuYW1lID0gc3RhdGljX2Nh
c3Q8V0tTdHJpbmdSZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleChrZXlzLmdldCgpLCBpKSk7Cisg
ICAgICAgIGF1dG8gZmllbGQgPSBXZWJDb3JlOjpIVFRQSGVhZGVyRmllbGQ6OmNyZWF0ZSh0b0lt
cGwobmFtZSktPnN0cmluZygpLCB0b0ltcGwoc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGlj
dGlvbmFyeUdldEl0ZW1Gb3JLZXkoZGljdGlvbmFyeSwgbmFtZSkpKS0+c3RyaW5nKCkpOworICAg
ICAgICBpZiAoZmllbGQgJiYgZmllbGQtPm5hbWUoKS5zdGFydHNXaXRoSWdub3JpbmdBU0NJSUNh
c2UoIlgtIikpIC8vIExldCdzIGp1c3QgcHJldGVuZCBSRkM2NjQ4IG5ldmVyIGhhcHBlbmVkLgor
ICAgICAgICAgICAgZmllbGRzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKCpmaWVsZCkpOwogICAg
IH0KICAgICB0b0ltcGwod2Vic2l0ZVBvbGljaWVzKS0+c2V0Q3VzdG9tSGVhZGVyRmllbGRzKFdU
Rk1vdmUoZmllbGRzKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9X
S1dlYnNpdGVQb2xpY2llcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9DL1dLV2Vic2l0ZVBvbGljaWVzLmgJKHJldmlzaW9uIDIyMjYwMikKKysrIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZVBvbGljaWVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUxLDggKzUxLDggQEAgV0tfRVhQT1JUIFdLV2Vic2l0ZVBvbGljaWVzUmVmIFdLV2Vic2l0
ZQogV0tfRVhQT1JUIGJvb2wgV0tXZWJzaXRlUG9saWNpZXNHZXRDb250ZW50QmxvY2tlcnNFbmFi
bGVkKFdLV2Vic2l0ZVBvbGljaWVzUmVmKTsKIFdLX0VYUE9SVCB2b2lkIFdLV2Vic2l0ZVBvbGlj
aWVzU2V0Q29udGVudEJsb2NrZXJzRW5hYmxlZChXS1dlYnNpdGVQb2xpY2llc1JlZiwgYm9vbCk7
CiAKLVdLX0VYUE9SVCBXS0FycmF5UmVmIFdLV2Vic2l0ZVBvbGljaWVzQ29weUN1c3RvbUhlYWRl
ckZpZWxkcyhXS1dlYnNpdGVQb2xpY2llc1JlZik7Ci1XS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVQ
b2xpY2llc1NldEN1c3RvbUhlYWRlckZpZWxkcyhXS1dlYnNpdGVQb2xpY2llc1JlZiwgV0tBcnJh
eVJlZik7CitXS19FWFBPUlQgV0tEaWN0aW9uYXJ5UmVmIFdLV2Vic2l0ZVBvbGljaWVzQ29weUN1
c3RvbUhlYWRlckZpZWxkcyhXS1dlYnNpdGVQb2xpY2llc1JlZik7CitXS19FWFBPUlQgdm9pZCBX
S1dlYnNpdGVQb2xpY2llc1NldEN1c3RvbUhlYWRlckZpZWxkcyhXS1dlYnNpdGVQb2xpY2llc1Jl
ZiwgV0tEaWN0aW9uYXJ5UmVmKTsKIAogV0tfRVhQT1JUIFdLV2Vic2l0ZUF1dG9wbGF5UXVpcmsg
V0tXZWJzaXRlUG9saWNpZXNHZXRBbGxvd2VkQXV0b3BsYXlRdWlya3MoV0tXZWJzaXRlUG9saWNp
ZXNSZWYpOwogV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlUG9saWNpZXNTZXRBbGxvd2VkQXV0b3Bs
YXlRdWlya3MoV0tXZWJzaXRlUG9saWNpZXNSZWYsIFdLV2Vic2l0ZUF1dG9wbGF5UXVpcmspOwpJ
bmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYnNpdGVQb2xpY2ll
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tX
ZWJzaXRlUG9saWNpZXMuaAkocmV2aXNpb24gMjIyNjAyKQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL19XS1dlYnNpdGVQb2xpY2llcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00
NSw3ICs0NSw3IEBAIFdLX0NMQVNTX0FWQUlMQUJMRShtYWNvc3goMTAuMTIuMyksIGlvcygKIEBw
cm9wZXJ0eSAobm9uYXRvbWljKSBCT09MIGNvbnRlbnRCbG9ja2Vyc0VuYWJsZWQ7CiBAcHJvcGVy
dHkgKG5vbmF0b21pYykgX1dLV2Vic2l0ZUF1dG9wbGF5UXVpcmsgYWxsb3dlZEF1dG9wbGF5UXVp
cmtzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KDEwLjEzKSwgaW9zKDExLjApKTsKIEBwcm9wZXJ0
eSAobm9uYXRvbWljKSBfV0tXZWJzaXRlQXV0b3BsYXlQb2xpY3kgYXV0b3BsYXlQb2xpY3kgV0tf
QVBJX0FWQUlMQUJMRShtYWNvc3goMTAuMTMpLCBpb3MoMTEuMCkpOwotQHByb3BlcnR5IChub25h
dG9taWMsIGNvcHksIHNldHRlcj1zZXRDdXN0b21IZWFkZXJGaWVsZHM6KSBOU0FycmF5PE5TU3Ry
aW5nICo+ICpjdXN0b21IZWFkZXJGaWVsZHMgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFD
X1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSwgc2V0
dGVyPXNldEN1c3RvbUhlYWRlckZpZWxkczopIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBOU1N0
cmluZyAqPiAqY3VzdG9tSGVhZGVyRmllbGRzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01B
Q19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogCiBAZW5kCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJzaXRlUG9saWNpZXMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYnNpdGVQb2xpY2llcy5tbQko
cmV2aXNpb24gMjIyNjAyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19X
S1dlYnNpdGVQb2xpY2llcy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTE2LDI0ICsxMTYsMjQgQEAg
LSAoX1dLV2Vic2l0ZUF1dG9wbGF5UG9saWN5KWF1dG9wbGF5UG9saQogICAgIH0KIH0KIAotLSAo
TlNBcnJheTxOU1N0cmluZyAqPiAqKWN1c3RvbUhlYWRlckZpZWxkcworLSAoTlNEaWN0aW9uYXJ5
PE5TU3RyaW5nICosIE5TU3RyaW5nICo+ICopY3VzdG9tSGVhZGVyRmllbGRzCiB7CiAgICAgY29u
c3QgYXV0byYgZmllbGRzID0gX3dlYnNpdGVQb2xpY2llcy0+Y3VzdG9tSGVhZGVyRmllbGRzKCk7
Ci0gICAgTlNNdXRhYmxlQXJyYXkgKmFycmF5ID0gW1tbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGlu
aXRXaXRoQ2FwYWNpdHk6ZmllbGRzLnNpemUoKV0gYXV0b3JlbGVhc2VdOworICAgIE5TTXV0YWJs
ZURpY3Rpb25hcnkgKmRpY3Rpb25hcnkgPSBbW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBp
bml0V2l0aENhcGFjaXR5OmZpZWxkcy5zaXplKCldIGF1dG9yZWxlYXNlXTsKICAgICBmb3IgKGNv
bnN0IGF1dG8mIGZpZWxkIDogZmllbGRzKQotICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OmZpZWxk
LmZpZWxkKCldOwotICAgIHJldHVybiBhcnJheTsKKyAgICAgICAgW2RpY3Rpb25hcnkgc2V0T2Jq
ZWN0OmZpZWxkLnZhbHVlKCkgZm9yS2V5OmZpZWxkLm5hbWUoKV07CisgICAgcmV0dXJuIGRpY3Rp
b25hcnk7CiB9CiAKLS0gKHZvaWQpc2V0Q3VzdG9tSGVhZGVyRmllbGRzOihOU0FycmF5PE5TU3Ry
aW5nICo+ICopZmllbGRzCistICh2b2lkKXNldEN1c3RvbUhlYWRlckZpZWxkczooTlNEaWN0aW9u
YXJ5PE5TU3RyaW5nICosIE5TU3RyaW5nICo+ICopZmllbGRzCiB7CiAgICAgVmVjdG9yPFdlYkNv
cmU6OkhUVFBIZWFkZXJGaWVsZD4gcGFyc2VkRmllbGRzOwogICAgIHBhcnNlZEZpZWxkcy5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KGZpZWxkcy5jb3VudCk7Ci0gICAgZm9yIChOU1N0cmluZyAqc3Ry
aW5nIGluIGZpZWxkcykgewotICAgICAgICBXZWJDb3JlOjpIVFRQSGVhZGVyRmllbGQgcGFyc2Vk
RmllbGQoc3RyaW5nKTsKLSAgICAgICAgaWYgKCFwYXJzZWRGaWVsZC5maWVsZCgpLmlzTnVsbCgp
Ci0gICAgICAgICAgICAmJiBwYXJzZWRGaWVsZC5maWVsZCgpLnN0YXJ0c1dpdGhJZ25vcmluZ0FT
Q0lJQ2FzZSgiWC0iKSkgLy8gTGV0J3MganVzdCBwcmV0ZW5kIFJGQzY2NDggbmV2ZXIgaGFwcGVu
ZWQuCi0gICAgICAgICAgICBwYXJzZWRGaWVsZHMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUocGFy
c2VkRmllbGQpKTsKKyAgICAKKyAgICBmb3IgKE5TU3RyaW5nKiBuYW1lIGluIGZpZWxkcykgewor
ICAgICAgICBhdXRvIGZpZWxkID0gV2ViQ29yZTo6SFRUUEhlYWRlckZpZWxkOjpjcmVhdGUobmFt
ZSwgW2ZpZWxkcyBvYmplY3RGb3JLZXk6bmFtZV0pOworICAgICAgICBpZiAoZmllbGQgJiYgZmll
bGQtPm5hbWUoKS5zdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoIlgtIikpIC8vIExldCdzIGp1
c3QgcHJldGVuZCBSRkM2NjQ4IG5ldmVyIGhhcHBlbmVkLgorICAgICAgICAgICAgcGFyc2VkRmll
bGRzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKCpmaWVsZCkpOwogICAgIH0KICAgICBfd2Vic2l0
ZVBvbGljaWVzLT5zZXRDdXN0b21IZWFkZXJGaWVsZHMoV1RGTW92ZShwYXJzZWRGaWVsZHMpKTsK
IH0KSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDIyMjYzNykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDI0IEBACisyMDE3LTA5LTI4ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2Vu
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgQXBwbHkgY3VzdG9tIGhlYWRlciBmaWVsZHMgdG8gc2Ft
ZS1vcmlnaW4gcmVxdWVzdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3NzYyOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0hUVFBIZWFkZXJGaWVsZC5j
cHA6CisgICAgICAgIChjYW5vbmljYWxpemVIVFRQSGVhZGVyKToKKyAgICAgICAgKHNob3VsZFJl
bWFpblVuY2hhbmdlZCk6CisgICAgICAgIChzaG91bGRCZUludmFsaWQpOgorICAgICAgICAoc2hv
dWxkQmVjb21lKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dl
YnNpdGVQb2xpY2llcy5tbToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAoZXhwZWN0SGVhZGVy
cyk6CisgICAgICAgICgtW0N1c3RvbUhlYWRlckZpZWxkc0RlbGVnYXRlIF93ZWJWaWV3OmRlY2lk
ZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb246ZGVjaXNpb25IYW5kbGVyOl0pOgorICAgICAgICAo
LVtDdXN0b21IZWFkZXJGaWVsZHNEZWxlZ2F0ZSB3ZWJWaWV3OnN0YXJ0VVJMU2NoZW1lVGFzazpd
KToKKyAgICAgICAgKC1bQ3VzdG9tSGVhZGVyRmllbGRzRGVsZWdhdGUgd2ViVmlldzpzdG9wVVJM
U2NoZW1lVGFzazpdKToKKworICAgICAgICBUZXN0IG1haW4gcmVzb3VyY2UgcmVxdWVzdHMsIHN1
YnJlc291cmNlIHJlcXVlc3RzLCBhbmQgY3Jvc3Mtb3JpZ2luIHJlcXVlc3RzLgorCiAyMDE3LTA5
LTI4ICBMdWNhcyBGb3JzY2hsZXIgIDxsZm9yc2NobGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBj
aGVjayBpbiBBV1MgTGFtYmRhIGNvZGUgdXNlZCBmb3IgV2ViS2l0QXJjaGl2ZVN1cHBvcnQKSW5k
ZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9IVFRQSGVhZGVyRmllbGQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9IVFRQSGVh
ZGVyRmllbGQuY3BwCShyZXZpc2lvbiAyMjI2MDIpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYkNvcmUvSFRUUEhlYWRlckZpZWxkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMjIg
KzI4LDMzIEBACiAjaW5jbHVkZSAiVGVzdC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvSFRUUEhlYWRl
ckZpZWxkLmg+CiAKK3N0YXRpYyBTdHJpbmcgY2Fub25pY2FsaXplSFRUUEhlYWRlcihjb25zdCBT
dHJpbmcmIHN0cmluZykKK3sKKyAgICBzaXplX3QgY29sb25Mb2NhdGlvbiA9IHN0cmluZy5maW5k
KCc6Jyk7CisgICAgaWYgKGNvbG9uTG9jYXRpb24gPT0gbm90Rm91bmQpCisgICAgICAgIHJldHVy
biB7IH07CisgICAgYXV0byBmaWVsZCA9IFdlYkNvcmU6OkhUVFBIZWFkZXJGaWVsZDo6Y3JlYXRl
KHN0cmluZy5zdWJzdHJpbmcoMCwgY29sb25Mb2NhdGlvbiksIHN0cmluZy5zdWJzdHJpbmcoY29s
b25Mb2NhdGlvbiArIDEpKTsKKyAgICBpZiAoIWZpZWxkKQorICAgICAgICByZXR1cm4geyB9Owor
ICAgIHJldHVybiBtYWtlU3RyaW5nKGZpZWxkLT5uYW1lKCksICc6JywgJyAnLCBmaWVsZC0+dmFs
dWUoKSk7Cit9CisKIHN0YXRpYyB2b2lkIHNob3VsZFJlbWFpblVuY2hhbmdlZChWZWN0b3I8U3Ry
aW5nPiYmIHN0cmluZ3MpCiB7CiAgICAgZm9yIChjb25zdCBhdXRvJiBzdHJpbmcgOiBzdHJpbmdz
KQotICAgICAgICBFWFBFQ1RfVFJVRShXZWJDb3JlOjpIVFRQSGVhZGVyRmllbGQoc3RyaW5nKS5m
aWVsZCgpID09IHN0cmluZyk7CisgICAgICAgIEVYUEVDVF9UUlVFKGNhbm9uaWNhbGl6ZUhUVFBI
ZWFkZXIoc3RyaW5nKSA9PSBzdHJpbmcpOwogfQogCiBzdGF0aWMgdm9pZCBzaG91bGRCZUludmFs
aWQoVmVjdG9yPFN0cmluZz4mJiBzdHJpbmdzKQogewogICAgIGZvciAoY29uc3QgYXV0byYgc3Ry
aW5nIDogc3RyaW5ncykKLSAgICAgICAgRVhQRUNUX1RSVUUoV2ViQ29yZTo6SFRUUEhlYWRlckZp
ZWxkKHN0cmluZykuZmllbGQoKSA9PSBTdHJpbmcoKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKGNh
bm9uaWNhbGl6ZUhUVFBIZWFkZXIoc3RyaW5nKSA9PSBTdHJpbmcoKSk7CiB9CiAKIHN0YXRpYyB2
b2lkIHNob3VsZEJlY29tZShWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4mJiBwYWly
cykKIHsKICAgICBmb3IgKGNvbnN0IGF1dG8mIHBhaXIgOiBwYWlycykKLSAgICAgICAgRVhQRUNU
X1RSVUUoV2ViQ29yZTo6SFRUUEhlYWRlckZpZWxkKHBhaXIuZmlyc3QpLmZpZWxkKCkgPT0gcGFp
ci5zZWNvbmQpOworICAgICAgICBFWFBFQ1RfVFJVRShjYW5vbmljYWxpemVIVFRQSGVhZGVyKHBh
aXIuZmlyc3QpID09IHBhaXIuc2Vjb25kKTsKIH0KIAogVEVTVChIVFRQSGVhZGVyRmllbGQsIFBh
cnNlcikKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0
ZVBvbGljaWVzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvV2Vic2l0ZVBvbGljaWVzLm1tCShyZXZpc2lvbiAyMjI2MDIpCisrKyBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYnNpdGVQb2xpY2llcy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5o
IgogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgorI2ltcG9ydCA8V2ViS2l0L1dLTmF2aWdhdGlv
bkRlbGVnYXRlUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLUGFnZVByaXZhdGUuaD4KICNp
bXBvcnQgPFdlYktpdC9XS1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0
L1dLVUlEZWxlZ2F0ZVByaXZhdGUuaD4KQEAgLTYyNywxMyArNjI4LDc0IEBAIFRFU1QoV2ViS2l0
LCBXZWJzaXRlUG9saWNpZXNBdXRvcGxheVF1aXIKIFRFU1QoV2ViS2l0LCBJbnZhbGlkQ3VzdG9t
SGVhZGVycykKIHsKICAgICBhdXRvIHdlYnNpdGVQb2xpY2llcyA9IGFkb3B0TlMoW1tfV0tXZWJz
aXRlUG9saWNpZXMgYWxsb2NdIGluaXRdKTsKLSAgICBbd2Vic2l0ZVBvbGljaWVzIHNldEN1c3Rv
bUhlYWRlckZpZWxkczpAW0AiaW52YWxpZGhlYWRlcjoiLCBAIm5vbmN1c3RvbTogaGVhZGVyIiwg
QCJYLWN1c3RvbTogaGVhZGVyIiwgQCIgICAgeC1DdXN0b20gOiAgTmVlZHMgQ2Fub25pY2FsaXph
dGlvblx0ICJdXTsKLSAgICBOU0FycmF5PE5TU3RyaW5nICo+ICpjYW5vbmljYWxpemVkID0gW3dl
YnNpdGVQb2xpY2llcyBjdXN0b21IZWFkZXJGaWVsZHNdOworICAgIFt3ZWJzaXRlUG9saWNpZXMg
c2V0Q3VzdG9tSGVhZGVyRmllbGRzOkB7QCJpbnZhbGlkaGVhZGVyIiA6IEAiIiwgQCJub25jdXN0
b20iIDogQCJoZWFkZXIiLCBAIiAgICB4LUN1c3RvbSAiOkAiICBOZWVkcyBDYW5vbmljYWxpemF0
aW9uXHQgIiwgQCJ4LW90aGVyIiA6IEAib3RoZXIgdmFsdWUifV07CisgICAgTlNEaWN0aW9uYXJ5
PE5TU3RyaW5nICosIE5TU3RyaW5nICo+ICpjYW5vbmljYWxpemVkID0gW3dlYnNpdGVQb2xpY2ll
cyBjdXN0b21IZWFkZXJGaWVsZHNdOwogICAgIEVYUEVDVF9FUShjYW5vbmljYWxpemVkLmNvdW50
LCAydSk7Ci0gICAgRVhQRUNUX1NUUkVRKFtjYW5vbmljYWxpemVkIG9iamVjdEF0SW5kZXg6MF0u
VVRGOFN0cmluZywgIlgtY3VzdG9tOiBoZWFkZXIiKTsKLSAgICBFWFBFQ1RfU1RSRVEoW2Nhbm9u
aWNhbGl6ZWQgb2JqZWN0QXRJbmRleDoxXS5VVEY4U3RyaW5nLCAieC1DdXN0b206IE5lZWRzIENh
bm9uaWNhbGl6YXRpb24iKTsKKyAgICBFWFBFQ1RfU1RSRVEoW2Nhbm9uaWNhbGl6ZWQgb2JqZWN0
Rm9yS2V5OkAieC1DdXN0b20iXS5VVEY4U3RyaW5nLCAiTmVlZHMgQ2Fub25pY2FsaXphdGlvbiIp
OworICAgIEVYUEVDVF9TVFJFUShbY2Fub25pY2FsaXplZCBvYmplY3RGb3JLZXk6QCJ4LW90aGVy
Il0uVVRGOFN0cmluZywgIm90aGVyIHZhbHVlIik7CiB9CiAKLS8vIEZJWE1FOiBBcHBseSB0aGUg
Y3VzdG9tIGhlYWRlcnMgZnJvbSB0aGUgRG9jdW1lbnRMb2FkZXIgdG8gZWFjaCByZXF1ZXN0IGFu
ZCB0ZXN0IHRoYXQgdGhleSBhcmUgc2VudCBvbiBtYWluIHJlc291cmNlIGFuZCBzdWJyZXNvdXJj
ZXMuCitzdGF0aWMgYm9vbCBkb25lOworCitzdGF0aWMgdm9pZCBleHBlY3RIZWFkZXJzKGlkIDxX
S1VSTFNjaGVtZVRhc2s+IHRhc2ssIGJvb2wgZXhwZWN0ZWQpCit7CisgICAgTlNVUkxSZXF1ZXN0
ICpyZXF1ZXN0ID0gdGFzay5yZXF1ZXN0OworICAgIGlmIChleHBlY3RlZCkgeworICAgICAgICBF
WFBFQ1RfU1RSRVEoW1tyZXF1ZXN0IHZhbHVlRm9ySFRUUEhlYWRlckZpZWxkOkAiWC1rZXkxIl0g
VVRGOFN0cmluZ10sICJ2YWx1ZTEiKTsKKyAgICAgICAgRVhQRUNUX1NUUkVRKFtbcmVxdWVzdCB2
YWx1ZUZvckhUVFBIZWFkZXJGaWVsZDpAIlgta2V5MiJdIFVURjhTdHJpbmddLCAidmFsdWUyIik7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgRVhQRUNUX1RSVUUoW3JlcXVlc3QgdmFsdWVGb3JIVFRQ
SGVhZGVyRmllbGQ6QCJYLWtleTEiXSA9PSBuaWwpOworICAgICAgICBFWFBFQ1RfVFJVRShbcmVx
dWVzdCB2YWx1ZUZvckhUVFBIZWFkZXJGaWVsZDpAIlgta2V5MiJdID09IG5pbCk7CisgICAgfQor
fQorCitAaW50ZXJmYWNlIEN1c3RvbUhlYWRlckZpZWxkc0RlbGVnYXRlIDogTlNPYmplY3QgPFdL
TmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZSwgV0tVUkxTY2hlbWVIYW5kbGVyPgorQGVuZAorCitA
aW1wbGVtZW50YXRpb24gQ3VzdG9tSGVhZGVyRmllbGRzRGVsZWdhdGUKKworLSAodm9pZClfd2Vi
VmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9u
OihXS05hdmlnYXRpb25BY3Rpb24gKiluYXZpZ2F0aW9uQWN0aW9uIGRlY2lzaW9uSGFuZGxlcjoo
dm9pZCAoXikoV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5LCBfV0tXZWJzaXRlUG9saWNpZXMgKikp
ZGVjaXNpb25IYW5kbGVyCit7CisgICAgX1dLV2Vic2l0ZVBvbGljaWVzICp3ZWJzaXRlUG9saWNp
ZXMgPSBbW1tfV0tXZWJzaXRlUG9saWNpZXMgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAg
ICBbd2Vic2l0ZVBvbGljaWVzIHNldEN1c3RvbUhlYWRlckZpZWxkczpAe0AiWC1rZXkxIjogQCJ2
YWx1ZTEiLCBAIlgta2V5MiI6IEAidmFsdWUyIn1dOworICAgIGRlY2lzaW9uSGFuZGxlcihXS05h
dmlnYXRpb25BY3Rpb25Qb2xpY3lBbGxvdywgd2Vic2l0ZVBvbGljaWVzKTsKK30KKworLSAodm9p
ZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IHN0YXJ0VVJMU2NoZW1lVGFzazooaWQgPFdL
VVJMU2NoZW1lVGFzaz4pdXJsU2NoZW1lVGFzaworeworICAgIE5TU3RyaW5nICpwYXRoID0gdXJs
U2NoZW1lVGFzay5yZXF1ZXN0LlVSTC5wYXRoOworICAgIGlmIChbcGF0aCBpc0VxdWFsVG9TdHJp
bmc6QCIvbWFpbnJlc291cmNlIl0pIHsKKyAgICAgICAgZXhwZWN0SGVhZGVycyh1cmxTY2hlbWVU
YXNrLCB0cnVlKTsKKyAgICAgICAgTlNTdHJpbmcgKmRhdGEgPSBAIjxzY3JpcHQ+ZmV0Y2goJ3N1
YnJlc291cmNlJykudGhlbihmdW5jdGlvbihyZXNwb25zZSl7ZmV0Y2goJ3Rlc3Q6Ly9kaWZmZXJl
bnRzZWN1cml0eW9yaWdpbi9jcm9zc29yaWdpbnN1YnJlc291cmNlJyx7bW9kZTonbm8tY29ycyd9
KX0pPC9zY3JpcHQ+IjsKKyAgICAgICAgW3VybFNjaGVtZVRhc2sgZGlkUmVjZWl2ZVJlc3BvbnNl
OltbW05TVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnVybFNjaGVtZVRhc2sucmVxdWVz
dC5VUkwgTUlNRVR5cGU6QCJ0ZXh0L2h0bWwiIGV4cGVjdGVkQ29udGVudExlbmd0aDpkYXRhLmxl
bmd0aCB0ZXh0RW5jb2RpbmdOYW1lOm5pbF0gYXV0b3JlbGVhc2VdXTsKKyAgICAgICAgW3VybFNj
aGVtZVRhc2sgZGlkUmVjZWl2ZURhdGE6W2RhdGEgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3Ry
aW5nRW5jb2RpbmddXTsKKyAgICB9IGVsc2UgaWYgKFtwYXRoIGlzRXF1YWxUb1N0cmluZzpAIi9z
dWJyZXNvdXJjZSJdKSB7CisgICAgICAgIGV4cGVjdEhlYWRlcnModXJsU2NoZW1lVGFzaywgdHJ1
ZSk7CisgICAgICAgIFt1cmxTY2hlbWVUYXNrIGRpZFJlY2VpdmVSZXNwb25zZTpbW1tOU1VSTFJl
c3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDp1cmxTY2hlbWVUYXNrLnJlcXVlc3QuVVJMIE1JTUVU
eXBlOkAidGV4dC9odG1sIiBleHBlY3RlZENvbnRlbnRMZW5ndGg6MCB0ZXh0RW5jb2RpbmdOYW1l
Om5pbF0gYXV0b3JlbGVhc2VdXTsKKyAgICB9IGVsc2UgaWYgKFtwYXRoIGlzRXF1YWxUb1N0cmlu
ZzpAIi9jcm9zc29yaWdpbnN1YnJlc291cmNlIl0pIHsKKyAgICAgICAgZXhwZWN0SGVhZGVycyh1
cmxTY2hlbWVUYXNrLCBmYWxzZSk7CisgICAgICAgIFt1cmxTY2hlbWVUYXNrIGRpZFJlY2VpdmVS
ZXNwb25zZTpbW1tOU0hUVFBVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dXJsU2NoZW1l
VGFzay5yZXF1ZXN0LlVSTCBzdGF0dXNDb2RlOjIwMCBIVFRQVmVyc2lvbjpAIjEuMSIgaGVhZGVy
RmllbGRzOkB7QCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4iOiBAIioifV0gYXV0b3JlbGVh
c2VdXTsKKyAgICAgICAgZG9uZSA9IHRydWU7CisgICAgfSBlbHNlCisgICAgICAgIEVYUEVDVF9U
UlVFKGZhbHNlKTsKKyAgICBbdXJsU2NoZW1lVGFzayBkaWRGaW5pc2hdOworfQorCistICh2b2lk
KXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgc3RvcFVSTFNjaGVtZVRhc2s6KGlkIDxXS1VS
TFNjaGVtZVRhc2s+KXVybFNjaGVtZVRhc2sKK3sKK30KKworQGVuZAorCitURVNUKFdlYktpdCwg
Q3VzdG9tSGVhZGVyRmllbGRzKQoreworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbQ3Vz
dG9tSGVhZGVyRmllbGRzRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBhdXRvIGNvbmZpZ3Vy
YXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwor
ICAgIFtjb25maWd1cmF0aW9uIHNldFVSTFNjaGVtZUhhbmRsZXI6ZGVsZWdhdGUuZ2V0KCkgZm9y
VVJMU2NoZW1lOkAidGVzdCJdOworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZp
ZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmln
dXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CisgICAgW3dlYlZpZXcgc2V0TmF2aWdhdGlv
bkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNV
UkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAidGVzdDovLy9t
YWlucmVzb3VyY2UiXV1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7Cit9
CiAKICNlbmRpZiAvLyBXS19BUElfRU5BQkxFRAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322401</attachid>
            <date>2017-10-02 11:37:37 -0700</date>
            <delta_ts>2017-10-02 11:47:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177629-20171002113736.patch</filename>
            <type>text/plain</type>
            <size>32342</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMjcwOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBACisyMDE3LTEwLTAyICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQXBwbHkgY3Vz
dG9tIGhlYWRlciBmaWVsZHMgdG8gc2FtZS1vcmlnaW4gcmVxdWVzdHMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzYyOQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvdmVyZWQgYnkgbmV3IEFQSSB0ZXN0
cy4KKworICAgICAgICAqIGxvYWRlci9Eb2N1bWVudExvYWRlci5oOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnRMb2FkZXI6OmN1c3RvbUhlYWRlckZpZWxkcyk6CisgICAgICAgICogbG9hZGVy
L0hUVFBIZWFkZXJGaWVsZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVFRQSGVhZGVyRmllbGQ6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVFRQSGVhZGVyRmllbGQ6OkhUVFBIZWFkZXJG
aWVsZCk6IERlbGV0ZWQuCisgICAgICAgICogbG9hZGVyL0hUVFBIZWFkZXJGaWVsZC5oOgorICAg
ICAgICAoV2ViQ29yZTo6SFRUUEhlYWRlckZpZWxkOjplbmNvZGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SFRUUEhlYWRlckZpZWxkOjpkZWNvZGUpOgorICAgICAgICAKKyAgICAgICAgQ2hh
bmdlIEhUVFBIZWFkZXJGaWVsZCBmcm9tIG9uZSBTdHJpbmcgY29udGFpbmluZyB0aGUgbmFtZSBh
bmQgdmFsdWUKKyAgICAgICAgdG8gYSBzdHJpbmcgZm9yIHRoZSBuYW1lIGFuZCBhbm90aGVyIGZv
ciB2YWx1ZS4gIFRoaXMgbWF0Y2hlcyBIVFRQSGVhZGVyTWFwCisgICAgICAgIGFuZCBOU1VSTFJl
cXVlc3QgbW9yZSBjbG9zZWx5IHdoZXJlIG5hbWVzIGFuZCB2YWx1ZXMgYXJlIHRyZWF0ZWQgYXMg
c2VwYXJhdGUgU3RyaW5ncy4KKyAgICAgICAgCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hl
ZFJlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9h
ZGVyOjpyZXF1ZXN0UmVzb3VyY2UpOgorICAgICAgICAKKyAgICAgICAgSWYgdGhlIERvY3VtZW50
TG9hZGVyIGhhcyBjdXN0b20gaGVhZGVyIGZpZWxkcyBmcm9tIHRoZSBXZWJzaXRlUG9saWNpZXMs
IGFwcGx5IHRoZW0gdG8gYW55IHNhbWUtb3JpZ2luIHJlcXVlc3RzLgorICAgICAgICAKKyAgICAg
ICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0Lmg6CisgICAgICAgIChXZWJD
b3JlOjpDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6OnJlc291cmNlUmVxdWVzdCk6CisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OnNldENhY2hlUG9saWN5KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OnNldFRpbWVvdXRJbnRlcnZhbCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpzZXRIVFRQTWV0aG9kKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OnNldEhUVFBIZWFkZXJGaWVsZCk6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpjbGVhckhUVFBBdXRob3JpemF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OmNsZWFySFRUUENvbnRlbnRU
eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OmNsZWFySFRUUFJl
ZmVycmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OmNsZWFySFRU
UE9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpjbGVhckhU
VFBVc2VyQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6Y2xl
YXJIVFRQQWNjZXB0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OmNs
ZWFySFRUUEFjY2VwdEVuY29kaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dEJhc2U6OnNldFJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OnNldEhUVFBCb2R5KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OnNldEFsbG93Q29va2llcyk6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpzZXRQcmlvcml0eSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjphZGRIVFRQSGVhZGVyRmllbGRJ
Zk5vdFByZXNlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6YWRk
SFRUUEhlYWRlckZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6
OnNldEhUVFBIZWFkZXJGaWVsZHMpOgorICAgICAgICAKKyAgICAgICAgbm9uLUhUVFAvSFRUUFMg
UmVzb3VyY2VSZXF1ZXN0cyBuZWVkIHRvIGJlIHVwZGF0ZWQsIHRvbywgaWYgaGVhZGVyIGZpZWxk
cyBhcmUgYWRkZWQuCisgICAgICAgIFNraXBwaW5nIHVwZGF0aW5nIG5vbi1IVFRQL0hUVFBTIFJl
c291cmNlUmVxdWVzdHMgaXMgbm90IGEgdmFsaWQgc2hvcnRjdXQsIGFuZCB3aXRoIHRoZQorICAg
ICAgICBncm93aW5nIGltcG9ydGFuY2Ugb2YgY3VzdG9tIHNjaGVtZXMgd2l0aCBvdXIgbmV3IHB1
YmxpYyBBUEksIHdlIHNob3VsZCB1cGRhdGUgUmVzb3VyY2VSZXF1ZXN0cworICAgICAgICBvZiBj
dXN0b20gc2NoZW1lcyBjb3JyZWN0bHkuCisKIDIwMTctMTAtMDIgIENoYXJsZXMgVHVybmVyICA8
Y3R1cm5lckBpZ2FsaWEuY29tPgogCiAgICAgICAgIFRyeSB0byBwbGF5IEFWQyBjb2RlYyBldmVu
IGlmIEguMjY0IGRlY29kZXIgb25seSBhZHZlcnRpc2VzIGJ5dGUtc3RyZWFtIHByb2ZpbGUuCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuaAkocmV2aXNpb24gMjIyNzA4
KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI5Nyw2ICsyOTcsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgVmVjdG9yPExpbmtJY29u
PiYgbGlua0ljb25zKCkgY29uc3QgeyByZXR1cm4gbV9saW5rSWNvbnM7IH0KIAogICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc2V0Q3VzdG9tSGVhZGVyRmllbGRzKFZlY3RvcjxIVFRQSGVhZGVyRmll
bGQ+JiYgZmllbGRzKTsKKyAgICBjb25zdCBWZWN0b3I8SFRUUEhlYWRlckZpZWxkPiYgY3VzdG9t
SGVhZGVyRmllbGRzKCkgeyByZXR1cm4gbV9jdXN0b21IZWFkZXJGaWVsZHM7IH0KICAgICAKIHBy
b3RlY3RlZDoKICAgICBXRUJDT1JFX0VYUE9SVCBEb2N1bWVudExvYWRlcihjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmLCBjb25zdCBTdWJzdGl0dXRlRGF0YSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
bG9hZGVyL0hUVFBIZWFkZXJGaWVsZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
bG9hZGVyL0hUVFBIZWFkZXJGaWVsZC5jcHAJKHJldmlzaW9uIDIyMjcwOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9IVFRQSGVhZGVyRmllbGQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIs
MTggKzIwMiwxNiBAQCBzdGF0aWMgYm9vbCBpc1ZhbGlkVmFsdWUoU3RyaW5nVmlldyB2YWx1CiAK
IH0gLy8gbmFtZXNwYWNlIFJGQzcyMzAKIAotSFRUUEhlYWRlckZpZWxkOjpIVFRQSGVhZGVyRmll
bGQoY29uc3QgU3RyaW5nJiBmaWVsZCkKK3N0ZDo6b3B0aW9uYWw8SFRUUEhlYWRlckZpZWxkPiBI
VFRQSGVhZGVyRmllbGQ6OmNyZWF0ZShTdHJpbmcmJiB1bnBhcnNlZE5hbWUsIFN0cmluZyYmIHVu
cGFyc2VkVmFsdWUpCiB7Ci0gICAgc2l6ZV90IGNvbG9uTG9jYXRpb24gPSBmaWVsZC5maW5kKCc6
Jyk7Ci0gICAgaWYgKGNvbG9uTG9jYXRpb24gPT0gbm90Rm91bmQpCi0gICAgICAgIHJldHVybjsK
KyAgICBTdHJpbmdWaWV3IHN0cmlwcGVkTmFtZSA9IFN0cmluZ1ZpZXcodW5wYXJzZWROYW1lKS5z
dHJpcExlYWRpbmdBbmRUcmFpbGluZ01hdGNoZWRDaGFyYWN0ZXJzKFJGQzcyMzA6OmlzV2hpdGVz
cGFjZSk7CisgICAgU3RyaW5nVmlldyBzdHJpcHBlZFZhbHVlID0gU3RyaW5nVmlldyh1bnBhcnNl
ZFZhbHVlKS5zdHJpcExlYWRpbmdBbmRUcmFpbGluZ01hdGNoZWRDaGFyYWN0ZXJzKFJGQzcyMzA6
OmlzV2hpdGVzcGFjZSk7CisgICAgaWYgKCFSRkM3MjMwOjppc1ZhbGlkTmFtZShzdHJpcHBlZE5h
bWUpIHx8ICFSRkM3MjMwOjppc1ZhbGlkVmFsdWUoc3RyaXBwZWRWYWx1ZSkpCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBTdHJpbmdWaWV3IG5hbWUgPSBTdHJpbmdWaWV3KGZp
ZWxkKS5zdWJzdHJpbmcoMCwgY29sb25Mb2NhdGlvbikuc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdN
YXRjaGVkQ2hhcmFjdGVycyhSRkM3MjMwOjppc1doaXRlc3BhY2UpOwotICAgIFN0cmluZ1ZpZXcg
dmFsdWUgPSBTdHJpbmdWaWV3KGZpZWxkKS5zdWJzdHJpbmcoY29sb25Mb2NhdGlvbiArIDEpLnN0
cmlwTGVhZGluZ0FuZFRyYWlsaW5nTWF0Y2hlZENoYXJhY3RlcnMoUkZDNzIzMDo6aXNXaGl0ZXNw
YWNlKTsKLSAgICBpZiAoIVJGQzcyMzA6OmlzVmFsaWROYW1lKG5hbWUpIHx8ICFSRkM3MjMwOjpp
c1ZhbGlkVmFsdWUodmFsdWUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2ZpZWxkID0gbWFr
ZVN0cmluZyhuYW1lLCAnOicsICcgJywgIHZhbHVlKTsKKyAgICBTdHJpbmcgbmFtZSA9IHN0cmlw
cGVkTmFtZS5sZW5ndGgoKSA9PSB1bnBhcnNlZE5hbWUubGVuZ3RoKCkgPyBXVEZNb3ZlKHVucGFy
c2VkTmFtZSkgOiBzdHJpcHBlZE5hbWUudG9TdHJpbmcoKTsKKyAgICBTdHJpbmcgdmFsdWUgPSBz
dHJpcHBlZFZhbHVlLmxlbmd0aCgpID09IHVucGFyc2VkVmFsdWUubGVuZ3RoKCkgPyBXVEZNb3Zl
KHVucGFyc2VkVmFsdWUpIDogc3RyaXBwZWRWYWx1ZS50b1N0cmluZygpOworICAgIHJldHVybiB7
eyBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHZhbHVlKSB9fTsKIH0KIAogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvbG9hZGVyL0hUVFBIZWFkZXJGaWVsZC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9IVFRQSGVhZGVyRmllbGQuaAkocmV2aXNpb24gMjIyNzA4KQorKysgU291
cmNlL1dlYkNvcmUvbG9hZGVyL0hUVFBIZWFkZXJGaWVsZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSwzMiArMzEsNDQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBXRUJDT1JFX0VYUE9S
VCBIVFRQSGVhZGVyRmllbGQgewogcHVibGljOgotICAgIEhUVFBIZWFkZXJGaWVsZChjb25zdCBT
dHJpbmcmKTsKLSAgICAKLSAgICBjb25zdCBTdHJpbmcmIGZpZWxkKCkgY29uc3QgeyByZXR1cm4g
bV9maWVsZDsgfQorICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEhUVFBIZWFkZXJGaWVsZD4gY3Jl
YXRlKFN0cmluZyYmIG5hbWUsIFN0cmluZyYmIHZhbHVlKTsKKworICAgIGNvbnN0IFN0cmluZyYg
bmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIGNvbnN0IFN0cmluZyYgdmFsdWUo
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8SFRUUEhlYWRlckZpZWxkPiBkZWNvZGUoRGVjb2RlciYp
OwogCiBwcml2YXRlOgotICAgIFN0cmluZyBtX2ZpZWxkOworICAgIEhUVFBIZWFkZXJGaWVsZChT
dHJpbmcmJiBuYW1lLCBTdHJpbmcmJiB2YWx1ZSkKKyAgICAgICAgOiBtX25hbWUoV1RGTW92ZShu
YW1lKSkKKyAgICAgICAgLCBtX3ZhbHVlKFdURk1vdmUodmFsdWUpKQorICAgIHsgfQorICAgIFN0
cmluZyBtX25hbWU7CisgICAgU3RyaW5nIG1fdmFsdWU7CiB9OwogCiB0ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPgogdm9pZCBIVFRQSGVhZGVyRmllbGQ6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBj
b25zdAogewotICAgIGVuY29kZXIgPDwgbV9maWVsZDsKKyAgICBlbmNvZGVyIDw8IG1fbmFtZTsK
KyAgICBlbmNvZGVyIDw8IG1fdmFsdWU7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+CiBz
dGQ6Om9wdGlvbmFsPEhUVFBIZWFkZXJGaWVsZD4gSFRUUEhlYWRlckZpZWxkOjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikKIHsKLSAgICBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gZmllbGQ7Ci0gICAg
ZGVjb2RlciA+PiBmaWVsZDsKLSAgICBpZiAoIWZpZWxkKQorICAgIHN0ZDo6b3B0aW9uYWw8U3Ry
aW5nPiBuYW1lOworICAgIGRlY29kZXIgPj4gbmFtZTsKKyAgICBpZiAoIW5hbWUpCisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gdmFsdWU7
CisgICAgZGVjb2RlciA+PiB2YWx1ZTsKKyAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIHt7IFdURk1vdmUoKmZpZWxkKSB9fTsKKyAgICBy
ZXR1cm4ge3sgV1RGTW92ZSgqbmFtZSksIFdURk1vdmUoKnZhbHVlKSB9fTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZFJlc291cmNlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiAyMjI3MDgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIK
ICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVu
dC5oIgorI2luY2x1ZGUgIkhUVFBIZWFkZXJGaWVsZC5oIgogI2luY2x1ZGUgIkxvYWRlclN0cmF0
ZWd5LmgiCiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKQEAgLTc1MCw2ICs3NTEsMTUgQEAgUmVzb3VyY2VFcnJvck9yPENhY2hlZFJlc291cmNlSGFu
ZGxlPENhYwogICAgIH0KICNlbmRpZgogCisgICAgaWYgKG1fZG9jdW1lbnRMb2FkZXIgJiYgIW1f
ZG9jdW1lbnRMb2FkZXItPmN1c3RvbUhlYWRlckZpZWxkcygpLmlzRW1wdHkoKSkgeworICAgICAg
ICBib29sIGxvYWRpbmdNYWluRnJhbWVNYWluUmVzb3VyY2UgPSB0eXBlID09IENhY2hlZFJlc291
cmNlOjpUeXBlOjpNYWluUmVzb3VyY2UgJiYgbV9kb2N1bWVudExvYWRlci0+ZnJhbWUoKSAmJiBt
X2RvY3VtZW50TG9hZGVyLT5mcmFtZSgpLT5pc01haW5GcmFtZSgpOworICAgICAgICBib29sIGxv
YWRpbmdTYW1lT3JpZ2luU3VicmVzb3VyY2UgPSBkb2N1bWVudCgpICYmIGRvY3VtZW50KCktPnNl
Y3VyaXR5T3JpZ2luKCkuZXF1YWwoU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShyZXF1ZXN0LnJlc291
cmNlUmVxdWVzdCgpLnVybCgpKS5wdHIoKSk7CisgICAgICAgIGlmIChsb2FkaW5nTWFpbkZyYW1l
TWFpblJlc291cmNlIHx8IGxvYWRpbmdTYW1lT3JpZ2luU3VicmVzb3VyY2UpIHsKKyAgICAgICAg
ICAgIGZvciAoYXV0byYgZmllbGQgOiBtX2RvY3VtZW50TG9hZGVyLT5jdXN0b21IZWFkZXJGaWVs
ZHMoKSkKKyAgICAgICAgICAgICAgICByZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLmFkZEhUVFBI
ZWFkZXJGaWVsZChmaWVsZC5uYW1lKCksIGZpZWxkLnZhbHVlKCkpOworICAgICAgICB9CisgICAg
fQorCiAgICAgTG9hZFRpbWluZyBsb2FkVGltaW5nOwogICAgIGxvYWRUaW1pbmcubWFya1N0YXJ0
VGltZUFuZEZldGNoU3RhcnQoKTsKICAgICBJbml0aWF0b3JDb250ZXh0IGluaXRpYXRvckNvbnRl
eHQgPSByZXF1ZXN0Lm9wdGlvbnMoKS5pbml0aWF0b3JDb250ZXh0OwpJbmRleDogU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVzdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuaAkocmV2
aXNpb24gMjIyNzA4KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291
cmNlUmVxdWVzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1Miw3IEBAIHB1YmxpYzoKIAog
ICAgIFJlc291cmNlUmVxdWVzdCYmIHJlbGVhc2VSZXNvdXJjZVJlcXVlc3QoKSB7IHJldHVybiBX
VEZNb3ZlKG1fcmVzb3VyY2VSZXF1ZXN0KTsgfQogICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVzb3VyY2VSZXF1ZXN0KCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZVJlcXVlc3Q7IH0KKyAg
ICBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCgpIHsgcmV0dXJuIG1fcmVzb3VyY2VS
ZXF1ZXN0OyB9CiAgICAgY29uc3QgU3RyaW5nJiBjaGFyc2V0KCkgY29uc3QgeyByZXR1cm4gbV9j
aGFyc2V0OyB9CiAgICAgdm9pZCBzZXRDaGFyc2V0KGNvbnN0IFN0cmluZyYgY2hhcnNldCkgeyBt
X2NoYXJzZXQgPSBjaGFyc2V0OyB9CiAgICAgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJiBv
cHRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9vcHRpb25zOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAJ
KHJldmlzaW9uIDIyMjcwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVz
b3VyY2VSZXF1ZXN0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OSw4ICsxNDksNyBAQCB2
b2lkIFJlc291cmNlUmVxdWVzdEJhc2U6OnNldENhY2hlUG9saWN5CiAgICAgCiAgICAgbV9jYWNo
ZVBvbGljeSA9IGNhY2hlUG9saWN5OwogICAgIAotICAgIGlmICh1cmwoKS5wcm90b2NvbElzSW5I
VFRQRmFtaWx5KCkpCi0gICAgICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOwor
ICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOwogfQogCiBkb3VibGUgUmVzb3Vy
Y2VSZXF1ZXN0QmFzZTo6dGltZW91dEludGVydmFsKCkgY29uc3QKQEAgLTE2OSw4ICsxNjgsNyBA
QCB2b2lkIFJlc291cmNlUmVxdWVzdEJhc2U6OnNldFRpbWVvdXRJbnRlCiAKICAgICBtX3RpbWVv
dXRJbnRlcnZhbCA9IHRpbWVvdXRJbnRlcnZhbDsKICAgICAKLSAgICBpZiAodXJsKCkucHJvdG9j
b2xJc0luSFRUUEZhbWlseSgpKQotICAgICAgICBtX3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQgPSBm
YWxzZTsKKyAgICBtX3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQgPSBmYWxzZTsKIH0KIAogY29uc3Qg
VVJMJiBSZXNvdXJjZVJlcXVlc3RCYXNlOjpmaXJzdFBhcnR5Rm9yQ29va2llcygpIGNvbnN0CkBA
IC0yMDgsOCArMjA2LDcgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpzZXRIVFRQTWV0aG9k
KAogCiAgICAgbV9odHRwTWV0aG9kID0gaHR0cE1ldGhvZDsKICAgICAKLSAgICBpZiAodXJsKCku
cHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKQotICAgICAgICBtX3BsYXRmb3JtUmVxdWVzdFVwZGF0
ZWQgPSBmYWxzZTsKKyAgICBtX3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQgPSBmYWxzZTsKIH0KIAog
Y29uc3QgSFRUUEhlYWRlck1hcCYgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6aHR0cEhlYWRlckZpZWxk
cygpIGNvbnN0CkBAIC0yMzksOCArMjM2LDcgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpz
ZXRIVFRQSGVhZGVyRgogCiAgICAgbV9odHRwSGVhZGVyRmllbGRzLnNldChuYW1lLCB2YWx1ZSk7
CiAgICAgCi0gICAgaWYgKHVybCgpLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkKLSAgICAgICAg
bV9wbGF0Zm9ybVJlcXVlc3RVcGRhdGVkID0gZmFsc2U7CisgICAgbV9wbGF0Zm9ybVJlcXVlc3RV
cGRhdGVkID0gZmFsc2U7CiB9CiAKIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6c2V0SFRUUEhl
YWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCkBAIC0y
NDksOCArMjQ1LDcgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpzZXRIVFRQSGVhZGVyRgog
CiAgICAgbV9odHRwSGVhZGVyRmllbGRzLnNldChuYW1lLCB2YWx1ZSk7CiAKLSAgICBpZiAodXJs
KCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKQotICAgICAgICBtX3BsYXRmb3JtUmVxdWVzdFVw
ZGF0ZWQgPSBmYWxzZTsKKyAgICBtX3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQgPSBmYWxzZTsKIH0K
IAogdm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpjbGVhckhUVFBBdXRob3JpemF0aW9uKCkKQEAg
LTI2MCw4ICsyNTUsNyBAQCB2b2lkIFJlc291cmNlUmVxdWVzdEJhc2U6OmNsZWFySFRUUEF1dGhv
CiAgICAgaWYgKCFtX2h0dHBIZWFkZXJGaWVsZHMucmVtb3ZlKEhUVFBIZWFkZXJOYW1lOjpBdXRo
b3JpemF0aW9uKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHVybCgpLnByb3RvY29sSXNJ
bkhUVFBGYW1pbHkoKSkKLSAgICAgICAgbV9wbGF0Zm9ybVJlcXVlc3RVcGRhdGVkID0gZmFsc2U7
CisgICAgbV9wbGF0Zm9ybVJlcXVlc3RVcGRhdGVkID0gZmFsc2U7CiB9CiAKIFN0cmluZyBSZXNv
dXJjZVJlcXVlc3RCYXNlOjpodHRwQ29udGVudFR5cGUoKSBjb25zdApAQCAtMjgwLDggKzI3NCw3
IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6Y2xlYXJIVFRQQ29udGUKIAogICAgIG1faHR0
cEhlYWRlckZpZWxkcy5yZW1vdmUoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRUeXBlKTsKIAotICAg
IGlmICh1cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCi0gICAgICAgIG1fcGxhdGZvcm1S
ZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOworICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZh
bHNlOwogfQogCiBTdHJpbmcgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6aHR0cFJlZmVycmVyKCkgY29u
c3QKQEAgLTMwNSw4ICsyOTgsNyBAQCB2b2lkIFJlc291cmNlUmVxdWVzdEJhc2U6OmNsZWFySFRU
UFJlZmVyCiAKICAgICBtX2h0dHBIZWFkZXJGaWVsZHMucmVtb3ZlKEhUVFBIZWFkZXJOYW1lOjpS
ZWZlcmVyKTsKIAotICAgIGlmICh1cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCi0gICAg
ICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOworICAgIG1fcGxhdGZvcm1SZXF1
ZXN0VXBkYXRlZCA9IGZhbHNlOwogfQogCiBTdHJpbmcgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6aHR0
cE9yaWdpbigpIGNvbnN0CkBAIC0zMzAsOCArMzIyLDcgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3RC
YXNlOjpjbGVhckhUVFBPcmlnaQogCiAgICAgbV9odHRwSGVhZGVyRmllbGRzLnJlbW92ZShIVFRQ
SGVhZGVyTmFtZTo6T3JpZ2luKTsKIAotICAgIGlmICh1cmwoKS5wcm90b2NvbElzSW5IVFRQRmFt
aWx5KCkpCi0gICAgICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOworICAgIG1f
cGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOwogfQogCiBib29sIFJlc291cmNlUmVxdWVz
dEJhc2U6Omhhc0hUVFBIZWFkZXIoSFRUUEhlYWRlck5hbWUgbmFtZSkgY29uc3QKQEAgLTM1NSw4
ICszNDYsNyBAQCB2b2lkIFJlc291cmNlUmVxdWVzdEJhc2U6OmNsZWFySFRUUFVzZXJBCiAKICAg
ICBtX2h0dHBIZWFkZXJGaWVsZHMucmVtb3ZlKEhUVFBIZWFkZXJOYW1lOjpVc2VyQWdlbnQpOwog
Ci0gICAgaWYgKHVybCgpLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkKLSAgICAgICAgbV9wbGF0
Zm9ybVJlcXVlc3RVcGRhdGVkID0gZmFsc2U7CisgICAgbV9wbGF0Zm9ybVJlcXVlc3RVcGRhdGVk
ID0gZmFsc2U7CiB9CiAKIFN0cmluZyBSZXNvdXJjZVJlcXVlc3RCYXNlOjpodHRwQWNjZXB0KCkg
Y29uc3QKQEAgLTM3NSw4ICszNjUsNyBAQCB2b2lkIFJlc291cmNlUmVxdWVzdEJhc2U6OmNsZWFy
SFRUUEFjY2VwCiAKICAgICBtX2h0dHBIZWFkZXJGaWVsZHMucmVtb3ZlKEhUVFBIZWFkZXJOYW1l
OjpBY2NlcHQpOwogCi0gICAgaWYgKHVybCgpLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkKLSAg
ICAgICAgbV9wbGF0Zm9ybVJlcXVlc3RVcGRhdGVkID0gZmFsc2U7CisgICAgbV9wbGF0Zm9ybVJl
cXVlc3RVcGRhdGVkID0gZmFsc2U7CiB9CiAKIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6Y2xl
YXJIVFRQQWNjZXB0RW5jb2RpbmcoKQpAQCAtMzg1LDggKzM3NCw3IEBAIHZvaWQgUmVzb3VyY2VS
ZXF1ZXN0QmFzZTo6Y2xlYXJIVFRQQWNjZXAKIAogICAgIG1faHR0cEhlYWRlckZpZWxkcy5yZW1v
dmUoSFRUUEhlYWRlck5hbWU6OkFjY2VwdEVuY29kaW5nKTsKIAotICAgIGlmICh1cmwoKS5wcm90
b2NvbElzSW5IVFRQRmFtaWx5KCkpCi0gICAgICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9
IGZhbHNlOworICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOwogfQogCiB2b2lk
IFJlc291cmNlUmVxdWVzdEJhc2U6OnNldFJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2Rp
bmdGYWxsYmFja0FycmF5KGNvbnN0IFN0cmluZyYgZW5jb2RpbmcxLCBjb25zdCBTdHJpbmcmIGVu
Y29kaW5nMiwgY29uc3QgU3RyaW5nJiBlbmNvZGluZzMpCkBAIC00MDIsOCArMzkwLDcgQEAgdm9p
ZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpzZXRSZXNwb25zZUNvbgogICAgIGlmICghZW5jb2Rpbmcz
LmlzTnVsbCgpKQogICAgICAgICBtX3Jlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdG
YWxsYmFja0FycmF5LnVuY2hlY2tlZEFwcGVuZChlbmNvZGluZzMpOwogICAgIAotICAgIGlmICh1
cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCi0gICAgICAgIG1fcGxhdGZvcm1SZXF1ZXN0
VXBkYXRlZCA9IGZhbHNlOworICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOwog
fQogCiBGb3JtRGF0YSogUmVzb3VyY2VSZXF1ZXN0QmFzZTo6aHR0cEJvZHkoKSBjb25zdApAQCAt
NDIxLDggKzQwOCw3IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6c2V0SFRUUEJvZHkoUmUK
IAogICAgIG1fcmVzb3VyY2VSZXF1ZXN0Qm9keVVwZGF0ZWQgPSB0cnVlOwogCi0gICAgaWYgKHVy
bCgpLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkKLSAgICAgICAgbV9wbGF0Zm9ybVJlcXVlc3RC
b2R5VXBkYXRlZCA9IGZhbHNlOworICAgIG1fcGxhdGZvcm1SZXF1ZXN0Qm9keVVwZGF0ZWQgPSBm
YWxzZTsKIH0KIAogYm9vbCBSZXNvdXJjZVJlcXVlc3RCYXNlOjphbGxvd0Nvb2tpZXMoKSBjb25z
dApAQCAtNDQxLDggKzQyNyw3IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6c2V0QWxsb3dD
b29raWUKIAogICAgIG1fYWxsb3dDb29raWVzID0gYWxsb3dDb29raWVzOwogICAgIAotICAgIGlm
ICh1cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCi0gICAgICAgIG1fcGxhdGZvcm1SZXF1
ZXN0VXBkYXRlZCA9IGZhbHNlOworICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNl
OwogfQogCiBSZXNvdXJjZUxvYWRQcmlvcml0eSBSZXNvdXJjZVJlcXVlc3RCYXNlOjpwcmlvcml0
eSgpIGNvbnN0CkBAIC00NjEsOCArNDQ2LDcgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpz
ZXRQcmlvcml0eShSZQogCiAgICAgbV9wcmlvcml0eSA9IHByaW9yaXR5OwogCi0gICAgaWYgKHVy
bCgpLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkKLSAgICAgICAgbV9wbGF0Zm9ybVJlcXVlc3RV
cGRhdGVkID0gZmFsc2U7CisgICAgbV9wbGF0Zm9ybVJlcXVlc3RVcGRhdGVkID0gZmFsc2U7CiB9
CiAKIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6YWRkSFRUUEhlYWRlckZpZWxkSWZOb3RQcmVz
ZW50KEhUVFBIZWFkZXJOYW1lIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCkBAIC00NzIsOCAr
NDU2LDcgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjphZGRIVFRQSGVhZGVyRgogICAgIGlm
ICghbV9odHRwSGVhZGVyRmllbGRzLmFkZElmTm90UHJlc2VudChuYW1lLCB2YWx1ZSkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGlmICh1cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCi0g
ICAgICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOworICAgIG1fcGxhdGZvcm1S
ZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOwogfQogCiB2b2lkIFJlc291cmNlUmVxdWVzdEJhc2U6OmFk
ZEhUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZSBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVl
KQpAQCAtNDgyLDggKzQ2NSw3IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6YWRkSFRUUEhl
YWRlckYKIAogICAgIG1faHR0cEhlYWRlckZpZWxkcy5hZGQobmFtZSwgdmFsdWUpOwogCi0gICAg
aWYgKHVybCgpLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkKLSAgICAgICAgbV9wbGF0Zm9ybVJl
cXVlc3RVcGRhdGVkID0gZmFsc2U7CisgICAgbV9wbGF0Zm9ybVJlcXVlc3RVcGRhdGVkID0gZmFs
c2U7CiB9CiAKIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6YWRkSFRUUEhlYWRlckZpZWxkKGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKQEAgLTQ5Miw4ICs0NzQsNyBA
QCB2b2lkIFJlc291cmNlUmVxdWVzdEJhc2U6OmFkZEhUVFBIZWFkZXJGCiAKICAgICBtX2h0dHBI
ZWFkZXJGaWVsZHMuYWRkKG5hbWUsIHZhbHVlKTsKIAotICAgIGlmICh1cmwoKS5wcm90b2NvbElz
SW5IVFRQRmFtaWx5KCkpCi0gICAgICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNl
OworICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOwogfQogCiBib29sIFJlc291
cmNlUmVxdWVzdEJhc2U6Omhhc0hUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZSBoZWFkZXJO
YW1lKSBjb25zdApAQCAtNTA3LDggKzQ4OCw3IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6
c2V0SFRUUEhlYWRlckYKIAogICAgIG1faHR0cEhlYWRlckZpZWxkcyA9IFdURk1vdmUoaGVhZGVy
RmllbGRzKTsKIAotICAgIGlmICh1cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCi0gICAg
ICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOworICAgIG1fcGxhdGZvcm1SZXF1
ZXN0VXBkYXRlZCA9IGZhbHNlOwogfQogCiBib29sIGVxdWFsSWdub3JpbmdIZWFkZXJGaWVsZHMo
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0QmFzZSYgYSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0QmFzZSYg
YikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjI3MTUpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDE3LTEwLTAyICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQXBwbHkgY3Vz
dG9tIGhlYWRlcnMgdG8gc2FtZS1vcmlnaW4gcmVxdWVzdHMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzYyOQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZVBv
bGljaWVzLmNwcDoKKyAgICAgICAgKFdLV2Vic2l0ZVBvbGljaWVzQ29weUN1c3RvbUhlYWRlckZp
ZWxkcyk6CisgICAgICAgIChXS1dlYnNpdGVQb2xpY2llc1NldEN1c3RvbUhlYWRlckZpZWxkcyk6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZVBvbGljaWVzLmg6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJzaXRlUG9saWNpZXMuaDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYnNpdGVQb2xpY2llcy5tbToKKyAgICAgICAgKC1bX1dL
V2Vic2l0ZVBvbGljaWVzIGN1c3RvbUhlYWRlckZpZWxkc10pOgorICAgICAgICAoLVtfV0tXZWJz
aXRlUG9saWNpZXMgc2V0Q3VzdG9tSGVhZGVyRmllbGRzOl0pOgorCisgICAgICAgIE1ha2UgdGhl
IFNQSSBmb3Igc2V0dGluZyBjdXN0b20gaGVhZGVyIGZpZWxkcyB0YWtlIGEgZGljdGlvbmFyeTxT
dHJpbmcsIFN0cmluZz4KKyAgICAgICAgaW5zdGVhZCBvZiBhbiBhcnJheSBvZiBTdHJpbmdzIHdp
dGggY29sb25zLiBUaGlzIG1hdGNoZXMgTlNVUkxSZXF1ZXN0IGFuZCBvdGhlcgorICAgICAgICBB
UElzIHRoYXQgZGVhbCB3aXRoIGhlYWRlciBmaWVsZHMuCisKIDIwMTctMTAtMDIgIEFsZXggQ2hy
aXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBFeHBvc2UgbW9y
ZSBXS1ByZWZlcmVuY2VzIFNQSSB0byBtYXRjaCBDIFNQSQpJbmRleDogU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlUG9saWNpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZVBvbGljaWVzLmNwcAkocmV2aXNpb24g
MjIyNzA4KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlUG9saWNp
ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMCArMjYsMTIgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJXS1dlYnNpdGVQb2xpY2llcy5oIgogCi0jaW5jbHVkZSAiQVBJQXJy
YXkuaCIKKyNpbmNsdWRlICJBUElEaWN0aW9uYXJ5LmgiCiAjaW5jbHVkZSAiQVBJV2Vic2l0ZVBv
bGljaWVzLmgiCiAjaW5jbHVkZSAiV0tBUElDYXN0LmgiCiAjaW5jbHVkZSAiV0tBcnJheS5oIgor
I2luY2x1ZGUgIldLRGljdGlvbmFyeS5oIgorI2luY2x1ZGUgIldLUmV0YWluUHRyLmgiCiAjaW5j
bHVkZSAiV2Vic2l0ZVBvbGljaWVzLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CkBAIC01
NCwyNiArNTYsMjUgQEAgYm9vbCBXS1dlYnNpdGVQb2xpY2llc0dldENvbnRlbnRCbG9ja2Vycwog
ICAgIHJldHVybiB0b0ltcGwod2Vic2l0ZVBvbGljaWVzKS0+Y29udGVudEJsb2NrZXJzRW5hYmxl
ZCgpOwogfQogCi1XS19FWFBPUlQgV0tBcnJheVJlZiBXS1dlYnNpdGVQb2xpY2llc0NvcHlDdXN0
b21IZWFkZXJGaWVsZHMoV0tXZWJzaXRlUG9saWNpZXNSZWYgd2Vic2l0ZVBvbGljaWVzKQorV0tf
RVhQT1JUIFdLRGljdGlvbmFyeVJlZiBXS1dlYnNpdGVQb2xpY2llc0NvcHlDdXN0b21IZWFkZXJG
aWVsZHMoV0tXZWJzaXRlUG9saWNpZXNSZWYgd2Vic2l0ZVBvbGljaWVzKQogewotICAgIGNvbnN0
IGF1dG8mIGZpZWxkcyA9IHRvSW1wbCh3ZWJzaXRlUG9saWNpZXMpLT5jdXN0b21IZWFkZXJGaWVs
ZHMoKTsKLSAgICBWZWN0b3I8UmVmUHRyPEFQSTo6T2JqZWN0Pj4gc3RyaW5nczsKLSAgICBzdHJp
bmdzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZmllbGRzLnNpemUoKSk7Ci0gICAgZm9yIChjb25z
dCBhdXRvJiBmaWVsZCA6IGZpZWxkcykKLSAgICAgICAgc3RyaW5ncy51bmNoZWNrZWRBcHBlbmQo
QVBJOjpTdHJpbmc6OmNyZWF0ZShmaWVsZC5maWVsZCgpKSk7Ci0gICAgcmV0dXJuIHRvQVBJKEFQ
STo6QXJyYXk6OmNyZWF0ZShXVEZNb3ZlKHN0cmluZ3MpKS5wdHIoKSk7CisgICAgSGFzaE1hcDxX
VEY6OlN0cmluZywgUmVmUHRyPEFQSTo6T2JqZWN0Pj4gZmllbGRzOworICAgIGZvciAoY29uc3Qg
YXV0byYgZmllbGQgOiB0b0ltcGwod2Vic2l0ZVBvbGljaWVzKS0+Y3VzdG9tSGVhZGVyRmllbGRz
KCkpCisgICAgICAgIGZpZWxkcy5hZGQoZmllbGQubmFtZSgpLCBBUEk6OlN0cmluZzo6Y3JlYXRl
KGZpZWxkLnZhbHVlKCkpKTsKKyAgICByZXR1cm4gdG9BUEkoQVBJOjpEaWN0aW9uYXJ5OjpjcmVh
dGUoV1RGTW92ZShmaWVsZHMpKS5wdHIoKSk7CiB9CiAKLVdLX0VYUE9SVCB2b2lkIFdLV2Vic2l0
ZVBvbGljaWVzU2V0Q3VzdG9tSGVhZGVyRmllbGRzKFdLV2Vic2l0ZVBvbGljaWVzUmVmIHdlYnNp
dGVQb2xpY2llcywgV0tBcnJheVJlZiBhcnJheSkKK1dLX0VYUE9SVCB2b2lkIFdLV2Vic2l0ZVBv
bGljaWVzU2V0Q3VzdG9tSGVhZGVyRmllbGRzKFdLV2Vic2l0ZVBvbGljaWVzUmVmIHdlYnNpdGVQ
b2xpY2llcywgV0tEaWN0aW9uYXJ5UmVmIGRpY3Rpb25hcnkpCiB7Ci0gICAgc2l6ZV90IGxlbmd0
aCA9IFdLQXJyYXlHZXRTaXplKGFycmF5KTsKKyAgICBhdXRvIGtleXMgPSBhZG9wdFdLKFdLRGlj
dGlvbmFyeUNvcHlLZXlzKGRpY3Rpb25hcnkpKTsKKyAgICBzaXplX3QgbGVuZ3RoID0gV0tBcnJh
eUdldFNpemUoa2V5cy5nZXQoKSk7CiAgICAgVmVjdG9yPFdlYkNvcmU6OkhUVFBIZWFkZXJGaWVs
ZD4gZmllbGRzOwogICAgIGZpZWxkcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCk7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBXZWJDb3Jl
OjpIVFRQSGVhZGVyRmllbGQgcGFyc2VkRmllbGQodG9JbXBsKHN0YXRpY19jYXN0PFdLU3RyaW5n
UmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgoYXJyYXksIGkpKSktPnN0cmluZygpKTsKLSAgICAg
ICAgaWYgKCFwYXJzZWRGaWVsZC5maWVsZCgpLmlzTnVsbCgpCi0gICAgICAgICAgICAmJiBwYXJz
ZWRGaWVsZC5maWVsZCgpLnN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZSgiWC0iKSkgLy8gTGV0
J3MganVzdCBwcmV0ZW5kIFJGQzY2NDggbmV2ZXIgaGFwcGVuZWQuCi0gICAgICAgICAgICBmaWVs
ZHMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUocGFyc2VkRmllbGQpKTsKKyAgICAgICAgV0tTdHJp
bmdSZWYgbmFtZSA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0FycmF5R2V0SXRlbUF0SW5k
ZXgoa2V5cy5nZXQoKSwgaSkpOworICAgICAgICBhdXRvIGZpZWxkID0gV2ViQ29yZTo6SFRUUEhl
YWRlckZpZWxkOjpjcmVhdGUodG9JbXBsKG5hbWUpLT5zdHJpbmcoKSwgdG9JbXBsKHN0YXRpY19j
YXN0PFdLU3RyaW5nUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KGRpY3Rpb25hcnksIG5h
bWUpKSktPnN0cmluZygpKTsKKyAgICAgICAgaWYgKGZpZWxkICYmIGZpZWxkLT5uYW1lKCkuc3Rh
cnRzV2l0aElnbm9yaW5nQVNDSUlDYXNlKCJYLSIpKQorICAgICAgICAgICAgZmllbGRzLnVuY2hl
Y2tlZEFwcGVuZChXVEZNb3ZlKCpmaWVsZCkpOwogICAgIH0KICAgICB0b0ltcGwod2Vic2l0ZVBv
bGljaWVzKS0+c2V0Q3VzdG9tSGVhZGVyRmllbGRzKFdURk1vdmUoZmllbGRzKSk7CiB9CkluZGV4
OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVQb2xpY2llcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZVBvbGljaWVz
LmgJKHJldmlzaW9uIDIyMjcwOCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dL
V2Vic2l0ZVBvbGljaWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDggKzUxLDggQEAgV0tfRVhQ
T1JUIFdLV2Vic2l0ZVBvbGljaWVzUmVmIFdLV2Vic2l0ZQogV0tfRVhQT1JUIGJvb2wgV0tXZWJz
aXRlUG9saWNpZXNHZXRDb250ZW50QmxvY2tlcnNFbmFibGVkKFdLV2Vic2l0ZVBvbGljaWVzUmVm
KTsKIFdLX0VYUE9SVCB2b2lkIFdLV2Vic2l0ZVBvbGljaWVzU2V0Q29udGVudEJsb2NrZXJzRW5h
YmxlZChXS1dlYnNpdGVQb2xpY2llc1JlZiwgYm9vbCk7CiAKLVdLX0VYUE9SVCBXS0FycmF5UmVm
IFdLV2Vic2l0ZVBvbGljaWVzQ29weUN1c3RvbUhlYWRlckZpZWxkcyhXS1dlYnNpdGVQb2xpY2ll
c1JlZik7Ci1XS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVQb2xpY2llc1NldEN1c3RvbUhlYWRlckZp
ZWxkcyhXS1dlYnNpdGVQb2xpY2llc1JlZiwgV0tBcnJheVJlZik7CitXS19FWFBPUlQgV0tEaWN0
aW9uYXJ5UmVmIFdLV2Vic2l0ZVBvbGljaWVzQ29weUN1c3RvbUhlYWRlckZpZWxkcyhXS1dlYnNp
dGVQb2xpY2llc1JlZik7CitXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVQb2xpY2llc1NldEN1c3Rv
bUhlYWRlckZpZWxkcyhXS1dlYnNpdGVQb2xpY2llc1JlZiwgV0tEaWN0aW9uYXJ5UmVmKTsKIAog
V0tfRVhQT1JUIFdLV2Vic2l0ZUF1dG9wbGF5UXVpcmsgV0tXZWJzaXRlUG9saWNpZXNHZXRBbGxv
d2VkQXV0b3BsYXlRdWlya3MoV0tXZWJzaXRlUG9saWNpZXNSZWYpOwogV0tfRVhQT1JUIHZvaWQg
V0tXZWJzaXRlUG9saWNpZXNTZXRBbGxvd2VkQXV0b3BsYXlRdWlya3MoV0tXZWJzaXRlUG9saWNp
ZXNSZWYsIFdLV2Vic2l0ZUF1dG9wbGF5UXVpcmspOwpJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL19XS1dlYnNpdGVQb2xpY2llcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJzaXRlUG9saWNpZXMuaAkocmV2aXNp
b24gMjIyNzA4KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYnNp
dGVQb2xpY2llcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIFdLX0NMQVNTX0FW
QUlMQUJMRShtYWNvc3goMTAuMTIuMyksIGlvcygKIEBwcm9wZXJ0eSAobm9uYXRvbWljKSBCT09M
IGNvbnRlbnRCbG9ja2Vyc0VuYWJsZWQ7CiBAcHJvcGVydHkgKG5vbmF0b21pYykgX1dLV2Vic2l0
ZUF1dG9wbGF5UXVpcmsgYWxsb3dlZEF1dG9wbGF5UXVpcmtzIFdLX0FQSV9BVkFJTEFCTEUobWFj
b3N4KDEwLjEzKSwgaW9zKDExLjApKTsKIEBwcm9wZXJ0eSAobm9uYXRvbWljKSBfV0tXZWJzaXRl
QXV0b3BsYXlQb2xpY3kgYXV0b3BsYXlQb2xpY3kgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goMTAu
MTMpLCBpb3MoMTEuMCkpOwotQHByb3BlcnR5IChub25hdG9taWMsIGNvcHksIHNldHRlcj1zZXRD
dXN0b21IZWFkZXJGaWVsZHM6KSBOU0FycmF5PE5TU3RyaW5nICo+ICpjdXN0b21IZWFkZXJGaWVs
ZHMgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7
CitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSwgc2V0dGVyPXNldEN1c3RvbUhlYWRlckZpZWxk
czopIE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBOU1N0cmluZyAqPiAqY3VzdG9tSGVhZGVyRmll
bGRzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkp
OwogCiBAZW5kCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tX
ZWJzaXRlUG9saWNpZXMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL19XS1dlYnNpdGVQb2xpY2llcy5tbQkocmV2aXNpb24gMjIyNzA4KQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYnNpdGVQb2xpY2llcy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMTE2LDI0ICsxMTYsMjQgQEAgLSAoX1dLV2Vic2l0ZUF1dG9wbGF5UG9s
aWN5KWF1dG9wbGF5UG9saQogICAgIH0KIH0KIAotLSAoTlNBcnJheTxOU1N0cmluZyAqPiAqKWN1
c3RvbUhlYWRlckZpZWxkcworLSAoTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIE5TU3RyaW5nICo+
ICopY3VzdG9tSGVhZGVyRmllbGRzCiB7CiAgICAgY29uc3QgYXV0byYgZmllbGRzID0gX3dlYnNp
dGVQb2xpY2llcy0+Y3VzdG9tSGVhZGVyRmllbGRzKCk7Ci0gICAgTlNNdXRhYmxlQXJyYXkgKmFy
cmF5ID0gW1tbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6ZmllbGRzLnNp
emUoKV0gYXV0b3JlbGVhc2VdOworICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKmRpY3Rpb25hcnkg
PSBbW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OmZpZWxkcy5z
aXplKCldIGF1dG9yZWxlYXNlXTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGZpZWxkIDogZmllbGRz
KQotICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OmZpZWxkLmZpZWxkKCldOwotICAgIHJldHVybiBh
cnJheTsKKyAgICAgICAgW2RpY3Rpb25hcnkgc2V0T2JqZWN0OmZpZWxkLnZhbHVlKCkgZm9yS2V5
OmZpZWxkLm5hbWUoKV07CisgICAgcmV0dXJuIGRpY3Rpb25hcnk7CiB9CiAKLS0gKHZvaWQpc2V0
Q3VzdG9tSGVhZGVyRmllbGRzOihOU0FycmF5PE5TU3RyaW5nICo+ICopZmllbGRzCistICh2b2lk
KXNldEN1c3RvbUhlYWRlckZpZWxkczooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIE5TU3RyaW5n
ICo+ICopZmllbGRzCiB7CiAgICAgVmVjdG9yPFdlYkNvcmU6OkhUVFBIZWFkZXJGaWVsZD4gcGFy
c2VkRmllbGRzOwogICAgIHBhcnNlZEZpZWxkcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGZpZWxk
cy5jb3VudCk7Ci0gICAgZm9yIChOU1N0cmluZyAqc3RyaW5nIGluIGZpZWxkcykgewotICAgICAg
ICBXZWJDb3JlOjpIVFRQSGVhZGVyRmllbGQgcGFyc2VkRmllbGQoc3RyaW5nKTsKLSAgICAgICAg
aWYgKCFwYXJzZWRGaWVsZC5maWVsZCgpLmlzTnVsbCgpCi0gICAgICAgICAgICAmJiBwYXJzZWRG
aWVsZC5maWVsZCgpLnN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZSgiWC0iKSkgLy8gTGV0J3Mg
anVzdCBwcmV0ZW5kIFJGQzY2NDggbmV2ZXIgaGFwcGVuZWQuCi0gICAgICAgICAgICBwYXJzZWRG
aWVsZHMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUocGFyc2VkRmllbGQpKTsKKyAgICAKKyAgICBm
b3IgKE5TU3RyaW5nKiBuYW1lIGluIGZpZWxkcykgeworICAgICAgICBhdXRvIGZpZWxkID0gV2Vi
Q29yZTo6SFRUUEhlYWRlckZpZWxkOjpjcmVhdGUobmFtZSwgW2ZpZWxkcyBvYmplY3RGb3JLZXk6
bmFtZV0pOworICAgICAgICBpZiAoZmllbGQgJiYgZmllbGQtPm5hbWUoKS5zdGFydHNXaXRoSWdu
b3JpbmdBU0NJSUNhc2UoIlgtIikpCisgICAgICAgICAgICBwYXJzZWRGaWVsZHMudW5jaGVja2Vk
QXBwZW5kKFdURk1vdmUoKmZpZWxkKSk7CiAgICAgfQogICAgIF93ZWJzaXRlUG9saWNpZXMtPnNl
dEN1c3RvbUhlYWRlckZpZWxkcyhXVEZNb3ZlKHBhcnNlZEZpZWxkcykpOwogfQpJbmRleDogVG9v
bHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjIy
NzE4KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAK
KzIwMTctMTAtMDIgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4K
KworICAgICAgICBBcHBseSBjdXN0b20gaGVhZGVyIGZpZWxkcyB0byBzYW1lLW9yaWdpbiByZXF1
ZXN0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3
NjI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvSFRUUEhlYWRlckZpZWxkLmNwcDoKKyAgICAgICAg
KGNhbm9uaWNhbGl6ZUhUVFBIZWFkZXIpOgorICAgICAgICAoc2hvdWxkUmVtYWluVW5jaGFuZ2Vk
KToKKyAgICAgICAgKHNob3VsZEJlSW52YWxpZCk6CisgICAgICAgIChzaG91bGRCZWNvbWUpOgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0ZVBvbGljaWVz
Lm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgIChleHBlY3RIZWFkZXJzKToKKyAgICAgICAg
KC1bQ3VzdG9tSGVhZGVyRmllbGRzRGVsZWdhdGUgX3dlYlZpZXc6ZGVjaWRlUG9saWN5Rm9yTmF2
aWdhdGlvbkFjdGlvbjpkZWNpc2lvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW0N1c3RvbUhlYWRl
ckZpZWxkc0RlbGVnYXRlIHdlYlZpZXc6c3RhcnRVUkxTY2hlbWVUYXNrOl0pOgorICAgICAgICAo
LVtDdXN0b21IZWFkZXJGaWVsZHNEZWxlZ2F0ZSB3ZWJWaWV3OnN0b3BVUkxTY2hlbWVUYXNrOl0p
OgorCisgICAgICAgIFRlc3QgbWFpbiByZXNvdXJjZSByZXF1ZXN0cywgc3VicmVzb3VyY2UgcmVx
dWVzdHMsIGFuZCBjcm9zcy1vcmlnaW4gcmVxdWVzdHMuCisKIDIwMTctMTAtMDIgIEFsZXggQ2hy
aXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBGaXggYnVpbGQg
YWZ0ZXIgcjIyMjcxNQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0hU
VFBIZWFkZXJGaWVsZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJDb3JlL0hUVFBIZWFkZXJGaWVsZC5jcHAJKHJldmlzaW9uIDIyMjcwOCkKKysrIFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9IVFRQSGVhZGVyRmllbGQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCwyMiArMjgsMzMgQEAKICNpbmNsdWRlICJUZXN0LmgiCiAjaW5jbHVkZSA8
V2ViQ29yZS9IVFRQSGVhZGVyRmllbGQuaD4KIAorc3RhdGljIFN0cmluZyBjYW5vbmljYWxpemVI
VFRQSGVhZGVyKGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAgIHNpemVfdCBjb2xvbkxvY2F0
aW9uID0gc3RyaW5nLmZpbmQoJzonKTsKKyAgICBpZiAoY29sb25Mb2NhdGlvbiA9PSBub3RGb3Vu
ZCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBhdXRvIGZpZWxkID0gV2ViQ29yZTo6SFRUUEhl
YWRlckZpZWxkOjpjcmVhdGUoc3RyaW5nLnN1YnN0cmluZygwLCBjb2xvbkxvY2F0aW9uKSwgc3Ry
aW5nLnN1YnN0cmluZyhjb2xvbkxvY2F0aW9uICsgMSkpOworICAgIGlmICghZmllbGQpCisgICAg
ICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoZmllbGQtPm5hbWUoKSwgIjog
IiwgZmllbGQtPnZhbHVlKCkpOworfQorCiBzdGF0aWMgdm9pZCBzaG91bGRSZW1haW5VbmNoYW5n
ZWQoVmVjdG9yPFN0cmluZz4mJiBzdHJpbmdzKQogewogICAgIGZvciAoY29uc3QgYXV0byYgc3Ry
aW5nIDogc3RyaW5ncykKLSAgICAgICAgRVhQRUNUX1RSVUUoV2ViQ29yZTo6SFRUUEhlYWRlckZp
ZWxkKHN0cmluZykuZmllbGQoKSA9PSBzdHJpbmcpOworICAgICAgICBFWFBFQ1RfVFJVRShjYW5v
bmljYWxpemVIVFRQSGVhZGVyKHN0cmluZykgPT0gc3RyaW5nKTsKIH0KIAogc3RhdGljIHZvaWQg
c2hvdWxkQmVJbnZhbGlkKFZlY3RvcjxTdHJpbmc+JiYgc3RyaW5ncykKIHsKICAgICBmb3IgKGNv
bnN0IGF1dG8mIHN0cmluZyA6IHN0cmluZ3MpCi0gICAgICAgIEVYUEVDVF9UUlVFKFdlYkNvcmU6
OkhUVFBIZWFkZXJGaWVsZChzdHJpbmcpLmZpZWxkKCkgPT0gU3RyaW5nKCkpOworICAgICAgICBF
WFBFQ1RfVFJVRShjYW5vbmljYWxpemVIVFRQSGVhZGVyKHN0cmluZykgPT0gU3RyaW5nKCkpOwog
fQogCiBzdGF0aWMgdm9pZCBzaG91bGRCZWNvbWUoVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0
cmluZz4+JiYgcGFpcnMpCiB7CiAgICAgZm9yIChjb25zdCBhdXRvJiBwYWlyIDogcGFpcnMpCi0g
ICAgICAgIEVYUEVDVF9UUlVFKFdlYkNvcmU6OkhUVFBIZWFkZXJGaWVsZChwYWlyLmZpcnN0KS5m
aWVsZCgpID09IHBhaXIuc2Vjb25kKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoY2Fub25pY2FsaXpl
SFRUUEhlYWRlcihwYWlyLmZpcnN0KSA9PSBwYWlyLnNlY29uZCk7CiB9CiAKIFRFU1QoSFRUUEhl
YWRlckZpZWxkLCBQYXJzZXIpCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1dlYnNpdGVQb2xpY2llcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYnNpdGVQb2xpY2llcy5tbQkocmV2aXNpb24gMjIyNzA4
KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRlUG9saWNp
ZXMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2ltcG9ydCAiUGxhdGZv
cm1VdGlsaXRpZXMuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKKyNpbXBvcnQgPFdlYktp
dC9XS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1BhZ2VQ
cml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaD4KICNp
bXBvcnQgPFdlYktpdC9XS1VJRGVsZWdhdGVQcml2YXRlLmg+CkBAIC02MjcsMTMgKzYyOCw5NyBA
QCBURVNUKFdlYktpdCwgV2Vic2l0ZVBvbGljaWVzQXV0b3BsYXlRdWlyCiBURVNUKFdlYktpdCwg
SW52YWxpZEN1c3RvbUhlYWRlcnMpCiB7CiAgICAgYXV0byB3ZWJzaXRlUG9saWNpZXMgPSBhZG9w
dE5TKFtbX1dLV2Vic2l0ZVBvbGljaWVzIGFsbG9jXSBpbml0XSk7Ci0gICAgW3dlYnNpdGVQb2xp
Y2llcyBzZXRDdXN0b21IZWFkZXJGaWVsZHM6QFtAImludmFsaWRoZWFkZXI6IiwgQCJub25jdXN0
b206IGhlYWRlciIsIEAiWC1jdXN0b206IGhlYWRlciIsIEAiICAgIHgtQ3VzdG9tIDogIE5lZWRz
IENhbm9uaWNhbGl6YXRpb25cdCAiXV07Ci0gICAgTlNBcnJheTxOU1N0cmluZyAqPiAqY2Fub25p
Y2FsaXplZCA9IFt3ZWJzaXRlUG9saWNpZXMgY3VzdG9tSGVhZGVyRmllbGRzXTsKKyAgICBbd2Vi
c2l0ZVBvbGljaWVzIHNldEN1c3RvbUhlYWRlckZpZWxkczpAe0AiaW52YWxpZGhlYWRlciIgOiBA
IiIsIEAibm9uY3VzdG9tIiA6IEAiaGVhZGVyIiwgQCIgICAgeC1DdXN0b20gIjpAIiAgTmVlZHMg
Q2Fub25pY2FsaXphdGlvblx0ICIsIEAieC1vdGhlciIgOiBAIm90aGVyIHZhbHVlIn1dOworICAg
IE5TRGljdGlvbmFyeTxOU1N0cmluZyAqLCBOU1N0cmluZyAqPiAqY2Fub25pY2FsaXplZCA9IFt3
ZWJzaXRlUG9saWNpZXMgY3VzdG9tSGVhZGVyRmllbGRzXTsKICAgICBFWFBFQ1RfRVEoY2Fub25p
Y2FsaXplZC5jb3VudCwgMnUpOwotICAgIEVYUEVDVF9TVFJFUShbY2Fub25pY2FsaXplZCBvYmpl
Y3RBdEluZGV4OjBdLlVURjhTdHJpbmcsICJYLWN1c3RvbTogaGVhZGVyIik7Ci0gICAgRVhQRUNU
X1NUUkVRKFtjYW5vbmljYWxpemVkIG9iamVjdEF0SW5kZXg6MV0uVVRGOFN0cmluZywgIngtQ3Vz
dG9tOiBOZWVkcyBDYW5vbmljYWxpemF0aW9uIik7CisgICAgRVhQRUNUX1NUUkVRKFtjYW5vbmlj
YWxpemVkIG9iamVjdEZvcktleTpAIngtQ3VzdG9tIl0uVVRGOFN0cmluZywgIk5lZWRzIENhbm9u
aWNhbGl6YXRpb24iKTsKKyAgICBFWFBFQ1RfU1RSRVEoW2Nhbm9uaWNhbGl6ZWQgb2JqZWN0Rm9y
S2V5OkAieC1vdGhlciJdLlVURjhTdHJpbmcsICJvdGhlciB2YWx1ZSIpOwogfQogCi0vLyBGSVhN
RTogQXBwbHkgdGhlIGN1c3RvbSBoZWFkZXJzIGZyb20gdGhlIERvY3VtZW50TG9hZGVyIHRvIGVh
Y2ggcmVxdWVzdCBhbmQgdGVzdCB0aGF0IHRoZXkgYXJlIHNlbnQgb24gbWFpbiByZXNvdXJjZSBh
bmQgc3VicmVzb3VyY2VzLgorc3RhdGljIGJvb2wgZmlyc3RUZXN0RG9uZTsKK3N0YXRpYyBib29s
IHNlY29uZFRlc3REb25lOworCitzdGF0aWMgdm9pZCBleHBlY3RIZWFkZXJzKGlkIDxXS1VSTFNj
aGVtZVRhc2s+IHRhc2ssIGJvb2wgZXhwZWN0ZWQpCit7CisgICAgTlNVUkxSZXF1ZXN0ICpyZXF1
ZXN0ID0gdGFzay5yZXF1ZXN0OworICAgIGlmIChleHBlY3RlZCkgeworICAgICAgICBFWFBFQ1Rf
U1RSRVEoW1tyZXF1ZXN0IHZhbHVlRm9ySFRUUEhlYWRlckZpZWxkOkAiWC1rZXkxIl0gVVRGOFN0
cmluZ10sICJ2YWx1ZTEiKTsKKyAgICAgICAgRVhQRUNUX1NUUkVRKFtbcmVxdWVzdCB2YWx1ZUZv
ckhUVFBIZWFkZXJGaWVsZDpAIlgta2V5MiJdIFVURjhTdHJpbmddLCAidmFsdWUyIik7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgRVhQRUNUX1RSVUUoW3JlcXVlc3QgdmFsdWVGb3JIVFRQSGVhZGVy
RmllbGQ6QCJYLWtleTEiXSA9PSBuaWwpOworICAgICAgICBFWFBFQ1RfVFJVRShbcmVxdWVzdCB2
YWx1ZUZvckhUVFBIZWFkZXJGaWVsZDpAIlgta2V5MiJdID09IG5pbCk7CisgICAgfQorfQorCitz
dGF0aWMgdm9pZCByZXNwb25kKGlkIDxXS1VSTFNjaGVtZVRhc2s+dGFzaywgTlNTdHJpbmcgKmh0
bWwgPSBuaWwpCit7CisgICAgW3Rhc2sgZGlkUmVjZWl2ZVJlc3BvbnNlOltbW05TVVJMUmVzcG9u
c2UgYWxsb2NdIGluaXRXaXRoVVJMOnRhc2sucmVxdWVzdC5VUkwgTUlNRVR5cGU6QCJ0ZXh0L2h0
bWwiIGV4cGVjdGVkQ29udGVudExlbmd0aDpodG1sLmxlbmd0aCB0ZXh0RW5jb2RpbmdOYW1lOm5p
bF0gYXV0b3JlbGVhc2VdXTsKKyAgICBbdGFzayBkaWRSZWNlaXZlRGF0YTpbaHRtbCBkYXRhVXNp
bmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ11dOworICAgIFt0YXNrIGRpZEZpbmlzaF07
Cit9CisKK0BpbnRlcmZhY2UgQ3VzdG9tSGVhZGVyRmllbGRzRGVsZWdhdGUgOiBOU09iamVjdCA8
V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlLCBXS1VSTFNjaGVtZUhhbmRsZXI+CitAZW5kCisK
K0BpbXBsZW1lbnRhdGlvbiBDdXN0b21IZWFkZXJGaWVsZHNEZWxlZ2F0ZQorCistICh2b2lkKV93
ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rp
b246KFdLTmF2aWdhdGlvbkFjdGlvbiAqKW5hdmlnYXRpb25BY3Rpb24gZGVjaXNpb25IYW5kbGVy
Oih2b2lkICheKShXS05hdmlnYXRpb25BY3Rpb25Qb2xpY3ksIF9XS1dlYnNpdGVQb2xpY2llcyAq
KSlkZWNpc2lvbkhhbmRsZXIKK3sKKyAgICBfV0tXZWJzaXRlUG9saWNpZXMgKndlYnNpdGVQb2xp
Y2llcyA9IFtbW19XS1dlYnNpdGVQb2xpY2llcyBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOwor
ICAgIFt3ZWJzaXRlUG9saWNpZXMgc2V0Q3VzdG9tSGVhZGVyRmllbGRzOkB7QCJYLWtleTEiOiBA
InZhbHVlMSIsIEAiWC1rZXkyIjogQCJ2YWx1ZTIifV07CisgICAgZGVjaXNpb25IYW5kbGVyKFdL
TmF2aWdhdGlvbkFjdGlvblBvbGljeUFsbG93LCB3ZWJzaXRlUG9saWNpZXMpOworfQorCistICh2
b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgc3RhcnRVUkxTY2hlbWVUYXNrOihpZCA8
V0tVUkxTY2hlbWVUYXNrPil1cmxTY2hlbWVUYXNrCit7CisgICAgTlNTdHJpbmcgKnBhdGggPSB1
cmxTY2hlbWVUYXNrLnJlcXVlc3QuVVJMLnBhdGg7CisgICAgaWYgKFtwYXRoIGlzRXF1YWxUb1N0
cmluZzpAIi9tYWlucmVzb3VyY2UiXSkgeworICAgICAgICBleHBlY3RIZWFkZXJzKHVybFNjaGVt
ZVRhc2ssIHRydWUpOworICAgICAgICByZXNwb25kKHVybFNjaGVtZVRhc2ssIEAiPHNjcmlwdD5m
ZXRjaCgnc3VicmVzb3VyY2UnKS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKXtmZXRjaCgndGVzdDov
L2RpZmZlcmVudHNlY3VyaXR5b3JpZ2luL2Nyb3Nzb3JpZ2luc3VicmVzb3VyY2UnLHttb2RlOidu
by1jb3JzJ30pfSk8L3NjcmlwdD4iKTsKKyAgICB9IGVsc2UgaWYgKFtwYXRoIGlzRXF1YWxUb1N0
cmluZzpAIi9zdWJyZXNvdXJjZSJdKSB7CisgICAgICAgIGV4cGVjdEhlYWRlcnModXJsU2NoZW1l
VGFzaywgdHJ1ZSk7CisgICAgICAgIHJlc3BvbmQodXJsU2NoZW1lVGFzayk7CisgICAgfSBlbHNl
IGlmIChbcGF0aCBpc0VxdWFsVG9TdHJpbmc6QCIvY3Jvc3NvcmlnaW5zdWJyZXNvdXJjZSJdKSB7
CisgICAgICAgIGV4cGVjdEhlYWRlcnModXJsU2NoZW1lVGFzaywgZmFsc2UpOworICAgICAgICBy
ZXNwb25kKHVybFNjaGVtZVRhc2spOworICAgICAgICBmaXJzdFRlc3REb25lID0gdHJ1ZTsKKyAg
ICB9IGVsc2UgaWYgKFtwYXRoIGlzRXF1YWxUb1N0cmluZzpAIi9tYWlucmVzb3VyY2V3aXRoaWZy
YW1lIl0pIHsKKyAgICAgICAgZXhwZWN0SGVhZGVycyh1cmxTY2hlbWVUYXNrLCB0cnVlKTsKKyAg
ICAgICAgcmVzcG9uZCh1cmxTY2hlbWVUYXNrLCBAIjxpZnJhbWUgc3JjPSd0ZXN0Oi8vaWZyYW1l
b3JpZ2luL2lmcmFtZW1haW5yZXNvdXJjZSc+PC9pZnJhbWU+Iik7CisgICAgfSBlbHNlIGlmIChb
cGF0aCBpc0VxdWFsVG9TdHJpbmc6QCIvaWZyYW1lbWFpbnJlc291cmNlIl0pIHsKKyAgICAgICAg
ZXhwZWN0SGVhZGVycyh1cmxTY2hlbWVUYXNrLCBmYWxzZSk7CisgICAgICAgIHJlc3BvbmQodXJs
U2NoZW1lVGFzaywgQCI8c2NyaXB0PmZldGNoKCdpZnJhbWVzdWJyZXNvdXJjZScpLnRoZW4oZnVu
Y3Rpb24ocmVzcG9uc2Upe2ZldGNoKCd0ZXN0Oi8vbWFpbmZyYW1lb3JpZ2luL29yaWdpbmFsb3Jp
Z2luc3VicmVzb3VyY2UnLHttb2RlOiduby1jb3JzJ30pfSk8L3NjcmlwdD4iKTsKKyAgICB9IGVs
c2UgaWYgKFtwYXRoIGlzRXF1YWxUb1N0cmluZzpAIi9pZnJhbWVzdWJyZXNvdXJjZSJdKSB7Cisg
ICAgICAgIGV4cGVjdEhlYWRlcnModXJsU2NoZW1lVGFzaywgdHJ1ZSk7CisgICAgICAgIHJlc3Bv
bmQodXJsU2NoZW1lVGFzayk7CisgICAgfSBlbHNlIGlmIChbcGF0aCBpc0VxdWFsVG9TdHJpbmc6
QCIvb3JpZ2luYWxvcmlnaW5zdWJyZXNvdXJjZSJdKSB7CisgICAgICAgIGV4cGVjdEhlYWRlcnMo
dXJsU2NoZW1lVGFzaywgZmFsc2UpOworICAgICAgICByZXNwb25kKHVybFNjaGVtZVRhc2spOwor
ICAgICAgICBzZWNvbmRUZXN0RG9uZSA9IHRydWU7CisgICAgfSBlbHNlCisgICAgICAgIEVYUEVD
VF9UUlVFKGZhbHNlKTsKK30KKworLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3
IHN0b3BVUkxTY2hlbWVUYXNrOihpZCA8V0tVUkxTY2hlbWVUYXNrPil1cmxTY2hlbWVUYXNrCit7
Cit9CisKK0BlbmQKKworVEVTVChXZWJLaXQsIEN1c3RvbUhlYWRlckZpZWxkcykKK3sKKyAgICBh
dXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW0N1c3RvbUhlYWRlckZpZWxkc0RlbGVnYXRlIGFsbG9j
XSBpbml0XSk7CisgICAgYXV0byBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0Nv
bmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKKyAgICBbY29uZmlndXJhdGlvbiBzZXRVUkxTY2hl
bWVIYW5kbGVyOmRlbGVnYXRlLmdldCgpIGZvclVSTFNjaGVtZTpAInRlc3QiXTsKKyAgICBhdXRv
IHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFr
ZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0p
OworICAgIFt3ZWJWaWV3IHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07Cisg
ICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNV
UkwgVVJMV2l0aFN0cmluZzpAInRlc3Q6Ly8vbWFpbnJlc291cmNlIl1dXTsKKyAgICBUZXN0V2Vi
S2l0QVBJOjpVdGlsOjpydW4oJmZpcnN0VGVzdERvbmUpOworICAgIAorICAgIHdlYlZpZXcgPSBh
ZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwg
ODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOworICAgIFt3ZWJW
aWV3IHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CisgICAgW3dlYlZpZXcg
bG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0
cmluZzpAInRlc3Q6Ly9tYWluZnJhbWVvcmlnaW4vbWFpbnJlc291cmNld2l0aGlmcmFtZSJdXV07
CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZzZWNvbmRUZXN0RG9uZSk7Cit9CiAKICNl
bmRpZiAvLyBXS19BUElfRU5BQkxFRAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322404</attachid>
            <date>2017-10-02 11:47:05 -0700</date>
            <delta_ts>2017-10-06 14:45:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177629-20171002114705.patch</filename>
            <type>text/plain</type>
            <size>32268</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMjcwOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBACisyMDE3LTEwLTAyICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQXBwbHkgY3Vz
dG9tIGhlYWRlciBmaWVsZHMgdG8gc2FtZS1vcmlnaW4gcmVxdWVzdHMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzYyOQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvdmVyZWQgYnkgbmV3IEFQSSB0ZXN0
cy4KKworICAgICAgICAqIGxvYWRlci9Eb2N1bWVudExvYWRlci5oOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnRMb2FkZXI6OmN1c3RvbUhlYWRlckZpZWxkcyk6CisgICAgICAgICogbG9hZGVy
L0hUVFBIZWFkZXJGaWVsZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVFRQSGVhZGVyRmllbGQ6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVFRQSGVhZGVyRmllbGQ6OkhUVFBIZWFkZXJG
aWVsZCk6IERlbGV0ZWQuCisgICAgICAgICogbG9hZGVyL0hUVFBIZWFkZXJGaWVsZC5oOgorICAg
ICAgICAoV2ViQ29yZTo6SFRUUEhlYWRlckZpZWxkOjplbmNvZGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SFRUUEhlYWRlckZpZWxkOjpkZWNvZGUpOgorICAgICAgICAKKyAgICAgICAgQ2hh
bmdlIEhUVFBIZWFkZXJGaWVsZCBmcm9tIG9uZSBTdHJpbmcgY29udGFpbmluZyB0aGUgbmFtZSBh
bmQgdmFsdWUKKyAgICAgICAgdG8gYSBzdHJpbmcgZm9yIHRoZSBuYW1lIGFuZCBhbm90aGVyIGZv
ciB2YWx1ZS4gIFRoaXMgbWF0Y2hlcyBIVFRQSGVhZGVyTWFwCisgICAgICAgIGFuZCBOU1VSTFJl
cXVlc3QgbW9yZSBjbG9zZWx5IHdoZXJlIG5hbWVzIGFuZCB2YWx1ZXMgYXJlIHRyZWF0ZWQgYXMg
c2VwYXJhdGUgU3RyaW5ncy4KKyAgICAgICAgCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hl
ZFJlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9h
ZGVyOjpyZXF1ZXN0UmVzb3VyY2UpOgorICAgICAgICAKKyAgICAgICAgSWYgdGhlIERvY3VtZW50
TG9hZGVyIGhhcyBjdXN0b20gaGVhZGVyIGZpZWxkcyBmcm9tIHRoZSBXZWJzaXRlUG9saWNpZXMs
IGFwcGx5IHRoZW0gdG8gYW55IHNhbWUtb3JpZ2luIHJlcXVlc3RzLgorICAgICAgICAKKyAgICAg
ICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0Lmg6CisgICAgICAgIChXZWJD
b3JlOjpDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6OnJlc291cmNlUmVxdWVzdCk6CisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OnNldENhY2hlUG9saWN5KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OnNldFRpbWVvdXRJbnRlcnZhbCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpzZXRIVFRQTWV0aG9kKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OnNldEhUVFBIZWFkZXJGaWVsZCk6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpjbGVhckhUVFBBdXRob3JpemF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OmNsZWFySFRUUENvbnRlbnRU
eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OmNsZWFySFRUUFJl
ZmVycmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OmNsZWFySFRU
UE9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpjbGVhckhU
VFBVc2VyQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6Y2xl
YXJIVFRQQWNjZXB0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OmNs
ZWFySFRUUEFjY2VwdEVuY29kaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dEJhc2U6OnNldFJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OnNldEhUVFBCb2R5KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OnNldEFsbG93Q29va2llcyk6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpzZXRQcmlvcml0eSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjphZGRIVFRQSGVhZGVyRmllbGRJ
Zk5vdFByZXNlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6YWRk
SFRUUEhlYWRlckZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6
OnNldEhUVFBIZWFkZXJGaWVsZHMpOgorICAgICAgICAKKyAgICAgICAgbm9uLUhUVFAvSFRUUFMg
UmVzb3VyY2VSZXF1ZXN0cyBuZWVkIHRvIGJlIHVwZGF0ZWQsIHRvbywgaWYgaGVhZGVyIGZpZWxk
cyBhcmUgYWRkZWQuCisgICAgICAgIFNraXBwaW5nIHVwZGF0aW5nIG5vbi1IVFRQL0hUVFBTIFJl
c291cmNlUmVxdWVzdHMgaXMgbm90IGEgdmFsaWQgc2hvcnRjdXQsIGFuZCB3aXRoIHRoZQorICAg
ICAgICBncm93aW5nIGltcG9ydGFuY2Ugb2YgY3VzdG9tIHNjaGVtZXMgd2l0aCBvdXIgbmV3IHB1
YmxpYyBBUEksIHdlIHNob3VsZCB1cGRhdGUgUmVzb3VyY2VSZXF1ZXN0cworICAgICAgICBvZiBj
dXN0b20gc2NoZW1lcyBjb3JyZWN0bHkuCisKIDIwMTctMTAtMDIgIENoYXJsZXMgVHVybmVyICA8
Y3R1cm5lckBpZ2FsaWEuY29tPgogCiAgICAgICAgIFRyeSB0byBwbGF5IEFWQyBjb2RlYyBldmVu
IGlmIEguMjY0IGRlY29kZXIgb25seSBhZHZlcnRpc2VzIGJ5dGUtc3RyZWFtIHByb2ZpbGUuCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuaAkocmV2aXNpb24gMjIyNzA4
KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI5Nyw2ICsyOTcsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgVmVjdG9yPExpbmtJY29u
PiYgbGlua0ljb25zKCkgY29uc3QgeyByZXR1cm4gbV9saW5rSWNvbnM7IH0KIAogICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc2V0Q3VzdG9tSGVhZGVyRmllbGRzKFZlY3RvcjxIVFRQSGVhZGVyRmll
bGQ+JiYgZmllbGRzKTsKKyAgICBjb25zdCBWZWN0b3I8SFRUUEhlYWRlckZpZWxkPiYgY3VzdG9t
SGVhZGVyRmllbGRzKCkgeyByZXR1cm4gbV9jdXN0b21IZWFkZXJGaWVsZHM7IH0KICAgICAKIHBy
b3RlY3RlZDoKICAgICBXRUJDT1JFX0VYUE9SVCBEb2N1bWVudExvYWRlcihjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmLCBjb25zdCBTdWJzdGl0dXRlRGF0YSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
bG9hZGVyL0hUVFBIZWFkZXJGaWVsZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
bG9hZGVyL0hUVFBIZWFkZXJGaWVsZC5jcHAJKHJldmlzaW9uIDIyMjcwOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9IVFRQSGVhZGVyRmllbGQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIs
MTggKzIwMiwxNiBAQCBzdGF0aWMgYm9vbCBpc1ZhbGlkVmFsdWUoU3RyaW5nVmlldyB2YWx1CiAK
IH0gLy8gbmFtZXNwYWNlIFJGQzcyMzAKIAotSFRUUEhlYWRlckZpZWxkOjpIVFRQSGVhZGVyRmll
bGQoY29uc3QgU3RyaW5nJiBmaWVsZCkKK3N0ZDo6b3B0aW9uYWw8SFRUUEhlYWRlckZpZWxkPiBI
VFRQSGVhZGVyRmllbGQ6OmNyZWF0ZShTdHJpbmcmJiB1bnBhcnNlZE5hbWUsIFN0cmluZyYmIHVu
cGFyc2VkVmFsdWUpCiB7Ci0gICAgc2l6ZV90IGNvbG9uTG9jYXRpb24gPSBmaWVsZC5maW5kKCc6
Jyk7Ci0gICAgaWYgKGNvbG9uTG9jYXRpb24gPT0gbm90Rm91bmQpCi0gICAgICAgIHJldHVybjsK
KyAgICBTdHJpbmdWaWV3IHN0cmlwcGVkTmFtZSA9IFN0cmluZ1ZpZXcodW5wYXJzZWROYW1lKS5z
dHJpcExlYWRpbmdBbmRUcmFpbGluZ01hdGNoZWRDaGFyYWN0ZXJzKFJGQzcyMzA6OmlzV2hpdGVz
cGFjZSk7CisgICAgU3RyaW5nVmlldyBzdHJpcHBlZFZhbHVlID0gU3RyaW5nVmlldyh1bnBhcnNl
ZFZhbHVlKS5zdHJpcExlYWRpbmdBbmRUcmFpbGluZ01hdGNoZWRDaGFyYWN0ZXJzKFJGQzcyMzA6
OmlzV2hpdGVzcGFjZSk7CisgICAgaWYgKCFSRkM3MjMwOjppc1ZhbGlkTmFtZShzdHJpcHBlZE5h
bWUpIHx8ICFSRkM3MjMwOjppc1ZhbGlkVmFsdWUoc3RyaXBwZWRWYWx1ZSkpCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBTdHJpbmdWaWV3IG5hbWUgPSBTdHJpbmdWaWV3KGZp
ZWxkKS5zdWJzdHJpbmcoMCwgY29sb25Mb2NhdGlvbikuc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdN
YXRjaGVkQ2hhcmFjdGVycyhSRkM3MjMwOjppc1doaXRlc3BhY2UpOwotICAgIFN0cmluZ1ZpZXcg
dmFsdWUgPSBTdHJpbmdWaWV3KGZpZWxkKS5zdWJzdHJpbmcoY29sb25Mb2NhdGlvbiArIDEpLnN0
cmlwTGVhZGluZ0FuZFRyYWlsaW5nTWF0Y2hlZENoYXJhY3RlcnMoUkZDNzIzMDo6aXNXaGl0ZXNw
YWNlKTsKLSAgICBpZiAoIVJGQzcyMzA6OmlzVmFsaWROYW1lKG5hbWUpIHx8ICFSRkM3MjMwOjpp
c1ZhbGlkVmFsdWUodmFsdWUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2ZpZWxkID0gbWFr
ZVN0cmluZyhuYW1lLCAnOicsICcgJywgIHZhbHVlKTsKKyAgICBTdHJpbmcgbmFtZSA9IHN0cmlw
cGVkTmFtZS5sZW5ndGgoKSA9PSB1bnBhcnNlZE5hbWUubGVuZ3RoKCkgPyBXVEZNb3ZlKHVucGFy
c2VkTmFtZSkgOiBzdHJpcHBlZE5hbWUudG9TdHJpbmcoKTsKKyAgICBTdHJpbmcgdmFsdWUgPSBz
dHJpcHBlZFZhbHVlLmxlbmd0aCgpID09IHVucGFyc2VkVmFsdWUubGVuZ3RoKCkgPyBXVEZNb3Zl
KHVucGFyc2VkVmFsdWUpIDogc3RyaXBwZWRWYWx1ZS50b1N0cmluZygpOworICAgIHJldHVybiB7
eyBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHZhbHVlKSB9fTsKIH0KIAogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvbG9hZGVyL0hUVFBIZWFkZXJGaWVsZC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9IVFRQSGVhZGVyRmllbGQuaAkocmV2aXNpb24gMjIyNzA4KQorKysgU291
cmNlL1dlYkNvcmUvbG9hZGVyL0hUVFBIZWFkZXJGaWVsZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSwzMiArMzEsNDQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBXRUJDT1JFX0VYUE9S
VCBIVFRQSGVhZGVyRmllbGQgewogcHVibGljOgotICAgIEhUVFBIZWFkZXJGaWVsZChjb25zdCBT
dHJpbmcmKTsKLSAgICAKLSAgICBjb25zdCBTdHJpbmcmIGZpZWxkKCkgY29uc3QgeyByZXR1cm4g
bV9maWVsZDsgfQorICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEhUVFBIZWFkZXJGaWVsZD4gY3Jl
YXRlKFN0cmluZyYmIG5hbWUsIFN0cmluZyYmIHZhbHVlKTsKKworICAgIGNvbnN0IFN0cmluZyYg
bmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIGNvbnN0IFN0cmluZyYgdmFsdWUo
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVy
PiB2b2lkIGVuY29kZShFbmNvZGVyJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rl
cj4gc3RhdGljIHN0ZDo6b3B0aW9uYWw8SFRUUEhlYWRlckZpZWxkPiBkZWNvZGUoRGVjb2RlciYp
OwogCiBwcml2YXRlOgotICAgIFN0cmluZyBtX2ZpZWxkOworICAgIEhUVFBIZWFkZXJGaWVsZChT
dHJpbmcmJiBuYW1lLCBTdHJpbmcmJiB2YWx1ZSkKKyAgICAgICAgOiBtX25hbWUoV1RGTW92ZShu
YW1lKSkKKyAgICAgICAgLCBtX3ZhbHVlKFdURk1vdmUodmFsdWUpKQorICAgIHsgfQorICAgIFN0
cmluZyBtX25hbWU7CisgICAgU3RyaW5nIG1fdmFsdWU7CiB9OwogCiB0ZW1wbGF0ZTxjbGFzcyBF
bmNvZGVyPgogdm9pZCBIVFRQSGVhZGVyRmllbGQ6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBj
b25zdAogewotICAgIGVuY29kZXIgPDwgbV9maWVsZDsKKyAgICBlbmNvZGVyIDw8IG1fbmFtZTsK
KyAgICBlbmNvZGVyIDw8IG1fdmFsdWU7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+CiBz
dGQ6Om9wdGlvbmFsPEhUVFBIZWFkZXJGaWVsZD4gSFRUUEhlYWRlckZpZWxkOjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcikKIHsKLSAgICBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gZmllbGQ7Ci0gICAg
ZGVjb2RlciA+PiBmaWVsZDsKLSAgICBpZiAoIWZpZWxkKQorICAgIHN0ZDo6b3B0aW9uYWw8U3Ry
aW5nPiBuYW1lOworICAgIGRlY29kZXIgPj4gbmFtZTsKKyAgICBpZiAoIW5hbWUpCisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gdmFsdWU7
CisgICAgZGVjb2RlciA+PiB2YWx1ZTsKKyAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwogCi0gICAgcmV0dXJuIHt7IFdURk1vdmUoKmZpZWxkKSB9fTsKKyAgICBy
ZXR1cm4ge3sgV1RGTW92ZSgqbmFtZSksIFdURk1vdmUoKnZhbHVlKSB9fTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZFJlc291cmNlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiAyMjI3MDgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIK
ICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVu
dC5oIgorI2luY2x1ZGUgIkhUVFBIZWFkZXJGaWVsZC5oIgogI2luY2x1ZGUgIkxvYWRlclN0cmF0
ZWd5LmgiCiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKQEAgLTc1MCw2ICs3NTEsMTQgQEAgUmVzb3VyY2VFcnJvck9yPENhY2hlZFJlc291cmNlSGFu
ZGxlPENhYwogICAgIH0KICNlbmRpZgogCisgICAgaWYgKG1fZG9jdW1lbnRMb2FkZXIgJiYgIW1f
ZG9jdW1lbnRMb2FkZXItPmN1c3RvbUhlYWRlckZpZWxkcygpLmlzRW1wdHkoKSAmJiBtX2RvY3Vt
ZW50TG9hZGVyLT5mcmFtZSgpICYmIG1fZG9jdW1lbnRMb2FkZXItPmZyYW1lKCktPmlzTWFpbkZy
YW1lKCkpIHsKKyAgICAgICAgYm9vbCBsb2FkaW5nU2FtZU9yaWdpblN1YnJlc291cmNlID0gZG9j
dW1lbnQoKSAmJiBkb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLmVxdWFsKFNlY3VyaXR5T3Jp
Z2luOjpjcmVhdGUocmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS51cmwoKSkucHRyKCkpOworICAg
ICAgICBpZiAodHlwZSA9PSBDYWNoZWRSZXNvdXJjZTo6VHlwZTo6TWFpblJlc291cmNlIHx8IGxv
YWRpbmdTYW1lT3JpZ2luU3VicmVzb3VyY2UpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byYgZmll
bGQgOiBtX2RvY3VtZW50TG9hZGVyLT5jdXN0b21IZWFkZXJGaWVsZHMoKSkKKyAgICAgICAgICAg
ICAgICByZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLmFkZEhUVFBIZWFkZXJGaWVsZChmaWVsZC5u
YW1lKCksIGZpZWxkLnZhbHVlKCkpOworICAgICAgICB9CisgICAgfQorCiAgICAgTG9hZFRpbWlu
ZyBsb2FkVGltaW5nOwogICAgIGxvYWRUaW1pbmcubWFya1N0YXJ0VGltZUFuZEZldGNoU3RhcnQo
KTsKICAgICBJbml0aWF0b3JDb250ZXh0IGluaXRpYXRvckNvbnRleHQgPSByZXF1ZXN0Lm9wdGlv
bnMoKS5pbml0aWF0b3JDb250ZXh0OwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hl
L0NhY2hlZFJlc291cmNlUmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuaAkocmV2aXNpb24gMjIyNzA4KQorKysg
U291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlUmVxdWVzdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Miw2ICs1Miw3IEBAIHB1YmxpYzoKIAogICAgIFJlc291cmNlUmVxdWVz
dCYmIHJlbGVhc2VSZXNvdXJjZVJlcXVlc3QoKSB7IHJldHVybiBXVEZNb3ZlKG1fcmVzb3VyY2VS
ZXF1ZXN0KTsgfQogICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0KCkg
Y29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZVJlcXVlc3Q7IH0KKyAgICBSZXNvdXJjZVJlcXVlc3Qm
IHJlc291cmNlUmVxdWVzdCgpIHsgcmV0dXJuIG1fcmVzb3VyY2VSZXF1ZXN0OyB9CiAgICAgY29u
c3QgU3RyaW5nJiBjaGFyc2V0KCkgY29uc3QgeyByZXR1cm4gbV9jaGFyc2V0OyB9CiAgICAgdm9p
ZCBzZXRDaGFyc2V0KGNvbnN0IFN0cmluZyYgY2hhcnNldCkgeyBtX2NoYXJzZXQgPSBjaGFyc2V0
OyB9CiAgICAgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJiBvcHRpb25zKCkgY29uc3QgeyBy
ZXR1cm4gbV9vcHRpb25zOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAJKHJldmlzaW9uIDIyMjcwOCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OSw4ICsxNDksNyBAQCB2b2lkIFJlc291cmNlUmVxdWVz
dEJhc2U6OnNldENhY2hlUG9saWN5CiAgICAgCiAgICAgbV9jYWNoZVBvbGljeSA9IGNhY2hlUG9s
aWN5OwogICAgIAotICAgIGlmICh1cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCi0gICAg
ICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOworICAgIG1fcGxhdGZvcm1SZXF1
ZXN0VXBkYXRlZCA9IGZhbHNlOwogfQogCiBkb3VibGUgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6dGlt
ZW91dEludGVydmFsKCkgY29uc3QKQEAgLTE2OSw4ICsxNjgsNyBAQCB2b2lkIFJlc291cmNlUmVx
dWVzdEJhc2U6OnNldFRpbWVvdXRJbnRlCiAKICAgICBtX3RpbWVvdXRJbnRlcnZhbCA9IHRpbWVv
dXRJbnRlcnZhbDsKICAgICAKLSAgICBpZiAodXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgp
KQotICAgICAgICBtX3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQgPSBmYWxzZTsKKyAgICBtX3BsYXRm
b3JtUmVxdWVzdFVwZGF0ZWQgPSBmYWxzZTsKIH0KIAogY29uc3QgVVJMJiBSZXNvdXJjZVJlcXVl
c3RCYXNlOjpmaXJzdFBhcnR5Rm9yQ29va2llcygpIGNvbnN0CkBAIC0yMDgsOCArMjA2LDcgQEAg
dm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpzZXRIVFRQTWV0aG9kKAogCiAgICAgbV9odHRwTWV0
aG9kID0gaHR0cE1ldGhvZDsKICAgICAKLSAgICBpZiAodXJsKCkucHJvdG9jb2xJc0luSFRUUEZh
bWlseSgpKQotICAgICAgICBtX3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQgPSBmYWxzZTsKKyAgICBt
X3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQgPSBmYWxzZTsKIH0KIAogY29uc3QgSFRUUEhlYWRlck1h
cCYgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6aHR0cEhlYWRlckZpZWxkcygpIGNvbnN0CkBAIC0yMzks
OCArMjM2LDcgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpzZXRIVFRQSGVhZGVyRgogCiAg
ICAgbV9odHRwSGVhZGVyRmllbGRzLnNldChuYW1lLCB2YWx1ZSk7CiAgICAgCi0gICAgaWYgKHVy
bCgpLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkKLSAgICAgICAgbV9wbGF0Zm9ybVJlcXVlc3RV
cGRhdGVkID0gZmFsc2U7CisgICAgbV9wbGF0Zm9ybVJlcXVlc3RVcGRhdGVkID0gZmFsc2U7CiB9
CiAKIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6c2V0SFRUUEhlYWRlckZpZWxkKEhUVFBIZWFk
ZXJOYW1lIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCkBAIC0yNDksOCArMjQ1LDcgQEAgdm9p
ZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpzZXRIVFRQSGVhZGVyRgogCiAgICAgbV9odHRwSGVhZGVy
RmllbGRzLnNldChuYW1lLCB2YWx1ZSk7CiAKLSAgICBpZiAodXJsKCkucHJvdG9jb2xJc0luSFRU
UEZhbWlseSgpKQotICAgICAgICBtX3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQgPSBmYWxzZTsKKyAg
ICBtX3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQgPSBmYWxzZTsKIH0KIAogdm9pZCBSZXNvdXJjZVJl
cXVlc3RCYXNlOjpjbGVhckhUVFBBdXRob3JpemF0aW9uKCkKQEAgLTI2MCw4ICsyNTUsNyBAQCB2
b2lkIFJlc291cmNlUmVxdWVzdEJhc2U6OmNsZWFySFRUUEF1dGhvCiAgICAgaWYgKCFtX2h0dHBI
ZWFkZXJGaWVsZHMucmVtb3ZlKEhUVFBIZWFkZXJOYW1lOjpBdXRob3JpemF0aW9uKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgaWYgKHVybCgpLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkKLSAg
ICAgICAgbV9wbGF0Zm9ybVJlcXVlc3RVcGRhdGVkID0gZmFsc2U7CisgICAgbV9wbGF0Zm9ybVJl
cXVlc3RVcGRhdGVkID0gZmFsc2U7CiB9CiAKIFN0cmluZyBSZXNvdXJjZVJlcXVlc3RCYXNlOjpo
dHRwQ29udGVudFR5cGUoKSBjb25zdApAQCAtMjgwLDggKzI3NCw3IEBAIHZvaWQgUmVzb3VyY2VS
ZXF1ZXN0QmFzZTo6Y2xlYXJIVFRQQ29udGUKIAogICAgIG1faHR0cEhlYWRlckZpZWxkcy5yZW1v
dmUoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRUeXBlKTsKIAotICAgIGlmICh1cmwoKS5wcm90b2Nv
bElzSW5IVFRQRmFtaWx5KCkpCi0gICAgICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZh
bHNlOworICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOwogfQogCiBTdHJpbmcg
UmVzb3VyY2VSZXF1ZXN0QmFzZTo6aHR0cFJlZmVycmVyKCkgY29uc3QKQEAgLTMwNSw4ICsyOTgs
NyBAQCB2b2lkIFJlc291cmNlUmVxdWVzdEJhc2U6OmNsZWFySFRUUFJlZmVyCiAKICAgICBtX2h0
dHBIZWFkZXJGaWVsZHMucmVtb3ZlKEhUVFBIZWFkZXJOYW1lOjpSZWZlcmVyKTsKIAotICAgIGlm
ICh1cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCi0gICAgICAgIG1fcGxhdGZvcm1SZXF1
ZXN0VXBkYXRlZCA9IGZhbHNlOworICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNl
OwogfQogCiBTdHJpbmcgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6aHR0cE9yaWdpbigpIGNvbnN0CkBA
IC0zMzAsOCArMzIyLDcgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpjbGVhckhUVFBPcmln
aQogCiAgICAgbV9odHRwSGVhZGVyRmllbGRzLnJlbW92ZShIVFRQSGVhZGVyTmFtZTo6T3JpZ2lu
KTsKIAotICAgIGlmICh1cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCi0gICAgICAgIG1f
cGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOworICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBk
YXRlZCA9IGZhbHNlOwogfQogCiBib29sIFJlc291cmNlUmVxdWVzdEJhc2U6Omhhc0hUVFBIZWFk
ZXIoSFRUUEhlYWRlck5hbWUgbmFtZSkgY29uc3QKQEAgLTM1NSw4ICszNDYsNyBAQCB2b2lkIFJl
c291cmNlUmVxdWVzdEJhc2U6OmNsZWFySFRUUFVzZXJBCiAKICAgICBtX2h0dHBIZWFkZXJGaWVs
ZHMucmVtb3ZlKEhUVFBIZWFkZXJOYW1lOjpVc2VyQWdlbnQpOwogCi0gICAgaWYgKHVybCgpLnBy
b3RvY29sSXNJbkhUVFBGYW1pbHkoKSkKLSAgICAgICAgbV9wbGF0Zm9ybVJlcXVlc3RVcGRhdGVk
ID0gZmFsc2U7CisgICAgbV9wbGF0Zm9ybVJlcXVlc3RVcGRhdGVkID0gZmFsc2U7CiB9CiAKIFN0
cmluZyBSZXNvdXJjZVJlcXVlc3RCYXNlOjpodHRwQWNjZXB0KCkgY29uc3QKQEAgLTM3NSw4ICsz
NjUsNyBAQCB2b2lkIFJlc291cmNlUmVxdWVzdEJhc2U6OmNsZWFySFRUUEFjY2VwCiAKICAgICBt
X2h0dHBIZWFkZXJGaWVsZHMucmVtb3ZlKEhUVFBIZWFkZXJOYW1lOjpBY2NlcHQpOwogCi0gICAg
aWYgKHVybCgpLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkKLSAgICAgICAgbV9wbGF0Zm9ybVJl
cXVlc3RVcGRhdGVkID0gZmFsc2U7CisgICAgbV9wbGF0Zm9ybVJlcXVlc3RVcGRhdGVkID0gZmFs
c2U7CiB9CiAKIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6Y2xlYXJIVFRQQWNjZXB0RW5jb2Rp
bmcoKQpAQCAtMzg1LDggKzM3NCw3IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6Y2xlYXJI
VFRQQWNjZXAKIAogICAgIG1faHR0cEhlYWRlckZpZWxkcy5yZW1vdmUoSFRUUEhlYWRlck5hbWU6
OkFjY2VwdEVuY29kaW5nKTsKIAotICAgIGlmICh1cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5
KCkpCi0gICAgICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOworICAgIG1fcGxh
dGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOwogfQogCiB2b2lkIFJlc291cmNlUmVxdWVzdEJh
c2U6OnNldFJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5KGNv
bnN0IFN0cmluZyYgZW5jb2RpbmcxLCBjb25zdCBTdHJpbmcmIGVuY29kaW5nMiwgY29uc3QgU3Ry
aW5nJiBlbmNvZGluZzMpCkBAIC00MDIsOCArMzkwLDcgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3RC
YXNlOjpzZXRSZXNwb25zZUNvbgogICAgIGlmICghZW5jb2RpbmczLmlzTnVsbCgpKQogICAgICAg
ICBtX3Jlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5LnVuY2hl
Y2tlZEFwcGVuZChlbmNvZGluZzMpOwogICAgIAotICAgIGlmICh1cmwoKS5wcm90b2NvbElzSW5I
VFRQRmFtaWx5KCkpCi0gICAgICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOwor
ICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOwogfQogCiBGb3JtRGF0YSogUmVz
b3VyY2VSZXF1ZXN0QmFzZTo6aHR0cEJvZHkoKSBjb25zdApAQCAtNDIxLDggKzQwOCw3IEBAIHZv
aWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6c2V0SFRUUEJvZHkoUmUKIAogICAgIG1fcmVzb3VyY2VS
ZXF1ZXN0Qm9keVVwZGF0ZWQgPSB0cnVlOwogCi0gICAgaWYgKHVybCgpLnByb3RvY29sSXNJbkhU
VFBGYW1pbHkoKSkKLSAgICAgICAgbV9wbGF0Zm9ybVJlcXVlc3RCb2R5VXBkYXRlZCA9IGZhbHNl
OworICAgIG1fcGxhdGZvcm1SZXF1ZXN0Qm9keVVwZGF0ZWQgPSBmYWxzZTsKIH0KIAogYm9vbCBS
ZXNvdXJjZVJlcXVlc3RCYXNlOjphbGxvd0Nvb2tpZXMoKSBjb25zdApAQCAtNDQxLDggKzQyNyw3
IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6c2V0QWxsb3dDb29raWUKIAogICAgIG1fYWxs
b3dDb29raWVzID0gYWxsb3dDb29raWVzOwogICAgIAotICAgIGlmICh1cmwoKS5wcm90b2NvbElz
SW5IVFRQRmFtaWx5KCkpCi0gICAgICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNl
OworICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOwogfQogCiBSZXNvdXJjZUxv
YWRQcmlvcml0eSBSZXNvdXJjZVJlcXVlc3RCYXNlOjpwcmlvcml0eSgpIGNvbnN0CkBAIC00NjEs
OCArNDQ2LDcgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpzZXRQcmlvcml0eShSZQogCiAg
ICAgbV9wcmlvcml0eSA9IHByaW9yaXR5OwogCi0gICAgaWYgKHVybCgpLnByb3RvY29sSXNJbkhU
VFBGYW1pbHkoKSkKLSAgICAgICAgbV9wbGF0Zm9ybVJlcXVlc3RVcGRhdGVkID0gZmFsc2U7Cisg
ICAgbV9wbGF0Zm9ybVJlcXVlc3RVcGRhdGVkID0gZmFsc2U7CiB9CiAKIHZvaWQgUmVzb3VyY2VS
ZXF1ZXN0QmFzZTo6YWRkSFRUUEhlYWRlckZpZWxkSWZOb3RQcmVzZW50KEhUVFBIZWFkZXJOYW1l
IG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCkBAIC00NzIsOCArNDU2LDcgQEAgdm9pZCBSZXNv
dXJjZVJlcXVlc3RCYXNlOjphZGRIVFRQSGVhZGVyRgogICAgIGlmICghbV9odHRwSGVhZGVyRmll
bGRzLmFkZElmTm90UHJlc2VudChuYW1lLCB2YWx1ZSkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGlmICh1cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCi0gICAgICAgIG1fcGxhdGZvcm1S
ZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOworICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZh
bHNlOwogfQogCiB2b2lkIFJlc291cmNlUmVxdWVzdEJhc2U6OmFkZEhUVFBIZWFkZXJGaWVsZChI
VFRQSGVhZGVyTmFtZSBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQpAQCAtNDgyLDggKzQ2NSw3
IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6YWRkSFRUUEhlYWRlckYKIAogICAgIG1faHR0
cEhlYWRlckZpZWxkcy5hZGQobmFtZSwgdmFsdWUpOwogCi0gICAgaWYgKHVybCgpLnByb3RvY29s
SXNJbkhUVFBGYW1pbHkoKSkKLSAgICAgICAgbV9wbGF0Zm9ybVJlcXVlc3RVcGRhdGVkID0gZmFs
c2U7CisgICAgbV9wbGF0Zm9ybVJlcXVlc3RVcGRhdGVkID0gZmFsc2U7CiB9CiAKIHZvaWQgUmVz
b3VyY2VSZXF1ZXN0QmFzZTo6YWRkSFRUUEhlYWRlckZpZWxkKGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKQEAgLTQ5Miw4ICs0NzQsNyBAQCB2b2lkIFJlc291cmNlUmVx
dWVzdEJhc2U6OmFkZEhUVFBIZWFkZXJGCiAKICAgICBtX2h0dHBIZWFkZXJGaWVsZHMuYWRkKG5h
bWUsIHZhbHVlKTsKIAotICAgIGlmICh1cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCi0g
ICAgICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOworICAgIG1fcGxhdGZvcm1S
ZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOwogfQogCiBib29sIFJlc291cmNlUmVxdWVzdEJhc2U6Omhh
c0hUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZSBoZWFkZXJOYW1lKSBjb25zdApAQCAtNTA3
LDggKzQ4OCw3IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6c2V0SFRUUEhlYWRlckYKIAog
ICAgIG1faHR0cEhlYWRlckZpZWxkcyA9IFdURk1vdmUoaGVhZGVyRmllbGRzKTsKIAotICAgIGlm
ICh1cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCi0gICAgICAgIG1fcGxhdGZvcm1SZXF1
ZXN0VXBkYXRlZCA9IGZhbHNlOworICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNl
OwogfQogCiBib29sIGVxdWFsSWdub3JpbmdIZWFkZXJGaWVsZHMoY29uc3QgUmVzb3VyY2VSZXF1
ZXN0QmFzZSYgYSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0QmFzZSYgYikKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAyMjI3MTUpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDIzIEBACisyMDE3LTEwLTAyICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlz
dGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQXBwbHkgY3VzdG9tIGhlYWRlcnMgdG8gc2Ft
ZS1vcmlnaW4gcmVxdWVzdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3NzYyOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZVBvbGljaWVzLmNwcDoKKyAgICAg
ICAgKFdLV2Vic2l0ZVBvbGljaWVzQ29weUN1c3RvbUhlYWRlckZpZWxkcyk6CisgICAgICAgIChX
S1dlYnNpdGVQb2xpY2llc1NldEN1c3RvbUhlYWRlckZpZWxkcyk6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9DL1dLV2Vic2l0ZVBvbGljaWVzLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9D
b2NvYS9fV0tXZWJzaXRlUG9saWNpZXMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29h
L19XS1dlYnNpdGVQb2xpY2llcy5tbToKKyAgICAgICAgKC1bX1dLV2Vic2l0ZVBvbGljaWVzIGN1
c3RvbUhlYWRlckZpZWxkc10pOgorICAgICAgICAoLVtfV0tXZWJzaXRlUG9saWNpZXMgc2V0Q3Vz
dG9tSGVhZGVyRmllbGRzOl0pOgorCisgICAgICAgIE1ha2UgdGhlIFNQSSBmb3Igc2V0dGluZyBj
dXN0b20gaGVhZGVyIGZpZWxkcyB0YWtlIGEgZGljdGlvbmFyeTxTdHJpbmcsIFN0cmluZz4KKyAg
ICAgICAgaW5zdGVhZCBvZiBhbiBhcnJheSBvZiBTdHJpbmdzIHdpdGggY29sb25zLiBUaGlzIG1h
dGNoZXMgTlNVUkxSZXF1ZXN0IGFuZCBvdGhlcgorICAgICAgICBBUElzIHRoYXQgZGVhbCB3aXRo
IGhlYWRlciBmaWVsZHMuCisKIDIwMTctMTAtMDIgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0
ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBFeHBvc2UgbW9yZSBXS1ByZWZlcmVuY2VzIFNQ
SSB0byBtYXRjaCBDIFNQSQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tX
ZWJzaXRlUG9saWNpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9DL1dLV2Vic2l0ZVBvbGljaWVzLmNwcAkocmV2aXNpb24gMjIyNzA4KQorKysgU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlUG9saWNpZXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiwxMCArMjYsMTIgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJX
S1dlYnNpdGVQb2xpY2llcy5oIgogCi0jaW5jbHVkZSAiQVBJQXJyYXkuaCIKKyNpbmNsdWRlICJB
UElEaWN0aW9uYXJ5LmgiCiAjaW5jbHVkZSAiQVBJV2Vic2l0ZVBvbGljaWVzLmgiCiAjaW5jbHVk
ZSAiV0tBUElDYXN0LmgiCiAjaW5jbHVkZSAiV0tBcnJheS5oIgorI2luY2x1ZGUgIldLRGljdGlv
bmFyeS5oIgorI2luY2x1ZGUgIldLUmV0YWluUHRyLmgiCiAjaW5jbHVkZSAiV2Vic2l0ZVBvbGlj
aWVzLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CkBAIC01NCwyNiArNTYsMjUgQEAgYm9v
bCBXS1dlYnNpdGVQb2xpY2llc0dldENvbnRlbnRCbG9ja2VycwogICAgIHJldHVybiB0b0ltcGwo
d2Vic2l0ZVBvbGljaWVzKS0+Y29udGVudEJsb2NrZXJzRW5hYmxlZCgpOwogfQogCi1XS19FWFBP
UlQgV0tBcnJheVJlZiBXS1dlYnNpdGVQb2xpY2llc0NvcHlDdXN0b21IZWFkZXJGaWVsZHMoV0tX
ZWJzaXRlUG9saWNpZXNSZWYgd2Vic2l0ZVBvbGljaWVzKQorV0tfRVhQT1JUIFdLRGljdGlvbmFy
eVJlZiBXS1dlYnNpdGVQb2xpY2llc0NvcHlDdXN0b21IZWFkZXJGaWVsZHMoV0tXZWJzaXRlUG9s
aWNpZXNSZWYgd2Vic2l0ZVBvbGljaWVzKQogewotICAgIGNvbnN0IGF1dG8mIGZpZWxkcyA9IHRv
SW1wbCh3ZWJzaXRlUG9saWNpZXMpLT5jdXN0b21IZWFkZXJGaWVsZHMoKTsKLSAgICBWZWN0b3I8
UmVmUHRyPEFQSTo6T2JqZWN0Pj4gc3RyaW5nczsKLSAgICBzdHJpbmdzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkoZmllbGRzLnNpemUoKSk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBmaWVsZCA6IGZp
ZWxkcykKLSAgICAgICAgc3RyaW5ncy51bmNoZWNrZWRBcHBlbmQoQVBJOjpTdHJpbmc6OmNyZWF0
ZShmaWVsZC5maWVsZCgpKSk7Ci0gICAgcmV0dXJuIHRvQVBJKEFQSTo6QXJyYXk6OmNyZWF0ZShX
VEZNb3ZlKHN0cmluZ3MpKS5wdHIoKSk7CisgICAgSGFzaE1hcDxXVEY6OlN0cmluZywgUmVmUHRy
PEFQSTo6T2JqZWN0Pj4gZmllbGRzOworICAgIGZvciAoY29uc3QgYXV0byYgZmllbGQgOiB0b0lt
cGwod2Vic2l0ZVBvbGljaWVzKS0+Y3VzdG9tSGVhZGVyRmllbGRzKCkpCisgICAgICAgIGZpZWxk
cy5hZGQoZmllbGQubmFtZSgpLCBBUEk6OlN0cmluZzo6Y3JlYXRlKGZpZWxkLnZhbHVlKCkpKTsK
KyAgICByZXR1cm4gdG9BUEkoQVBJOjpEaWN0aW9uYXJ5OjpjcmVhdGUoV1RGTW92ZShmaWVsZHMp
KS5wdHIoKSk7CiB9CiAKLVdLX0VYUE9SVCB2b2lkIFdLV2Vic2l0ZVBvbGljaWVzU2V0Q3VzdG9t
SGVhZGVyRmllbGRzKFdLV2Vic2l0ZVBvbGljaWVzUmVmIHdlYnNpdGVQb2xpY2llcywgV0tBcnJh
eVJlZiBhcnJheSkKK1dLX0VYUE9SVCB2b2lkIFdLV2Vic2l0ZVBvbGljaWVzU2V0Q3VzdG9tSGVh
ZGVyRmllbGRzKFdLV2Vic2l0ZVBvbGljaWVzUmVmIHdlYnNpdGVQb2xpY2llcywgV0tEaWN0aW9u
YXJ5UmVmIGRpY3Rpb25hcnkpCiB7Ci0gICAgc2l6ZV90IGxlbmd0aCA9IFdLQXJyYXlHZXRTaXpl
KGFycmF5KTsKKyAgICBhdXRvIGtleXMgPSBhZG9wdFdLKFdLRGljdGlvbmFyeUNvcHlLZXlzKGRp
Y3Rpb25hcnkpKTsKKyAgICBzaXplX3QgbGVuZ3RoID0gV0tBcnJheUdldFNpemUoa2V5cy5nZXQo
KSk7CiAgICAgVmVjdG9yPFdlYkNvcmU6OkhUVFBIZWFkZXJGaWVsZD4gZmllbGRzOwogICAgIGZp
ZWxkcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCk7CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBXZWJDb3JlOjpIVFRQSGVhZGVyRmllbGQg
cGFyc2VkRmllbGQodG9JbXBsKHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0FycmF5R2V0SXRl
bUF0SW5kZXgoYXJyYXksIGkpKSktPnN0cmluZygpKTsKLSAgICAgICAgaWYgKCFwYXJzZWRGaWVs
ZC5maWVsZCgpLmlzTnVsbCgpCi0gICAgICAgICAgICAmJiBwYXJzZWRGaWVsZC5maWVsZCgpLnN0
YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZSgiWC0iKSkgLy8gTGV0J3MganVzdCBwcmV0ZW5kIFJG
QzY2NDggbmV2ZXIgaGFwcGVuZWQuCi0gICAgICAgICAgICBmaWVsZHMudW5jaGVja2VkQXBwZW5k
KFdURk1vdmUocGFyc2VkRmllbGQpKTsKKyAgICAgICAgV0tTdHJpbmdSZWYgbmFtZSA9IHN0YXRp
Y19jYXN0PFdLU3RyaW5nUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgoa2V5cy5nZXQoKSwgaSkp
OworICAgICAgICBhdXRvIGZpZWxkID0gV2ViQ29yZTo6SFRUUEhlYWRlckZpZWxkOjpjcmVhdGUo
dG9JbXBsKG5hbWUpLT5zdHJpbmcoKSwgdG9JbXBsKHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KGRpY3Rpb25hcnksIG5hbWUpKSktPnN0cmluZygpKTsK
KyAgICAgICAgaWYgKGZpZWxkICYmIGZpZWxkLT5uYW1lKCkuc3RhcnRzV2l0aElnbm9yaW5nQVND
SUlDYXNlKCJYLSIpKQorICAgICAgICAgICAgZmllbGRzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3Zl
KCpmaWVsZCkpOwogICAgIH0KICAgICB0b0ltcGwod2Vic2l0ZVBvbGljaWVzKS0+c2V0Q3VzdG9t
SGVhZGVyRmllbGRzKFdURk1vdmUoZmllbGRzKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVQb2xpY2llcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZVBvbGljaWVzLmgJKHJldmlzaW9uIDIyMjcw
OCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZVBvbGljaWVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUxLDggKzUxLDggQEAgV0tfRVhQT1JUIFdLV2Vic2l0ZVBvbGlj
aWVzUmVmIFdLV2Vic2l0ZQogV0tfRVhQT1JUIGJvb2wgV0tXZWJzaXRlUG9saWNpZXNHZXRDb250
ZW50QmxvY2tlcnNFbmFibGVkKFdLV2Vic2l0ZVBvbGljaWVzUmVmKTsKIFdLX0VYUE9SVCB2b2lk
IFdLV2Vic2l0ZVBvbGljaWVzU2V0Q29udGVudEJsb2NrZXJzRW5hYmxlZChXS1dlYnNpdGVQb2xp
Y2llc1JlZiwgYm9vbCk7CiAKLVdLX0VYUE9SVCBXS0FycmF5UmVmIFdLV2Vic2l0ZVBvbGljaWVz
Q29weUN1c3RvbUhlYWRlckZpZWxkcyhXS1dlYnNpdGVQb2xpY2llc1JlZik7Ci1XS19FWFBPUlQg
dm9pZCBXS1dlYnNpdGVQb2xpY2llc1NldEN1c3RvbUhlYWRlckZpZWxkcyhXS1dlYnNpdGVQb2xp
Y2llc1JlZiwgV0tBcnJheVJlZik7CitXS19FWFBPUlQgV0tEaWN0aW9uYXJ5UmVmIFdLV2Vic2l0
ZVBvbGljaWVzQ29weUN1c3RvbUhlYWRlckZpZWxkcyhXS1dlYnNpdGVQb2xpY2llc1JlZik7CitX
S19FWFBPUlQgdm9pZCBXS1dlYnNpdGVQb2xpY2llc1NldEN1c3RvbUhlYWRlckZpZWxkcyhXS1dl
YnNpdGVQb2xpY2llc1JlZiwgV0tEaWN0aW9uYXJ5UmVmKTsKIAogV0tfRVhQT1JUIFdLV2Vic2l0
ZUF1dG9wbGF5UXVpcmsgV0tXZWJzaXRlUG9saWNpZXNHZXRBbGxvd2VkQXV0b3BsYXlRdWlya3Mo
V0tXZWJzaXRlUG9saWNpZXNSZWYpOwogV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlUG9saWNpZXNT
ZXRBbGxvd2VkQXV0b3BsYXlRdWlya3MoV0tXZWJzaXRlUG9saWNpZXNSZWYsIFdLV2Vic2l0ZUF1
dG9wbGF5UXVpcmspOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19X
S1dlYnNpdGVQb2xpY2llcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9fV0tXZWJzaXRlUG9saWNpZXMuaAkocmV2aXNpb24gMjIyNzA4KQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYnNpdGVQb2xpY2llcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIFdLX0NMQVNTX0FWQUlMQUJMRShtYWNvc3goMTAu
MTIuMyksIGlvcygKIEBwcm9wZXJ0eSAobm9uYXRvbWljKSBCT09MIGNvbnRlbnRCbG9ja2Vyc0Vu
YWJsZWQ7CiBAcHJvcGVydHkgKG5vbmF0b21pYykgX1dLV2Vic2l0ZUF1dG9wbGF5UXVpcmsgYWxs
b3dlZEF1dG9wbGF5UXVpcmtzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3N4KDEwLjEzKSwgaW9zKDEx
LjApKTsKIEBwcm9wZXJ0eSAobm9uYXRvbWljKSBfV0tXZWJzaXRlQXV0b3BsYXlQb2xpY3kgYXV0
b3BsYXlQb2xpY3kgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goMTAuMTMpLCBpb3MoMTEuMCkpOwot
QHByb3BlcnR5IChub25hdG9taWMsIGNvcHksIHNldHRlcj1zZXRDdXN0b21IZWFkZXJGaWVsZHM6
KSBOU0FycmF5PE5TU3RyaW5nICo+ICpjdXN0b21IZWFkZXJGaWVsZHMgV0tfQVBJX0FWQUlMQUJM
RShtYWNvc3goV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CitAcHJvcGVydHkgKG5vbmF0
b21pYywgY29weSwgc2V0dGVyPXNldEN1c3RvbUhlYWRlckZpZWxkczopIE5TRGljdGlvbmFyeTxO
U1N0cmluZyAqLCBOU1N0cmluZyAqPiAqY3VzdG9tSGVhZGVyRmllbGRzIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3N4KFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogCiBAZW5kCiAKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tXZWJzaXRlUG9saWNpZXMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYnNp
dGVQb2xpY2llcy5tbQkocmV2aXNpb24gMjIyNzA4KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL19XS1dlYnNpdGVQb2xpY2llcy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTE2
LDI0ICsxMTYsMjQgQEAgLSAoX1dLV2Vic2l0ZUF1dG9wbGF5UG9saWN5KWF1dG9wbGF5UG9saQog
ICAgIH0KIH0KIAotLSAoTlNBcnJheTxOU1N0cmluZyAqPiAqKWN1c3RvbUhlYWRlckZpZWxkcwor
LSAoTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIE5TU3RyaW5nICo+ICopY3VzdG9tSGVhZGVyRmll
bGRzCiB7CiAgICAgY29uc3QgYXV0byYgZmllbGRzID0gX3dlYnNpdGVQb2xpY2llcy0+Y3VzdG9t
SGVhZGVyRmllbGRzKCk7Ci0gICAgTlNNdXRhYmxlQXJyYXkgKmFycmF5ID0gW1tbTlNNdXRhYmxl
QXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6ZmllbGRzLnNpemUoKV0gYXV0b3JlbGVhc2Vd
OworICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKmRpY3Rpb25hcnkgPSBbW1tOU011dGFibGVEaWN0
aW9uYXJ5IGFsbG9jXSBpbml0V2l0aENhcGFjaXR5OmZpZWxkcy5zaXplKCldIGF1dG9yZWxlYXNl
XTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGZpZWxkIDogZmllbGRzKQotICAgICAgICBbYXJyYXkg
YWRkT2JqZWN0OmZpZWxkLmZpZWxkKCldOwotICAgIHJldHVybiBhcnJheTsKKyAgICAgICAgW2Rp
Y3Rpb25hcnkgc2V0T2JqZWN0OmZpZWxkLnZhbHVlKCkgZm9yS2V5OmZpZWxkLm5hbWUoKV07Cisg
ICAgcmV0dXJuIGRpY3Rpb25hcnk7CiB9CiAKLS0gKHZvaWQpc2V0Q3VzdG9tSGVhZGVyRmllbGRz
OihOU0FycmF5PE5TU3RyaW5nICo+ICopZmllbGRzCistICh2b2lkKXNldEN1c3RvbUhlYWRlckZp
ZWxkczooTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIE5TU3RyaW5nICo+ICopZmllbGRzCiB7CiAg
ICAgVmVjdG9yPFdlYkNvcmU6OkhUVFBIZWFkZXJGaWVsZD4gcGFyc2VkRmllbGRzOwogICAgIHBh
cnNlZEZpZWxkcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGZpZWxkcy5jb3VudCk7Ci0gICAgZm9y
IChOU1N0cmluZyAqc3RyaW5nIGluIGZpZWxkcykgewotICAgICAgICBXZWJDb3JlOjpIVFRQSGVh
ZGVyRmllbGQgcGFyc2VkRmllbGQoc3RyaW5nKTsKLSAgICAgICAgaWYgKCFwYXJzZWRGaWVsZC5m
aWVsZCgpLmlzTnVsbCgpCi0gICAgICAgICAgICAmJiBwYXJzZWRGaWVsZC5maWVsZCgpLnN0YXJ0
c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZSgiWC0iKSkgLy8gTGV0J3MganVzdCBwcmV0ZW5kIFJGQzY2
NDggbmV2ZXIgaGFwcGVuZWQuCi0gICAgICAgICAgICBwYXJzZWRGaWVsZHMudW5jaGVja2VkQXBw
ZW5kKFdURk1vdmUocGFyc2VkRmllbGQpKTsKKyAgICAKKyAgICBmb3IgKE5TU3RyaW5nKiBuYW1l
IGluIGZpZWxkcykgeworICAgICAgICBhdXRvIGZpZWxkID0gV2ViQ29yZTo6SFRUUEhlYWRlckZp
ZWxkOjpjcmVhdGUobmFtZSwgW2ZpZWxkcyBvYmplY3RGb3JLZXk6bmFtZV0pOworICAgICAgICBp
ZiAoZmllbGQgJiYgZmllbGQtPm5hbWUoKS5zdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoIlgt
IikpCisgICAgICAgICAgICBwYXJzZWRGaWVsZHMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoKmZp
ZWxkKSk7CiAgICAgfQogICAgIF93ZWJzaXRlUG9saWNpZXMtPnNldEN1c3RvbUhlYWRlckZpZWxk
cyhXVEZNb3ZlKHBhcnNlZEZpZWxkcykpOwogfQpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjIyNzE4KQorKysgVG9vbHMvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTctMTAtMDIgIEFsZXgg
Q2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBBcHBseSBj
dXN0b20gaGVhZGVyIGZpZWxkcyB0byBzYW1lLW9yaWdpbiByZXF1ZXN0cworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3NjI5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvSFRUUEhlYWRlckZpZWxkLmNwcDoKKyAgICAgICAgKGNhbm9uaWNhbGl6ZUhUVFBI
ZWFkZXIpOgorICAgICAgICAoc2hvdWxkUmVtYWluVW5jaGFuZ2VkKToKKyAgICAgICAgKHNob3Vs
ZEJlSW52YWxpZCk6CisgICAgICAgIChzaG91bGRCZWNvbWUpOgorICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0ZVBvbGljaWVzLm1tOgorICAgICAgICAoVEVT
VCk6CisgICAgICAgIChleHBlY3RIZWFkZXJzKToKKyAgICAgICAgKC1bQ3VzdG9tSGVhZGVyRmll
bGRzRGVsZWdhdGUgX3dlYlZpZXc6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbjpkZWNp
c2lvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW0N1c3RvbUhlYWRlckZpZWxkc0RlbGVnYXRlIHdl
YlZpZXc6c3RhcnRVUkxTY2hlbWVUYXNrOl0pOgorICAgICAgICAoLVtDdXN0b21IZWFkZXJGaWVs
ZHNEZWxlZ2F0ZSB3ZWJWaWV3OnN0b3BVUkxTY2hlbWVUYXNrOl0pOgorCisgICAgICAgIFRlc3Qg
bWFpbiByZXNvdXJjZSByZXF1ZXN0cywgc3VicmVzb3VyY2UgcmVxdWVzdHMsIGFuZCBjcm9zcy1v
cmlnaW4gcmVxdWVzdHMuCisKIDIwMTctMTAtMDIgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0
ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBGaXggYnVpbGQgYWZ0ZXIgcjIyMjcxNQpJbmRl
eDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0hUVFBIZWFkZXJGaWVsZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0hUVFBIZWFk
ZXJGaWVsZC5jcHAJKHJldmlzaW9uIDIyMjcwOCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViQ29yZS9IVFRQSGVhZGVyRmllbGQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwyMiAr
MjgsMzMgQEAKICNpbmNsdWRlICJUZXN0LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9IVFRQSGVhZGVy
RmllbGQuaD4KIAorc3RhdGljIFN0cmluZyBjYW5vbmljYWxpemVIVFRQSGVhZGVyKGNvbnN0IFN0
cmluZyYgc3RyaW5nKQoreworICAgIHNpemVfdCBjb2xvbkxvY2F0aW9uID0gc3RyaW5nLmZpbmQo
JzonKTsKKyAgICBpZiAoY29sb25Mb2NhdGlvbiA9PSBub3RGb3VuZCkKKyAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICBhdXRvIGZpZWxkID0gV2ViQ29yZTo6SFRUUEhlYWRlckZpZWxkOjpjcmVhdGUo
c3RyaW5nLnN1YnN0cmluZygwLCBjb2xvbkxvY2F0aW9uKSwgc3RyaW5nLnN1YnN0cmluZyhjb2xv
bkxvY2F0aW9uICsgMSkpOworICAgIGlmICghZmllbGQpCisgICAgICAgIHJldHVybiB7IH07Cisg
ICAgcmV0dXJuIG1ha2VTdHJpbmcoZmllbGQtPm5hbWUoKSwgIjogIiwgZmllbGQtPnZhbHVlKCkp
OworfQorCiBzdGF0aWMgdm9pZCBzaG91bGRSZW1haW5VbmNoYW5nZWQoVmVjdG9yPFN0cmluZz4m
JiBzdHJpbmdzKQogewogICAgIGZvciAoY29uc3QgYXV0byYgc3RyaW5nIDogc3RyaW5ncykKLSAg
ICAgICAgRVhQRUNUX1RSVUUoV2ViQ29yZTo6SFRUUEhlYWRlckZpZWxkKHN0cmluZykuZmllbGQo
KSA9PSBzdHJpbmcpOworICAgICAgICBFWFBFQ1RfVFJVRShjYW5vbmljYWxpemVIVFRQSGVhZGVy
KHN0cmluZykgPT0gc3RyaW5nKTsKIH0KIAogc3RhdGljIHZvaWQgc2hvdWxkQmVJbnZhbGlkKFZl
Y3RvcjxTdHJpbmc+JiYgc3RyaW5ncykKIHsKICAgICBmb3IgKGNvbnN0IGF1dG8mIHN0cmluZyA6
IHN0cmluZ3MpCi0gICAgICAgIEVYUEVDVF9UUlVFKFdlYkNvcmU6OkhUVFBIZWFkZXJGaWVsZChz
dHJpbmcpLmZpZWxkKCkgPT0gU3RyaW5nKCkpOworICAgICAgICBFWFBFQ1RfVFJVRShjYW5vbmlj
YWxpemVIVFRQSGVhZGVyKHN0cmluZykgPT0gU3RyaW5nKCkpOwogfQogCiBzdGF0aWMgdm9pZCBz
aG91bGRCZWNvbWUoVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+JiYgcGFpcnMpCiB7
CiAgICAgZm9yIChjb25zdCBhdXRvJiBwYWlyIDogcGFpcnMpCi0gICAgICAgIEVYUEVDVF9UUlVF
KFdlYkNvcmU6OkhUVFBIZWFkZXJGaWVsZChwYWlyLmZpcnN0KS5maWVsZCgpID09IHBhaXIuc2Vj
b25kKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoY2Fub25pY2FsaXplSFRUUEhlYWRlcihwYWlyLmZp
cnN0KSA9PSBwYWlyLnNlY29uZCk7CiB9CiAKIFRFU1QoSFRUUEhlYWRlckZpZWxkLCBQYXJzZXIp
CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYnNpdGVQb2xp
Y2llcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL1dlYnNpdGVQb2xpY2llcy5tbQkocmV2aXNpb24gMjIyNzA4KQorKysgVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRlUG9saWNpZXMubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKICNp
bXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKKyNpbXBvcnQgPFdlYktpdC9XS05hdmlnYXRpb25EZWxl
Z2F0ZVByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1BhZ2VQcml2YXRlLmg+CiAjaW1wb3J0
IDxXZWJLaXQvV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaD4KICNpbXBvcnQgPFdlYktpdC9XS1VJ
RGVsZWdhdGVQcml2YXRlLmg+CkBAIC02MjcsMTMgKzYyOCw5NyBAQCBURVNUKFdlYktpdCwgV2Vi
c2l0ZVBvbGljaWVzQXV0b3BsYXlRdWlyCiBURVNUKFdlYktpdCwgSW52YWxpZEN1c3RvbUhlYWRl
cnMpCiB7CiAgICAgYXV0byB3ZWJzaXRlUG9saWNpZXMgPSBhZG9wdE5TKFtbX1dLV2Vic2l0ZVBv
bGljaWVzIGFsbG9jXSBpbml0XSk7Ci0gICAgW3dlYnNpdGVQb2xpY2llcyBzZXRDdXN0b21IZWFk
ZXJGaWVsZHM6QFtAImludmFsaWRoZWFkZXI6IiwgQCJub25jdXN0b206IGhlYWRlciIsIEAiWC1j
dXN0b206IGhlYWRlciIsIEAiICAgIHgtQ3VzdG9tIDogIE5lZWRzIENhbm9uaWNhbGl6YXRpb25c
dCAiXV07Ci0gICAgTlNBcnJheTxOU1N0cmluZyAqPiAqY2Fub25pY2FsaXplZCA9IFt3ZWJzaXRl
UG9saWNpZXMgY3VzdG9tSGVhZGVyRmllbGRzXTsKKyAgICBbd2Vic2l0ZVBvbGljaWVzIHNldEN1
c3RvbUhlYWRlckZpZWxkczpAe0AiaW52YWxpZGhlYWRlciIgOiBAIiIsIEAibm9uY3VzdG9tIiA6
IEAiaGVhZGVyIiwgQCIgICAgeC1DdXN0b20gIjpAIiAgTmVlZHMgQ2Fub25pY2FsaXphdGlvblx0
ICIsIEAieC1vdGhlciIgOiBAIm90aGVyIHZhbHVlIn1dOworICAgIE5TRGljdGlvbmFyeTxOU1N0
cmluZyAqLCBOU1N0cmluZyAqPiAqY2Fub25pY2FsaXplZCA9IFt3ZWJzaXRlUG9saWNpZXMgY3Vz
dG9tSGVhZGVyRmllbGRzXTsKICAgICBFWFBFQ1RfRVEoY2Fub25pY2FsaXplZC5jb3VudCwgMnUp
OwotICAgIEVYUEVDVF9TVFJFUShbY2Fub25pY2FsaXplZCBvYmplY3RBdEluZGV4OjBdLlVURjhT
dHJpbmcsICJYLWN1c3RvbTogaGVhZGVyIik7Ci0gICAgRVhQRUNUX1NUUkVRKFtjYW5vbmljYWxp
emVkIG9iamVjdEF0SW5kZXg6MV0uVVRGOFN0cmluZywgIngtQ3VzdG9tOiBOZWVkcyBDYW5vbmlj
YWxpemF0aW9uIik7CisgICAgRVhQRUNUX1NUUkVRKFtjYW5vbmljYWxpemVkIG9iamVjdEZvcktl
eTpAIngtQ3VzdG9tIl0uVVRGOFN0cmluZywgIk5lZWRzIENhbm9uaWNhbGl6YXRpb24iKTsKKyAg
ICBFWFBFQ1RfU1RSRVEoW2Nhbm9uaWNhbGl6ZWQgb2JqZWN0Rm9yS2V5OkAieC1vdGhlciJdLlVU
RjhTdHJpbmcsICJvdGhlciB2YWx1ZSIpOwogfQogCi0vLyBGSVhNRTogQXBwbHkgdGhlIGN1c3Rv
bSBoZWFkZXJzIGZyb20gdGhlIERvY3VtZW50TG9hZGVyIHRvIGVhY2ggcmVxdWVzdCBhbmQgdGVz
dCB0aGF0IHRoZXkgYXJlIHNlbnQgb24gbWFpbiByZXNvdXJjZSBhbmQgc3VicmVzb3VyY2VzLgor
c3RhdGljIGJvb2wgZmlyc3RUZXN0RG9uZTsKK3N0YXRpYyBib29sIHNlY29uZFRlc3REb25lOwor
CitzdGF0aWMgdm9pZCBleHBlY3RIZWFkZXJzKGlkIDxXS1VSTFNjaGVtZVRhc2s+IHRhc2ssIGJv
b2wgZXhwZWN0ZWQpCit7CisgICAgTlNVUkxSZXF1ZXN0ICpyZXF1ZXN0ID0gdGFzay5yZXF1ZXN0
OworICAgIGlmIChleHBlY3RlZCkgeworICAgICAgICBFWFBFQ1RfU1RSRVEoW1tyZXF1ZXN0IHZh
bHVlRm9ySFRUUEhlYWRlckZpZWxkOkAiWC1rZXkxIl0gVVRGOFN0cmluZ10sICJ2YWx1ZTEiKTsK
KyAgICAgICAgRVhQRUNUX1NUUkVRKFtbcmVxdWVzdCB2YWx1ZUZvckhUVFBIZWFkZXJGaWVsZDpA
Ilgta2V5MiJdIFVURjhTdHJpbmddLCAidmFsdWUyIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
RVhQRUNUX1RSVUUoW3JlcXVlc3QgdmFsdWVGb3JIVFRQSGVhZGVyRmllbGQ6QCJYLWtleTEiXSA9
PSBuaWwpOworICAgICAgICBFWFBFQ1RfVFJVRShbcmVxdWVzdCB2YWx1ZUZvckhUVFBIZWFkZXJG
aWVsZDpAIlgta2V5MiJdID09IG5pbCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCByZXNwb25k
KGlkIDxXS1VSTFNjaGVtZVRhc2s+dGFzaywgTlNTdHJpbmcgKmh0bWwgPSBuaWwpCit7CisgICAg
W3Rhc2sgZGlkUmVjZWl2ZVJlc3BvbnNlOltbW05TVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRo
VVJMOnRhc2sucmVxdWVzdC5VUkwgTUlNRVR5cGU6QCJ0ZXh0L2h0bWwiIGV4cGVjdGVkQ29udGVu
dExlbmd0aDpodG1sLmxlbmd0aCB0ZXh0RW5jb2RpbmdOYW1lOm5pbF0gYXV0b3JlbGVhc2VdXTsK
KyAgICBbdGFzayBkaWRSZWNlaXZlRGF0YTpbaHRtbCBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhT
dHJpbmdFbmNvZGluZ11dOworICAgIFt0YXNrIGRpZEZpbmlzaF07Cit9CisKK0BpbnRlcmZhY2Ug
Q3VzdG9tSGVhZGVyRmllbGRzRGVsZWdhdGUgOiBOU09iamVjdCA8V0tOYXZpZ2F0aW9uRGVsZWdh
dGVQcml2YXRlLCBXS1VSTFNjaGVtZUhhbmRsZXI+CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBD
dXN0b21IZWFkZXJGaWVsZHNEZWxlZ2F0ZQorCistICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcg
Kil3ZWJWaWV3IGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb246KFdLTmF2aWdhdGlvbkFj
dGlvbiAqKW5hdmlnYXRpb25BY3Rpb24gZGVjaXNpb25IYW5kbGVyOih2b2lkICheKShXS05hdmln
YXRpb25BY3Rpb25Qb2xpY3ksIF9XS1dlYnNpdGVQb2xpY2llcyAqKSlkZWNpc2lvbkhhbmRsZXIK
K3sKKyAgICBfV0tXZWJzaXRlUG9saWNpZXMgKndlYnNpdGVQb2xpY2llcyA9IFtbW19XS1dlYnNp
dGVQb2xpY2llcyBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgIFt3ZWJzaXRlUG9saWNp
ZXMgc2V0Q3VzdG9tSGVhZGVyRmllbGRzOkB7QCJYLWtleTEiOiBAInZhbHVlMSIsIEAiWC1rZXky
IjogQCJ2YWx1ZTIifV07CisgICAgZGVjaXNpb25IYW5kbGVyKFdLTmF2aWdhdGlvbkFjdGlvblBv
bGljeUFsbG93LCB3ZWJzaXRlUG9saWNpZXMpOworfQorCistICh2b2lkKXdlYlZpZXc6KFdLV2Vi
VmlldyAqKXdlYlZpZXcgc3RhcnRVUkxTY2hlbWVUYXNrOihpZCA8V0tVUkxTY2hlbWVUYXNrPil1
cmxTY2hlbWVUYXNrCit7CisgICAgTlNTdHJpbmcgKnBhdGggPSB1cmxTY2hlbWVUYXNrLnJlcXVl
c3QuVVJMLnBhdGg7CisgICAgaWYgKFtwYXRoIGlzRXF1YWxUb1N0cmluZzpAIi9tYWlucmVzb3Vy
Y2UiXSkgeworICAgICAgICBleHBlY3RIZWFkZXJzKHVybFNjaGVtZVRhc2ssIHRydWUpOworICAg
ICAgICByZXNwb25kKHVybFNjaGVtZVRhc2ssIEAiPHNjcmlwdD5mZXRjaCgnc3VicmVzb3VyY2Un
KS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKXtmZXRjaCgndGVzdDovL2RpZmZlcmVudHNlY3VyaXR5
b3JpZ2luL2Nyb3Nzb3JpZ2luc3VicmVzb3VyY2UnLHttb2RlOiduby1jb3JzJ30pfSk8L3Njcmlw
dD4iKTsKKyAgICB9IGVsc2UgaWYgKFtwYXRoIGlzRXF1YWxUb1N0cmluZzpAIi9zdWJyZXNvdXJj
ZSJdKSB7CisgICAgICAgIGV4cGVjdEhlYWRlcnModXJsU2NoZW1lVGFzaywgdHJ1ZSk7CisgICAg
ICAgIHJlc3BvbmQodXJsU2NoZW1lVGFzayk7CisgICAgfSBlbHNlIGlmIChbcGF0aCBpc0VxdWFs
VG9TdHJpbmc6QCIvY3Jvc3NvcmlnaW5zdWJyZXNvdXJjZSJdKSB7CisgICAgICAgIGV4cGVjdEhl
YWRlcnModXJsU2NoZW1lVGFzaywgZmFsc2UpOworICAgICAgICByZXNwb25kKHVybFNjaGVtZVRh
c2spOworICAgICAgICBmaXJzdFRlc3REb25lID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKFtwYXRo
IGlzRXF1YWxUb1N0cmluZzpAIi9tYWlucmVzb3VyY2V3aXRoaWZyYW1lIl0pIHsKKyAgICAgICAg
ZXhwZWN0SGVhZGVycyh1cmxTY2hlbWVUYXNrLCB0cnVlKTsKKyAgICAgICAgcmVzcG9uZCh1cmxT
Y2hlbWVUYXNrLCBAIjxpZnJhbWUgc3JjPSd0ZXN0Oi8vaWZyYW1lb3JpZ2luL2lmcmFtZW1haW5y
ZXNvdXJjZSc+PC9pZnJhbWU+Iik7CisgICAgfSBlbHNlIGlmIChbcGF0aCBpc0VxdWFsVG9TdHJp
bmc6QCIvaWZyYW1lbWFpbnJlc291cmNlIl0pIHsKKyAgICAgICAgZXhwZWN0SGVhZGVycyh1cmxT
Y2hlbWVUYXNrLCBmYWxzZSk7CisgICAgICAgIHJlc3BvbmQodXJsU2NoZW1lVGFzaywgQCI8c2Ny
aXB0PmZldGNoKCdpZnJhbWVzdWJyZXNvdXJjZScpLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2Upe2Zl
dGNoKCd0ZXN0Oi8vbWFpbmZyYW1lb3JpZ2luL29yaWdpbmFsb3JpZ2luc3VicmVzb3VyY2UnLHtt
b2RlOiduby1jb3JzJ30pfSk8L3NjcmlwdD4iKTsKKyAgICB9IGVsc2UgaWYgKFtwYXRoIGlzRXF1
YWxUb1N0cmluZzpAIi9pZnJhbWVzdWJyZXNvdXJjZSJdKSB7CisgICAgICAgIGV4cGVjdEhlYWRl
cnModXJsU2NoZW1lVGFzaywgZmFsc2UpOworICAgICAgICByZXNwb25kKHVybFNjaGVtZVRhc2sp
OworICAgIH0gZWxzZSBpZiAoW3BhdGggaXNFcXVhbFRvU3RyaW5nOkAiL29yaWdpbmFsb3JpZ2lu
c3VicmVzb3VyY2UiXSkgeworICAgICAgICBleHBlY3RIZWFkZXJzKHVybFNjaGVtZVRhc2ssIGZh
bHNlKTsKKyAgICAgICAgcmVzcG9uZCh1cmxTY2hlbWVUYXNrKTsKKyAgICAgICAgc2Vjb25kVGVz
dERvbmUgPSB0cnVlOworICAgIH0gZWxzZQorICAgICAgICBFWFBFQ1RfVFJVRShmYWxzZSk7Cit9
CisKKy0gKHZvaWQpd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBzdG9wVVJMU2NoZW1lVGFz
azooaWQgPFdLVVJMU2NoZW1lVGFzaz4pdXJsU2NoZW1lVGFzaworeworfQorCitAZW5kCisKK1RF
U1QoV2ViS2l0LCBDdXN0b21IZWFkZXJGaWVsZHMpCit7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFk
b3B0TlMoW1tDdXN0b21IZWFkZXJGaWVsZHNEZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGF1
dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9j
XSBpbml0XSk7CisgICAgW2NvbmZpZ3VyYXRpb24gc2V0VVJMU2NoZW1lSGFuZGxlcjpkZWxlZ2F0
ZS5nZXQoKSBmb3JVUkxTY2hlbWU6QCJ0ZXN0Il07CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHRO
UyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwg
NjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKKyAgICBbd2ViVmlldyBz
ZXROYXZpZ2F0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworICAgIFt3ZWJWaWV3IGxvYWRS
ZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6
QCJ0ZXN0Oi8vL21haW5yZXNvdXJjZSJdXV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVu
KCZmaXJzdFRlc3REb25lKTsKKyAgICAKKyAgICB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmll
dyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1
cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKKyAgICBbd2ViVmlldyBzZXROYXZpZ2F0aW9u
RGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VS
TFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJ0ZXN0Oi8vbWFp
bmZyYW1lb3JpZ2luL21haW5yZXNvdXJjZXdpdGhpZnJhbWUiXV1dOworICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnJ1bigmc2Vjb25kVGVzdERvbmUpOworfQogCiAjZW5kaWYgLy8gV0tfQVBJX0VO
QUJMRUQK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>323046</attachid>
            <date>2017-10-06 14:45:18 -0700</date>
            <delta_ts>2017-10-06 15:04:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177629-20171006144518.patch</filename>
            <type>text/plain</type>
            <size>32320</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMjk4OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBACisyMDE3LTEwLTA2ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIG1vcmUg
aW5mcmFzdHJ1Y3R1cmUgdG8gYXBwbHkgY3VzdG9tIGhlYWRlciBmaWVsZHMgdG8gc2FtZS1vcmln
aW4gcmVxdWVzdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3NzYyOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIENvdmVyZWQgYnkgbmV3IEFQSSB0ZXN0cy4KKworICAgICAgICAqIGxvYWRlci9Eb2N1bWVu
dExvYWRlci5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI6OmN1c3RvbUhlYWRl
ckZpZWxkcyk6CisgICAgICAgICogbG9hZGVyL0hUVFBIZWFkZXJGaWVsZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVFRQSGVhZGVyRmllbGQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpI
VFRQSGVhZGVyRmllbGQ6OkhUVFBIZWFkZXJGaWVsZCk6IERlbGV0ZWQuCisgICAgICAgICogbG9h
ZGVyL0hUVFBIZWFkZXJGaWVsZC5oOgorICAgICAgICAoV2ViQ29yZTo6SFRUUEhlYWRlckZpZWxk
OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRUUEhlYWRlckZpZWxkOjpkZWNv
ZGUpOgorICAgICAgICAKKyAgICAgICAgQ2hhbmdlIEhUVFBIZWFkZXJGaWVsZCBmcm9tIG9uZSBT
dHJpbmcgY29udGFpbmluZyB0aGUgbmFtZSBhbmQgdmFsdWUKKyAgICAgICAgdG8gYSBzdHJpbmcg
Zm9yIHRoZSBuYW1lIGFuZCBhbm90aGVyIGZvciB2YWx1ZS4gIFRoaXMgbWF0Y2hlcyBIVFRQSGVh
ZGVyTWFwCisgICAgICAgIGFuZCBOU1VSTFJlcXVlc3QgbW9yZSBjbG9zZWx5IHdoZXJlIG5hbWVz
IGFuZCB2YWx1ZXMgYXJlIHRyZWF0ZWQgYXMgc2VwYXJhdGUgU3RyaW5ncy4KKyAgICAgICAgCisg
ICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0UmVzb3VyY2UpOgorICAgICAg
ICAKKyAgICAgICAgSWYgdGhlIERvY3VtZW50TG9hZGVyIGhhcyBjdXN0b20gaGVhZGVyIGZpZWxk
cyBmcm9tIHRoZSBXZWJzaXRlUG9saWNpZXMsIGFwcGx5IHRoZW0gdG8gYW55IHNhbWUtb3JpZ2lu
IHJlcXVlc3RzLgorICAgICAgICAKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3Vy
Y2VSZXF1ZXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZVJlcXVlc3Q6OnJl
c291cmNlUmVxdWVzdCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVl
c3RCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OnNldENh
Y2hlUG9saWN5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OnNldFRp
bWVvdXRJbnRlcnZhbCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpz
ZXRIVFRQTWV0aG9kKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OnNl
dEhUVFBIZWFkZXJGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNl
OjpjbGVhckhUVFBBdXRob3JpemF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdEJhc2U6OmNsZWFySFRUUENvbnRlbnRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdEJhc2U6OmNsZWFySFRUUFJlZmVycmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdEJhc2U6OmNsZWFySFRUUE9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3RCYXNlOjpjbGVhckhUVFBVc2VyQWdlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6Y2xlYXJIVFRQQWNjZXB0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OmNsZWFySFRUUEFjY2VwdEVuY29kaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OnNldFJlc3BvbnNlQ29udGVudERpc3Bv
c2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdEJhc2U6OnNldEhUVFBCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdEJhc2U6OnNldEFsbG93Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3RCYXNlOjpzZXRQcmlvcml0eSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3RCYXNlOjphZGRIVFRQSGVhZGVyRmllbGRJZk5vdFByZXNlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6YWRkSFRUUEhlYWRlckZpZWxkKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OnNldEhUVFBIZWFkZXJGaWVsZHMpOgorICAgICAg
ICAKKyAgICAgICAgbm9uLUhUVFAvSFRUUFMgUmVzb3VyY2VSZXF1ZXN0cyBuZWVkIHRvIGJlIHVw
ZGF0ZWQsIHRvbywgaWYgaGVhZGVyIGZpZWxkcyBhcmUgYWRkZWQuCisgICAgICAgIFNraXBwaW5n
IHVwZGF0aW5nIG5vbi1IVFRQL0hUVFBTIFJlc291cmNlUmVxdWVzdHMgaXMgbm90IGEgdmFsaWQg
c2hvcnRjdXQsIGFuZCB3aXRoIHRoZQorICAgICAgICBncm93aW5nIGltcG9ydGFuY2Ugb2YgY3Vz
dG9tIHNjaGVtZXMgd2l0aCBvdXIgbmV3IHB1YmxpYyBBUEksIHdlIHNob3VsZCB1cGRhdGUgUmVz
b3VyY2VSZXF1ZXN0cworICAgICAgICBvZiBjdXN0b20gc2NoZW1lcyBjb3JyZWN0bHkuCisKIDIw
MTctMTAtMDYgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIFJl
bW92aW5nIHNvbWUgZGVhZCBjb2RlIGluIFJUQ1BlZXJDb25uZWN0aW9uCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvRG9jdW1lbnRMb2FkZXIuaAkocmV2aXNpb24gMjIyOTg5KQorKysgU291cmNl
L1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5Nyw2
ICsyOTcsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgVmVjdG9yPExpbmtJY29uPiYgbGlua0ljb25z
KCkgY29uc3QgeyByZXR1cm4gbV9saW5rSWNvbnM7IH0KIAogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgc2V0Q3VzdG9tSGVhZGVyRmllbGRzKFZlY3RvcjxIVFRQSGVhZGVyRmllbGQ+JiYgZmllbGRz
KTsKKyAgICBjb25zdCBWZWN0b3I8SFRUUEhlYWRlckZpZWxkPiYgY3VzdG9tSGVhZGVyRmllbGRz
KCkgeyByZXR1cm4gbV9jdXN0b21IZWFkZXJGaWVsZHM7IH0KICAgICAKIHByb3RlY3RlZDoKICAg
ICBXRUJDT1JFX0VYUE9SVCBEb2N1bWVudExvYWRlcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBj
b25zdCBTdWJzdGl0dXRlRGF0YSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0hUVFBI
ZWFkZXJGaWVsZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0hUVFBI
ZWFkZXJGaWVsZC5jcHAJKHJldmlzaW9uIDIyMjk4OSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9IVFRQSGVhZGVyRmllbGQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsMTggKzIwMiwxNiBA
QCBzdGF0aWMgYm9vbCBpc1ZhbGlkVmFsdWUoU3RyaW5nVmlldyB2YWx1CiAKIH0gLy8gbmFtZXNw
YWNlIFJGQzcyMzAKIAotSFRUUEhlYWRlckZpZWxkOjpIVFRQSGVhZGVyRmllbGQoY29uc3QgU3Ry
aW5nJiBmaWVsZCkKK3N0ZDo6b3B0aW9uYWw8SFRUUEhlYWRlckZpZWxkPiBIVFRQSGVhZGVyRmll
bGQ6OmNyZWF0ZShTdHJpbmcmJiB1bnBhcnNlZE5hbWUsIFN0cmluZyYmIHVucGFyc2VkVmFsdWUp
CiB7Ci0gICAgc2l6ZV90IGNvbG9uTG9jYXRpb24gPSBmaWVsZC5maW5kKCc6Jyk7Ci0gICAgaWYg
KGNvbG9uTG9jYXRpb24gPT0gbm90Rm91bmQpCi0gICAgICAgIHJldHVybjsKKyAgICBTdHJpbmdW
aWV3IHN0cmlwcGVkTmFtZSA9IFN0cmluZ1ZpZXcodW5wYXJzZWROYW1lKS5zdHJpcExlYWRpbmdB
bmRUcmFpbGluZ01hdGNoZWRDaGFyYWN0ZXJzKFJGQzcyMzA6OmlzV2hpdGVzcGFjZSk7CisgICAg
U3RyaW5nVmlldyBzdHJpcHBlZFZhbHVlID0gU3RyaW5nVmlldyh1bnBhcnNlZFZhbHVlKS5zdHJp
cExlYWRpbmdBbmRUcmFpbGluZ01hdGNoZWRDaGFyYWN0ZXJzKFJGQzcyMzA6OmlzV2hpdGVzcGFj
ZSk7CisgICAgaWYgKCFSRkM3MjMwOjppc1ZhbGlkTmFtZShzdHJpcHBlZE5hbWUpIHx8ICFSRkM3
MjMwOjppc1ZhbGlkVmFsdWUoc3RyaXBwZWRWYWx1ZSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CiAKLSAgICBTdHJpbmdWaWV3IG5hbWUgPSBTdHJpbmdWaWV3KGZpZWxkKS5zdWJzdHJp
bmcoMCwgY29sb25Mb2NhdGlvbikuc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdNYXRjaGVkQ2hhcmFj
dGVycyhSRkM3MjMwOjppc1doaXRlc3BhY2UpOwotICAgIFN0cmluZ1ZpZXcgdmFsdWUgPSBTdHJp
bmdWaWV3KGZpZWxkKS5zdWJzdHJpbmcoY29sb25Mb2NhdGlvbiArIDEpLnN0cmlwTGVhZGluZ0Fu
ZFRyYWlsaW5nTWF0Y2hlZENoYXJhY3RlcnMoUkZDNzIzMDo6aXNXaGl0ZXNwYWNlKTsKLSAgICBp
ZiAoIVJGQzcyMzA6OmlzVmFsaWROYW1lKG5hbWUpIHx8ICFSRkM3MjMwOjppc1ZhbGlkVmFsdWUo
dmFsdWUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2ZpZWxkID0gbWFrZVN0cmluZyhuYW1l
LCAnOicsICcgJywgIHZhbHVlKTsKKyAgICBTdHJpbmcgbmFtZSA9IHN0cmlwcGVkTmFtZS5sZW5n
dGgoKSA9PSB1bnBhcnNlZE5hbWUubGVuZ3RoKCkgPyBXVEZNb3ZlKHVucGFyc2VkTmFtZSkgOiBz
dHJpcHBlZE5hbWUudG9TdHJpbmcoKTsKKyAgICBTdHJpbmcgdmFsdWUgPSBzdHJpcHBlZFZhbHVl
Lmxlbmd0aCgpID09IHVucGFyc2VkVmFsdWUubGVuZ3RoKCkgPyBXVEZNb3ZlKHVucGFyc2VkVmFs
dWUpIDogc3RyaXBwZWRWYWx1ZS50b1N0cmluZygpOworICAgIHJldHVybiB7eyBXVEZNb3ZlKG5h
bWUpLCBXVEZNb3ZlKHZhbHVlKSB9fTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0hUVFBIZWFkZXJGaWVsZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9IVFRQSGVhZGVyRmllbGQuaAkocmV2aXNpb24gMjIyOTg5KQorKysgU291cmNlL1dlYkNvcmUv
bG9hZGVyL0hUVFBIZWFkZXJGaWVsZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwzMiArMzEsNDQg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBXRUJDT1JFX0VYUE9SVCBIVFRQSGVhZGVy
RmllbGQgewogcHVibGljOgotICAgIEhUVFBIZWFkZXJGaWVsZChjb25zdCBTdHJpbmcmKTsKLSAg
ICAKLSAgICBjb25zdCBTdHJpbmcmIGZpZWxkKCkgY29uc3QgeyByZXR1cm4gbV9maWVsZDsgfQor
ICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEhUVFBIZWFkZXJGaWVsZD4gY3JlYXRlKFN0cmluZyYm
IG5hbWUsIFN0cmluZyYmIHZhbHVlKTsKKworICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIGNvbnN0IFN0cmluZyYgdmFsdWUoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlOyB9CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29k
ZShFbmNvZGVyJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIHN0
ZDo6b3B0aW9uYWw8SFRUUEhlYWRlckZpZWxkPiBkZWNvZGUoRGVjb2RlciYpOwogCiBwcml2YXRl
OgotICAgIFN0cmluZyBtX2ZpZWxkOworICAgIEhUVFBIZWFkZXJGaWVsZChTdHJpbmcmJiBuYW1l
LCBTdHJpbmcmJiB2YWx1ZSkKKyAgICAgICAgOiBtX25hbWUoV1RGTW92ZShuYW1lKSkKKyAgICAg
ICAgLCBtX3ZhbHVlKFdURk1vdmUodmFsdWUpKQorICAgIHsgfQorICAgIFN0cmluZyBtX25hbWU7
CisgICAgU3RyaW5nIG1fdmFsdWU7CiB9OwogCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9p
ZCBIVFRQSGVhZGVyRmllbGQ6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogewotICAg
IGVuY29kZXIgPDwgbV9maWVsZDsKKyAgICBlbmNvZGVyIDw8IG1fbmFtZTsKKyAgICBlbmNvZGVy
IDw8IG1fdmFsdWU7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+CiBzdGQ6Om9wdGlvbmFs
PEhUVFBIZWFkZXJGaWVsZD4gSFRUUEhlYWRlckZpZWxkOjpkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKIHsKLSAgICBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gZmllbGQ7Ci0gICAgZGVjb2RlciA+PiBm
aWVsZDsKLSAgICBpZiAoIWZpZWxkKQorICAgIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBuYW1lOwor
ICAgIGRlY29kZXIgPj4gbmFtZTsKKyAgICBpZiAoIW5hbWUpCisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisKKyAgICBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gdmFsdWU7CisgICAgZGVjb2Rl
ciA+PiB2YWx1ZTsKKyAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwogCi0gICAgcmV0dXJuIHt7IFdURk1vdmUoKmZpZWxkKSB9fTsKKyAgICByZXR1cm4ge3sgV1RG
TW92ZSgqbmFtZSksIFdURk1vdmUoKnZhbHVlKSB9fTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9h
ZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
UmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiAyMjI5ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJI
VE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgorI2luY2x1
ZGUgIkhUVFBIZWFkZXJGaWVsZC5oIgogI2luY2x1ZGUgIkxvYWRlclN0cmF0ZWd5LmgiCiAjaW5j
bHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKQEAgLTc1MCw2
ICs3NTEsOSBAQCBSZXNvdXJjZUVycm9yT3I8Q2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjCiAgICAg
fQogI2VuZGlmCiAKKyAgICAvLyBGSVhNRTogQWRkIGN1c3RvbSBoZWFkZXJzIHRvIGZpcnN0LXBh
cnR5IHJlcXVlc3RzLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzc2MjkKKwogICAgIExvYWRUaW1pbmcgbG9hZFRpbWluZzsKICAgICBsb2FkVGltaW5n
Lm1hcmtTdGFydFRpbWVBbmRGZXRjaFN0YXJ0KCk7CiAgICAgSW5pdGlhdG9yQ29udGV4dCBpbml0
aWF0b3JDb250ZXh0ID0gcmVxdWVzdC5vcHRpb25zKCkuaW5pdGlhdG9yQ29udGV4dDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZVJlcXVlc3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VSZXF1
ZXN0LmgJKHJldmlzaW9uIDIyMjk4OSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRSZXNvdXJjZVJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsNyBAQCBw
dWJsaWM6CiAKICAgICBSZXNvdXJjZVJlcXVlc3QmJiByZWxlYXNlUmVzb3VyY2VSZXF1ZXN0KCkg
eyByZXR1cm4gV1RGTW92ZShtX3Jlc291cmNlUmVxdWVzdCk7IH0KICAgICBjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb3VyY2VSZXF1
ZXN0OyB9CisgICAgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QoKSB7IHJldHVybiBt
X3Jlc291cmNlUmVxdWVzdDsgfQogICAgIGNvbnN0IFN0cmluZyYgY2hhcnNldCgpIGNvbnN0IHsg
cmV0dXJuIG1fY2hhcnNldDsgfQogICAgIHZvaWQgc2V0Q2hhcnNldChjb25zdCBTdHJpbmcmIGNo
YXJzZXQpIHsgbV9jaGFyc2V0ID0gY2hhcnNldDsgfQogICAgIGNvbnN0IFJlc291cmNlTG9hZGVy
T3B0aW9ucyYgb3B0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fb3B0aW9uczsgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVz
dEJhc2UuY3BwCShyZXZpc2lvbiAyMjI5ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDksOCAr
MTQ5LDcgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpzZXRDYWNoZVBvbGljeQogICAgIAog
ICAgIG1fY2FjaGVQb2xpY3kgPSBjYWNoZVBvbGljeTsKICAgICAKLSAgICBpZiAodXJsKCkucHJv
dG9jb2xJc0luSFRUUEZhbWlseSgpKQotICAgICAgICBtX3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQg
PSBmYWxzZTsKKyAgICBtX3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQgPSBmYWxzZTsKIH0KIAogZG91
YmxlIFJlc291cmNlUmVxdWVzdEJhc2U6OnRpbWVvdXRJbnRlcnZhbCgpIGNvbnN0CkBAIC0xNjks
OCArMTY4LDcgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpzZXRUaW1lb3V0SW50ZQogCiAg
ICAgbV90aW1lb3V0SW50ZXJ2YWwgPSB0aW1lb3V0SW50ZXJ2YWw7CiAgICAgCi0gICAgaWYgKHVy
bCgpLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkKLSAgICAgICAgbV9wbGF0Zm9ybVJlcXVlc3RV
cGRhdGVkID0gZmFsc2U7CisgICAgbV9wbGF0Zm9ybVJlcXVlc3RVcGRhdGVkID0gZmFsc2U7CiB9
CiAKIGNvbnN0IFVSTCYgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6Zmlyc3RQYXJ0eUZvckNvb2tpZXMo
KSBjb25zdApAQCAtMjA4LDggKzIwNiw3IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6c2V0
SFRUUE1ldGhvZCgKIAogICAgIG1faHR0cE1ldGhvZCA9IGh0dHBNZXRob2Q7CiAgICAgCi0gICAg
aWYgKHVybCgpLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkKLSAgICAgICAgbV9wbGF0Zm9ybVJl
cXVlc3RVcGRhdGVkID0gZmFsc2U7CisgICAgbV9wbGF0Zm9ybVJlcXVlc3RVcGRhdGVkID0gZmFs
c2U7CiB9CiAKIGNvbnN0IEhUVFBIZWFkZXJNYXAmIFJlc291cmNlUmVxdWVzdEJhc2U6Omh0dHBI
ZWFkZXJGaWVsZHMoKSBjb25zdApAQCAtMjM5LDggKzIzNiw3IEBAIHZvaWQgUmVzb3VyY2VSZXF1
ZXN0QmFzZTo6c2V0SFRUUEhlYWRlckYKIAogICAgIG1faHR0cEhlYWRlckZpZWxkcy5zZXQobmFt
ZSwgdmFsdWUpOwogICAgIAotICAgIGlmICh1cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkp
Ci0gICAgICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOworICAgIG1fcGxhdGZv
cm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOwogfQogCiB2b2lkIFJlc291cmNlUmVxdWVzdEJhc2U6
OnNldEhUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZSBuYW1lLCBjb25zdCBTdHJpbmcmIHZh
bHVlKQpAQCAtMjQ5LDggKzI0NSw3IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6c2V0SFRU
UEhlYWRlckYKIAogICAgIG1faHR0cEhlYWRlckZpZWxkcy5zZXQobmFtZSwgdmFsdWUpOwogCi0g
ICAgaWYgKHVybCgpLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkKLSAgICAgICAgbV9wbGF0Zm9y
bVJlcXVlc3RVcGRhdGVkID0gZmFsc2U7CisgICAgbV9wbGF0Zm9ybVJlcXVlc3RVcGRhdGVkID0g
ZmFsc2U7CiB9CiAKIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6Y2xlYXJIVFRQQXV0aG9yaXph
dGlvbigpCkBAIC0yNjAsOCArMjU1LDcgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpjbGVh
ckhUVFBBdXRobwogICAgIGlmICghbV9odHRwSGVhZGVyRmllbGRzLnJlbW92ZShIVFRQSGVhZGVy
TmFtZTo6QXV0aG9yaXphdGlvbikpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICh1cmwoKS5w
cm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCi0gICAgICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRl
ZCA9IGZhbHNlOworICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOwogfQogCiBT
dHJpbmcgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6aHR0cENvbnRlbnRUeXBlKCkgY29uc3QKQEAgLTI4
MCw4ICsyNzQsNyBAQCB2b2lkIFJlc291cmNlUmVxdWVzdEJhc2U6OmNsZWFySFRUUENvbnRlCiAK
ICAgICBtX2h0dHBIZWFkZXJGaWVsZHMucmVtb3ZlKEhUVFBIZWFkZXJOYW1lOjpDb250ZW50VHlw
ZSk7CiAKLSAgICBpZiAodXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKQotICAgICAgICBt
X3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQgPSBmYWxzZTsKKyAgICBtX3BsYXRmb3JtUmVxdWVzdFVw
ZGF0ZWQgPSBmYWxzZTsKIH0KIAogU3RyaW5nIFJlc291cmNlUmVxdWVzdEJhc2U6Omh0dHBSZWZl
cnJlcigpIGNvbnN0CkBAIC0zMDUsOCArMjk4LDcgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNl
OjpjbGVhckhUVFBSZWZlcgogCiAgICAgbV9odHRwSGVhZGVyRmllbGRzLnJlbW92ZShIVFRQSGVh
ZGVyTmFtZTo6UmVmZXJlcik7CiAKLSAgICBpZiAodXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWls
eSgpKQotICAgICAgICBtX3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQgPSBmYWxzZTsKKyAgICBtX3Bs
YXRmb3JtUmVxdWVzdFVwZGF0ZWQgPSBmYWxzZTsKIH0KIAogU3RyaW5nIFJlc291cmNlUmVxdWVz
dEJhc2U6Omh0dHBPcmlnaW4oKSBjb25zdApAQCAtMzMwLDggKzMyMiw3IEBAIHZvaWQgUmVzb3Vy
Y2VSZXF1ZXN0QmFzZTo6Y2xlYXJIVFRQT3JpZ2kKIAogICAgIG1faHR0cEhlYWRlckZpZWxkcy5y
ZW1vdmUoSFRUUEhlYWRlck5hbWU6Ok9yaWdpbik7CiAKLSAgICBpZiAodXJsKCkucHJvdG9jb2xJ
c0luSFRUUEZhbWlseSgpKQotICAgICAgICBtX3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQgPSBmYWxz
ZTsKKyAgICBtX3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQgPSBmYWxzZTsKIH0KIAogYm9vbCBSZXNv
dXJjZVJlcXVlc3RCYXNlOjpoYXNIVFRQSGVhZGVyKEhUVFBIZWFkZXJOYW1lIG5hbWUpIGNvbnN0
CkBAIC0zNTUsOCArMzQ2LDcgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpjbGVhckhUVFBV
c2VyQQogCiAgICAgbV9odHRwSGVhZGVyRmllbGRzLnJlbW92ZShIVFRQSGVhZGVyTmFtZTo6VXNl
ckFnZW50KTsKIAotICAgIGlmICh1cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCi0gICAg
ICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOworICAgIG1fcGxhdGZvcm1SZXF1
ZXN0VXBkYXRlZCA9IGZhbHNlOwogfQogCiBTdHJpbmcgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6aHR0
cEFjY2VwdCgpIGNvbnN0CkBAIC0zNzUsOCArMzY1LDcgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3RC
YXNlOjpjbGVhckhUVFBBY2NlcAogCiAgICAgbV9odHRwSGVhZGVyRmllbGRzLnJlbW92ZShIVFRQ
SGVhZGVyTmFtZTo6QWNjZXB0KTsKIAotICAgIGlmICh1cmwoKS5wcm90b2NvbElzSW5IVFRQRmFt
aWx5KCkpCi0gICAgICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOworICAgIG1f
cGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOwogfQogCiB2b2lkIFJlc291cmNlUmVxdWVz
dEJhc2U6OmNsZWFySFRUUEFjY2VwdEVuY29kaW5nKCkKQEAgLTM4NSw4ICszNzQsNyBAQCB2b2lk
IFJlc291cmNlUmVxdWVzdEJhc2U6OmNsZWFySFRUUEFjY2VwCiAKICAgICBtX2h0dHBIZWFkZXJG
aWVsZHMucmVtb3ZlKEhUVFBIZWFkZXJOYW1lOjpBY2NlcHRFbmNvZGluZyk7CiAKLSAgICBpZiAo
dXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKQotICAgICAgICBtX3BsYXRmb3JtUmVxdWVz
dFVwZGF0ZWQgPSBmYWxzZTsKKyAgICBtX3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQgPSBmYWxzZTsK
IH0KIAogdm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpzZXRSZXNwb25zZUNvbnRlbnREaXNwb3Np
dGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheShjb25zdCBTdHJpbmcmIGVuY29kaW5nMSwgY29uc3Qg
U3RyaW5nJiBlbmNvZGluZzIsIGNvbnN0IFN0cmluZyYgZW5jb2RpbmczKQpAQCAtNDAyLDggKzM5
MCw3IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6c2V0UmVzcG9uc2VDb24KICAgICBpZiAo
IWVuY29kaW5nMy5pc051bGwoKSkKICAgICAgICAgbV9yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlv
bkVuY29kaW5nRmFsbGJhY2tBcnJheS51bmNoZWNrZWRBcHBlbmQoZW5jb2RpbmczKTsKICAgICAK
LSAgICBpZiAodXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKQotICAgICAgICBtX3BsYXRm
b3JtUmVxdWVzdFVwZGF0ZWQgPSBmYWxzZTsKKyAgICBtX3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQg
PSBmYWxzZTsKIH0KIAogRm9ybURhdGEqIFJlc291cmNlUmVxdWVzdEJhc2U6Omh0dHBCb2R5KCkg
Y29uc3QKQEAgLTQyMSw4ICs0MDgsNyBAQCB2b2lkIFJlc291cmNlUmVxdWVzdEJhc2U6OnNldEhU
VFBCb2R5KFJlCiAKICAgICBtX3Jlc291cmNlUmVxdWVzdEJvZHlVcGRhdGVkID0gdHJ1ZTsKIAot
ICAgIGlmICh1cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCi0gICAgICAgIG1fcGxhdGZv
cm1SZXF1ZXN0Qm9keVVwZGF0ZWQgPSBmYWxzZTsKKyAgICBtX3BsYXRmb3JtUmVxdWVzdEJvZHlV
cGRhdGVkID0gZmFsc2U7CiB9CiAKIGJvb2wgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6YWxsb3dDb29r
aWVzKCkgY29uc3QKQEAgLTQ0MSw4ICs0MjcsNyBAQCB2b2lkIFJlc291cmNlUmVxdWVzdEJhc2U6
OnNldEFsbG93Q29va2llCiAKICAgICBtX2FsbG93Q29va2llcyA9IGFsbG93Q29va2llczsKICAg
ICAKLSAgICBpZiAodXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKQotICAgICAgICBtX3Bs
YXRmb3JtUmVxdWVzdFVwZGF0ZWQgPSBmYWxzZTsKKyAgICBtX3BsYXRmb3JtUmVxdWVzdFVwZGF0
ZWQgPSBmYWxzZTsKIH0KIAogUmVzb3VyY2VMb2FkUHJpb3JpdHkgUmVzb3VyY2VSZXF1ZXN0QmFz
ZTo6cHJpb3JpdHkoKSBjb25zdApAQCAtNDYxLDggKzQ0Niw3IEBAIHZvaWQgUmVzb3VyY2VSZXF1
ZXN0QmFzZTo6c2V0UHJpb3JpdHkoUmUKIAogICAgIG1fcHJpb3JpdHkgPSBwcmlvcml0eTsKIAot
ICAgIGlmICh1cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCi0gICAgICAgIG1fcGxhdGZv
cm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOworICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9
IGZhbHNlOwogfQogCiB2b2lkIFJlc291cmNlUmVxdWVzdEJhc2U6OmFkZEhUVFBIZWFkZXJGaWVs
ZElmTm90UHJlc2VudChIVFRQSGVhZGVyTmFtZSBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQpA
QCAtNDcyLDggKzQ1Niw3IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6YWRkSFRUUEhlYWRl
ckYKICAgICBpZiAoIW1faHR0cEhlYWRlckZpZWxkcy5hZGRJZk5vdFByZXNlbnQobmFtZSwgdmFs
dWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAodXJsKCkucHJvdG9jb2xJc0luSFRUUEZh
bWlseSgpKQotICAgICAgICBtX3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQgPSBmYWxzZTsKKyAgICBt
X3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQgPSBmYWxzZTsKIH0KIAogdm9pZCBSZXNvdXJjZVJlcXVl
c3RCYXNlOjphZGRIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWUgbmFtZSwgY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKQEAgLTQ4Miw4ICs0NjUsNyBAQCB2b2lkIFJlc291cmNlUmVxdWVzdEJhc2U6
OmFkZEhUVFBIZWFkZXJGCiAKICAgICBtX2h0dHBIZWFkZXJGaWVsZHMuYWRkKG5hbWUsIHZhbHVl
KTsKIAotICAgIGlmICh1cmwoKS5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCi0gICAgICAgIG1f
cGxhdGZvcm1SZXF1ZXN0VXBkYXRlZCA9IGZhbHNlOworICAgIG1fcGxhdGZvcm1SZXF1ZXN0VXBk
YXRlZCA9IGZhbHNlOwogfQogCiB2b2lkIFJlc291cmNlUmVxdWVzdEJhc2U6OmFkZEhUVFBIZWFk
ZXJGaWVsZChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCkBAIC00OTIs
OCArNDc0LDcgQEAgdm9pZCBSZXNvdXJjZVJlcXVlc3RCYXNlOjphZGRIVFRQSGVhZGVyRgogCiAg
ICAgbV9odHRwSGVhZGVyRmllbGRzLmFkZChuYW1lLCB2YWx1ZSk7CiAKLSAgICBpZiAodXJsKCku
cHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKQotICAgICAgICBtX3BsYXRmb3JtUmVxdWVzdFVwZGF0
ZWQgPSBmYWxzZTsKKyAgICBtX3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQgPSBmYWxzZTsKIH0KIAog
Ym9vbCBSZXNvdXJjZVJlcXVlc3RCYXNlOjpoYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5h
bWUgaGVhZGVyTmFtZSkgY29uc3QKQEAgLTUwNyw4ICs0ODgsNyBAQCB2b2lkIFJlc291cmNlUmVx
dWVzdEJhc2U6OnNldEhUVFBIZWFkZXJGCiAKICAgICBtX2h0dHBIZWFkZXJGaWVsZHMgPSBXVEZN
b3ZlKGhlYWRlckZpZWxkcyk7CiAKLSAgICBpZiAodXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWls
eSgpKQotICAgICAgICBtX3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQgPSBmYWxzZTsKKyAgICBtX3Bs
YXRmb3JtUmVxdWVzdFVwZGF0ZWQgPSBmYWxzZTsKIH0KIAogYm9vbCBlcXVhbElnbm9yaW5nSGVh
ZGVyRmllbGRzKGNvbnN0IFJlc291cmNlUmVxdWVzdEJhc2UmIGEsIGNvbnN0IFJlc291cmNlUmVx
dWVzdEJhc2UmIGIpCkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjIyOTg5KQorKysgU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMyBAQAorMjAxNy0xMC0w
NiAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAg
IEFkZCBtb3JlIGluZnJhc3RydWN0dXJlIHRvIGFwcGx5IGN1c3RvbSBoZWFkZXJzIHRvIHNhbWUt
b3JpZ2luIHJlcXVlc3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzc2MjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVQb2xpY2llcy5jcHA6CisgICAgICAg
IChXS1dlYnNpdGVQb2xpY2llc0NvcHlDdXN0b21IZWFkZXJGaWVsZHMpOgorICAgICAgICAoV0tX
ZWJzaXRlUG9saWNpZXNTZXRDdXN0b21IZWFkZXJGaWVsZHMpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQy9XS1dlYnNpdGVQb2xpY2llcy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29j
b2EvX1dLV2Vic2l0ZVBvbGljaWVzLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9f
V0tXZWJzaXRlUG9saWNpZXMubW06CisgICAgICAgICgtW19XS1dlYnNpdGVQb2xpY2llcyBjdXN0
b21IZWFkZXJGaWVsZHNdKToKKyAgICAgICAgKC1bX1dLV2Vic2l0ZVBvbGljaWVzIHNldEN1c3Rv
bUhlYWRlckZpZWxkczpdKToKKworICAgICAgICBNYWtlIHRoZSBTUEkgZm9yIHNldHRpbmcgY3Vz
dG9tIGhlYWRlciBmaWVsZHMgdGFrZSBhIGRpY3Rpb25hcnk8U3RyaW5nLCBTdHJpbmc+CisgICAg
ICAgIGluc3RlYWQgb2YgYW4gYXJyYXkgb2YgU3RyaW5ncyB3aXRoIGNvbG9ucy4gVGhpcyBtYXRj
aGVzIE5TVVJMUmVxdWVzdCBhbmQgb3RoZXIKKyAgICAgICAgQVBJcyB0aGF0IGRlYWwgd2l0aCBo
ZWFkZXIgZmllbGRzLgorCiAyMDE3LTEwLTA2ICBZb3VzdWtlIEtpbW90byAgPHlvdXN1a2Uua2lt
b3RvQHNvbnkuY29tPgogCiAgICAgICAgIFtXaW5DYWlyb10gQWRkIHNoYXJlZCBjdXJsIGZpbGVz
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVQb2xpY2llcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRl
UG9saWNpZXMuY3BwCShyZXZpc2lvbiAyMjI5ODkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQy9XS1dlYnNpdGVQb2xpY2llcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEwICsy
NiwxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldLV2Vic2l0ZVBvbGljaWVz
LmgiCiAKLSNpbmNsdWRlICJBUElBcnJheS5oIgorI2luY2x1ZGUgIkFQSURpY3Rpb25hcnkuaCIK
ICNpbmNsdWRlICJBUElXZWJzaXRlUG9saWNpZXMuaCIKICNpbmNsdWRlICJXS0FQSUNhc3QuaCIK
ICNpbmNsdWRlICJXS0FycmF5LmgiCisjaW5jbHVkZSAiV0tEaWN0aW9uYXJ5LmgiCisjaW5jbHVk
ZSAiV0tSZXRhaW5QdHIuaCIKICNpbmNsdWRlICJXZWJzaXRlUG9saWNpZXMuaCIKIAogdXNpbmcg
bmFtZXNwYWNlIFdlYktpdDsKQEAgLTU0LDI2ICs1NiwyNSBAQCBib29sIFdLV2Vic2l0ZVBvbGlj
aWVzR2V0Q29udGVudEJsb2NrZXJzCiAgICAgcmV0dXJuIHRvSW1wbCh3ZWJzaXRlUG9saWNpZXMp
LT5jb250ZW50QmxvY2tlcnNFbmFibGVkKCk7CiB9CiAKLVdLX0VYUE9SVCBXS0FycmF5UmVmIFdL
V2Vic2l0ZVBvbGljaWVzQ29weUN1c3RvbUhlYWRlckZpZWxkcyhXS1dlYnNpdGVQb2xpY2llc1Jl
ZiB3ZWJzaXRlUG9saWNpZXMpCitXS19FWFBPUlQgV0tEaWN0aW9uYXJ5UmVmIFdLV2Vic2l0ZVBv
bGljaWVzQ29weUN1c3RvbUhlYWRlckZpZWxkcyhXS1dlYnNpdGVQb2xpY2llc1JlZiB3ZWJzaXRl
UG9saWNpZXMpCiB7Ci0gICAgY29uc3QgYXV0byYgZmllbGRzID0gdG9JbXBsKHdlYnNpdGVQb2xp
Y2llcyktPmN1c3RvbUhlYWRlckZpZWxkcygpOwotICAgIFZlY3RvcjxSZWZQdHI8QVBJOjpPYmpl
Y3Q+PiBzdHJpbmdzOwotICAgIHN0cmluZ3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShmaWVsZHMu
c2l6ZSgpKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGZpZWxkIDogZmllbGRzKQotICAgICAgICBz
dHJpbmdzLnVuY2hlY2tlZEFwcGVuZChBUEk6OlN0cmluZzo6Y3JlYXRlKGZpZWxkLmZpZWxkKCkp
KTsKLSAgICByZXR1cm4gdG9BUEkoQVBJOjpBcnJheTo6Y3JlYXRlKFdURk1vdmUoc3RyaW5ncykp
LnB0cigpKTsKKyAgICBIYXNoTWFwPFdURjo6U3RyaW5nLCBSZWZQdHI8QVBJOjpPYmplY3Q+PiBm
aWVsZHM7CisgICAgZm9yIChjb25zdCBhdXRvJiBmaWVsZCA6IHRvSW1wbCh3ZWJzaXRlUG9saWNp
ZXMpLT5jdXN0b21IZWFkZXJGaWVsZHMoKSkKKyAgICAgICAgZmllbGRzLmFkZChmaWVsZC5uYW1l
KCksIEFQSTo6U3RyaW5nOjpjcmVhdGUoZmllbGQudmFsdWUoKSkpOworICAgIHJldHVybiB0b0FQ
SShBUEk6OkRpY3Rpb25hcnk6OmNyZWF0ZShXVEZNb3ZlKGZpZWxkcykpLnB0cigpKTsKIH0KIAot
V0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlUG9saWNpZXNTZXRDdXN0b21IZWFkZXJGaWVsZHMoV0tX
ZWJzaXRlUG9saWNpZXNSZWYgd2Vic2l0ZVBvbGljaWVzLCBXS0FycmF5UmVmIGFycmF5KQorV0tf
RVhQT1JUIHZvaWQgV0tXZWJzaXRlUG9saWNpZXNTZXRDdXN0b21IZWFkZXJGaWVsZHMoV0tXZWJz
aXRlUG9saWNpZXNSZWYgd2Vic2l0ZVBvbGljaWVzLCBXS0RpY3Rpb25hcnlSZWYgZGljdGlvbmFy
eSkKIHsKLSAgICBzaXplX3QgbGVuZ3RoID0gV0tBcnJheUdldFNpemUoYXJyYXkpOworICAgIGF1
dG8ga2V5cyA9IGFkb3B0V0soV0tEaWN0aW9uYXJ5Q29weUtleXMoZGljdGlvbmFyeSkpOworICAg
IHNpemVfdCBsZW5ndGggPSBXS0FycmF5R2V0U2l6ZShrZXlzLmdldCgpKTsKICAgICBWZWN0b3I8
V2ViQ29yZTo6SFRUUEhlYWRlckZpZWxkPiBmaWVsZHM7CiAgICAgZmllbGRzLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkobGVuZ3RoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsg
KytpKSB7Ci0gICAgICAgIFdlYkNvcmU6OkhUVFBIZWFkZXJGaWVsZCBwYXJzZWRGaWVsZCh0b0lt
cGwoc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleChhcnJheSwg
aSkpKS0+c3RyaW5nKCkpOwotICAgICAgICBpZiAoIXBhcnNlZEZpZWxkLmZpZWxkKCkuaXNOdWxs
KCkKLSAgICAgICAgICAgICYmIHBhcnNlZEZpZWxkLmZpZWxkKCkuc3RhcnRzV2l0aElnbm9yaW5n
QVNDSUlDYXNlKCJYLSIpKSAvLyBMZXQncyBqdXN0IHByZXRlbmQgUkZDNjY0OCBuZXZlciBoYXBw
ZW5lZC4KLSAgICAgICAgICAgIGZpZWxkcy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShwYXJzZWRG
aWVsZCkpOworICAgICAgICBXS1N0cmluZ1JlZiBuYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdS
ZWY+KFdLQXJyYXlHZXRJdGVtQXRJbmRleChrZXlzLmdldCgpLCBpKSk7CisgICAgICAgIGF1dG8g
ZmllbGQgPSBXZWJDb3JlOjpIVFRQSGVhZGVyRmllbGQ6OmNyZWF0ZSh0b0ltcGwobmFtZSktPnN0
cmluZygpLCB0b0ltcGwoc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0
ZW1Gb3JLZXkoZGljdGlvbmFyeSwgbmFtZSkpKS0+c3RyaW5nKCkpOworICAgICAgICBpZiAoZmll
bGQgJiYgZmllbGQtPm5hbWUoKS5zdGFydHNXaXRoSWdub3JpbmdBU0NJSUNhc2UoIlgtIikpCisg
ICAgICAgICAgICBmaWVsZHMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoKmZpZWxkKSk7CiAgICAg
fQogICAgIHRvSW1wbCh3ZWJzaXRlUG9saWNpZXMpLT5zZXRDdXN0b21IZWFkZXJGaWVsZHMoV1RG
TW92ZShmaWVsZHMpKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dL
V2Vic2l0ZVBvbGljaWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0MvV0tXZWJzaXRlUG9saWNpZXMuaAkocmV2aXNpb24gMjIyOTg5KQorKysgU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlUG9saWNpZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtNTEsOCArNTEsOCBAQCBXS19FWFBPUlQgV0tXZWJzaXRlUG9saWNpZXNSZWYgV0tXZWJzaXRl
CiBXS19FWFBPUlQgYm9vbCBXS1dlYnNpdGVQb2xpY2llc0dldENvbnRlbnRCbG9ja2Vyc0VuYWJs
ZWQoV0tXZWJzaXRlUG9saWNpZXNSZWYpOwogV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlUG9saWNp
ZXNTZXRDb250ZW50QmxvY2tlcnNFbmFibGVkKFdLV2Vic2l0ZVBvbGljaWVzUmVmLCBib29sKTsK
IAotV0tfRVhQT1JUIFdLQXJyYXlSZWYgV0tXZWJzaXRlUG9saWNpZXNDb3B5Q3VzdG9tSGVhZGVy
RmllbGRzKFdLV2Vic2l0ZVBvbGljaWVzUmVmKTsKLVdLX0VYUE9SVCB2b2lkIFdLV2Vic2l0ZVBv
bGljaWVzU2V0Q3VzdG9tSGVhZGVyRmllbGRzKFdLV2Vic2l0ZVBvbGljaWVzUmVmLCBXS0FycmF5
UmVmKTsKK1dLX0VYUE9SVCBXS0RpY3Rpb25hcnlSZWYgV0tXZWJzaXRlUG9saWNpZXNDb3B5Q3Vz
dG9tSGVhZGVyRmllbGRzKFdLV2Vic2l0ZVBvbGljaWVzUmVmKTsKK1dLX0VYUE9SVCB2b2lkIFdL
V2Vic2l0ZVBvbGljaWVzU2V0Q3VzdG9tSGVhZGVyRmllbGRzKFdLV2Vic2l0ZVBvbGljaWVzUmVm
LCBXS0RpY3Rpb25hcnlSZWYpOwogCiBXS19FWFBPUlQgV0tXZWJzaXRlQXV0b3BsYXlRdWlyayBX
S1dlYnNpdGVQb2xpY2llc0dldEFsbG93ZWRBdXRvcGxheVF1aXJrcyhXS1dlYnNpdGVQb2xpY2ll
c1JlZik7CiBXS19FWFBPUlQgdm9pZCBXS1dlYnNpdGVQb2xpY2llc1NldEFsbG93ZWRBdXRvcGxh
eVF1aXJrcyhXS1dlYnNpdGVQb2xpY2llc1JlZiwgV0tXZWJzaXRlQXV0b3BsYXlRdWlyayk7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2Vic2l0ZVBvbGljaWVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS1dl
YnNpdGVQb2xpY2llcy5oCShyZXZpc2lvbiAyMjI5ODkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvX1dLV2Vic2l0ZVBvbGljaWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1
LDcgKzQ1LDcgQEAgV0tfQ0xBU1NfQVZBSUxBQkxFKG1hY29zeCgxMC4xMi4zKSwgaW9zKAogQHBy
b3BlcnR5IChub25hdG9taWMpIEJPT0wgY29udGVudEJsb2NrZXJzRW5hYmxlZDsKIEBwcm9wZXJ0
eSAobm9uYXRvbWljKSBfV0tXZWJzaXRlQXV0b3BsYXlRdWlyayBhbGxvd2VkQXV0b3BsYXlRdWly
a3MgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goMTAuMTMpLCBpb3MoMTEuMCkpOwogQHByb3BlcnR5
IChub25hdG9taWMpIF9XS1dlYnNpdGVBdXRvcGxheVBvbGljeSBhdXRvcGxheVBvbGljeSBXS19B
UElfQVZBSUxBQkxFKG1hY29zeCgxMC4xMyksIGlvcygxMS4wKSk7Ci1AcHJvcGVydHkgKG5vbmF0
b21pYywgY29weSwgc2V0dGVyPXNldEN1c3RvbUhlYWRlckZpZWxkczopIE5TQXJyYXk8TlNTdHJp
bmcgKj4gKmN1c3RvbUhlYWRlckZpZWxkcyBXS19BUElfQVZBSUxBQkxFKG1hY29zeChXS19NQUNf
VEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5LCBzZXR0
ZXI9c2V0Q3VzdG9tSGVhZGVyRmllbGRzOikgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIE5TU3Ry
aW5nICo+ICpjdXN0b21IZWFkZXJGaWVsZHMgV0tfQVBJX0FWQUlMQUJMRShtYWNvc3goV0tfTUFD
X1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAKIEBlbmQKIApJbmRleDogU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL19XS1dlYnNpdGVQb2xpY2llcy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLV2Vic2l0ZVBvbGljaWVzLm1tCShy
ZXZpc2lvbiAyMjI5ODkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dL
V2Vic2l0ZVBvbGljaWVzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsMjQgKzExNiwyNCBAQCAt
IChfV0tXZWJzaXRlQXV0b3BsYXlQb2xpY3kpYXV0b3BsYXlQb2xpCiAgICAgfQogfQogCi0tIChO
U0FycmF5PE5TU3RyaW5nICo+ICopY3VzdG9tSGVhZGVyRmllbGRzCistIChOU0RpY3Rpb25hcnk8
TlNTdHJpbmcgKiwgTlNTdHJpbmcgKj4gKiljdXN0b21IZWFkZXJGaWVsZHMKIHsKICAgICBjb25z
dCBhdXRvJiBmaWVsZHMgPSBfd2Vic2l0ZVBvbGljaWVzLT5jdXN0b21IZWFkZXJGaWVsZHMoKTsK
LSAgICBOU011dGFibGVBcnJheSAqYXJyYXkgPSBbW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5p
dFdpdGhDYXBhY2l0eTpmaWVsZHMuc2l6ZSgpXSBhdXRvcmVsZWFzZV07CisgICAgTlNNdXRhYmxl
RGljdGlvbmFyeSAqZGljdGlvbmFyeSA9IFtbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGlu
aXRXaXRoQ2FwYWNpdHk6ZmllbGRzLnNpemUoKV0gYXV0b3JlbGVhc2VdOwogICAgIGZvciAoY29u
c3QgYXV0byYgZmllbGQgOiBmaWVsZHMpCi0gICAgICAgIFthcnJheSBhZGRPYmplY3Q6ZmllbGQu
ZmllbGQoKV07Ci0gICAgcmV0dXJuIGFycmF5OworICAgICAgICBbZGljdGlvbmFyeSBzZXRPYmpl
Y3Q6ZmllbGQudmFsdWUoKSBmb3JLZXk6ZmllbGQubmFtZSgpXTsKKyAgICByZXR1cm4gZGljdGlv
bmFyeTsKIH0KIAotLSAodm9pZClzZXRDdXN0b21IZWFkZXJGaWVsZHM6KE5TQXJyYXk8TlNTdHJp
bmcgKj4gKilmaWVsZHMKKy0gKHZvaWQpc2V0Q3VzdG9tSGVhZGVyRmllbGRzOihOU0RpY3Rpb25h
cnk8TlNTdHJpbmcgKiwgTlNTdHJpbmcgKj4gKilmaWVsZHMKIHsKICAgICBWZWN0b3I8V2ViQ29y
ZTo6SFRUUEhlYWRlckZpZWxkPiBwYXJzZWRGaWVsZHM7CiAgICAgcGFyc2VkRmllbGRzLnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkoZmllbGRzLmNvdW50KTsKLSAgICBmb3IgKE5TU3RyaW5nICpzdHJp
bmcgaW4gZmllbGRzKSB7Ci0gICAgICAgIFdlYkNvcmU6OkhUVFBIZWFkZXJGaWVsZCBwYXJzZWRG
aWVsZChzdHJpbmcpOwotICAgICAgICBpZiAoIXBhcnNlZEZpZWxkLmZpZWxkKCkuaXNOdWxsKCkK
LSAgICAgICAgICAgICYmIHBhcnNlZEZpZWxkLmZpZWxkKCkuc3RhcnRzV2l0aElnbm9yaW5nQVND
SUlDYXNlKCJYLSIpKSAvLyBMZXQncyBqdXN0IHByZXRlbmQgUkZDNjY0OCBuZXZlciBoYXBwZW5l
ZC4KLSAgICAgICAgICAgIHBhcnNlZEZpZWxkcy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShwYXJz
ZWRGaWVsZCkpOworICAgIAorICAgIGZvciAoTlNTdHJpbmcqIG5hbWUgaW4gZmllbGRzKSB7Cisg
ICAgICAgIGF1dG8gZmllbGQgPSBXZWJDb3JlOjpIVFRQSGVhZGVyRmllbGQ6OmNyZWF0ZShuYW1l
LCBbZmllbGRzIG9iamVjdEZvcktleTpuYW1lXSk7CisgICAgICAgIGlmIChmaWVsZCAmJiBmaWVs
ZC0+bmFtZSgpLnN0YXJ0c1dpdGhJZ25vcmluZ0FTQ0lJQ2FzZSgiWC0iKSkKKyAgICAgICAgICAg
IHBhcnNlZEZpZWxkcy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZSgqZmllbGQpKTsKICAgICB9CiAg
ICAgX3dlYnNpdGVQb2xpY2llcy0+c2V0Q3VzdG9tSGVhZGVyRmllbGRzKFdURk1vdmUocGFyc2Vk
RmllbGRzKSk7CiB9CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
Q2hhbmdlTG9nCShyZXZpc2lvbiAyMjI5ODkpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwyNCBAQAorMjAxNy0xMC0wNiAgQWxleCBDaHJpc3RlbnNlbiAgPGFj
aHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIEFkZCBtb3JlIGluZnJhc3RydWN0dXJl
IHRvIGFwcGx5IGN1c3RvbSBoZWFkZXIgZmllbGRzIHRvIHNhbWUtb3JpZ2luIHJlcXVlc3RzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzc2MjkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViQ29yZS9IVFRQSGVhZGVyRmllbGQuY3BwOgorICAgICAgICAoY2Fub25p
Y2FsaXplSFRUUEhlYWRlcik6CisgICAgICAgIChzaG91bGRSZW1haW5VbmNoYW5nZWQpOgorICAg
ICAgICAoc2hvdWxkQmVJbnZhbGlkKToKKyAgICAgICAgKHNob3VsZEJlY29tZSk6CisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRlUG9saWNpZXMubW06Cisg
ICAgICAgIChURVNUKToKKyAgICAgICAgKGV4cGVjdEhlYWRlcnMpOgorICAgICAgICAoLVtDdXN0
b21IZWFkZXJGaWVsZHNEZWxlZ2F0ZSBfd2ViVmlldzpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9u
QWN0aW9uOmRlY2lzaW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bQ3VzdG9tSGVhZGVyRmllbGRz
RGVsZWdhdGUgd2ViVmlldzpzdGFydFVSTFNjaGVtZVRhc2s6XSk6CisgICAgICAgICgtW0N1c3Rv
bUhlYWRlckZpZWxkc0RlbGVnYXRlIHdlYlZpZXc6c3RvcFVSTFNjaGVtZVRhc2s6XSk6CisKKyAg
ICAgICAgVGVzdCBtYWluIHJlc291cmNlIHJlcXVlc3RzLCBzdWJyZXNvdXJjZSByZXF1ZXN0cywg
YW5kIGNyb3NzLW9yaWdpbiByZXF1ZXN0cy4KKwogMjAxNy0xMC0wNiAgQW50dGkgS29pdmlzdG8g
IDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgTWlub3IgV2Vha1B0ciBpbXByb3ZlbWVudHMK
SW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9IVFRQSGVhZGVyRmllbGQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9IVFRQ
SGVhZGVyRmllbGQuY3BwCShyZXZpc2lvbiAyMjI5ODkpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYkNvcmUvSFRUUEhlYWRlckZpZWxkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgs
MjIgKzI4LDMzIEBACiAjaW5jbHVkZSAiVGVzdC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvSFRUUEhl
YWRlckZpZWxkLmg+CiAKK3N0YXRpYyBTdHJpbmcgY2Fub25pY2FsaXplSFRUUEhlYWRlcihjb25z
dCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBzaXplX3QgY29sb25Mb2NhdGlvbiA9IHN0cmluZy5m
aW5kKCc6Jyk7CisgICAgaWYgKGNvbG9uTG9jYXRpb24gPT0gbm90Rm91bmQpCisgICAgICAgIHJl
dHVybiB7IH07CisgICAgYXV0byBmaWVsZCA9IFdlYkNvcmU6OkhUVFBIZWFkZXJGaWVsZDo6Y3Jl
YXRlKHN0cmluZy5zdWJzdHJpbmcoMCwgY29sb25Mb2NhdGlvbiksIHN0cmluZy5zdWJzdHJpbmco
Y29sb25Mb2NhdGlvbiArIDEpKTsKKyAgICBpZiAoIWZpZWxkKQorICAgICAgICByZXR1cm4geyB9
OworICAgIHJldHVybiBtYWtlU3RyaW5nKGZpZWxkLT5uYW1lKCksICI6ICIsIGZpZWxkLT52YWx1
ZSgpKTsKK30KKwogc3RhdGljIHZvaWQgc2hvdWxkUmVtYWluVW5jaGFuZ2VkKFZlY3RvcjxTdHJp
bmc+JiYgc3RyaW5ncykKIHsKICAgICBmb3IgKGNvbnN0IGF1dG8mIHN0cmluZyA6IHN0cmluZ3Mp
Ci0gICAgICAgIEVYUEVDVF9UUlVFKFdlYkNvcmU6OkhUVFBIZWFkZXJGaWVsZChzdHJpbmcpLmZp
ZWxkKCkgPT0gc3RyaW5nKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoY2Fub25pY2FsaXplSFRUUEhl
YWRlcihzdHJpbmcpID09IHN0cmluZyk7CiB9CiAKIHN0YXRpYyB2b2lkIHNob3VsZEJlSW52YWxp
ZChWZWN0b3I8U3RyaW5nPiYmIHN0cmluZ3MpCiB7CiAgICAgZm9yIChjb25zdCBhdXRvJiBzdHJp
bmcgOiBzdHJpbmdzKQotICAgICAgICBFWFBFQ1RfVFJVRShXZWJDb3JlOjpIVFRQSGVhZGVyRmll
bGQoc3RyaW5nKS5maWVsZCgpID09IFN0cmluZygpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoY2Fu
b25pY2FsaXplSFRUUEhlYWRlcihzdHJpbmcpID09IFN0cmluZygpKTsKIH0KIAogc3RhdGljIHZv
aWQgc2hvdWxkQmVjb21lKFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiYmIHBhaXJz
KQogewogICAgIGZvciAoY29uc3QgYXV0byYgcGFpciA6IHBhaXJzKQotICAgICAgICBFWFBFQ1Rf
VFJVRShXZWJDb3JlOjpIVFRQSGVhZGVyRmllbGQocGFpci5maXJzdCkuZmllbGQoKSA9PSBwYWly
LnNlY29uZCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGNhbm9uaWNhbGl6ZUhUVFBIZWFkZXIocGFp
ci5maXJzdCkgPT0gcGFpci5zZWNvbmQpOwogfQogCiBURVNUKEhUVFBIZWFkZXJGaWVsZCwgUGFy
c2VyKQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJzaXRl
UG9saWNpZXMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9XZWJzaXRlUG9saWNpZXMubW0JKHJldmlzaW9uIDIyMjk4OSkKKysrIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2Vic2l0ZVBvbGljaWVzLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0aWVzLmgi
CiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCisjaW1wb3J0IDxXZWJLaXQvV0tOYXZpZ2F0aW9u
RGVsZWdhdGVQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQYWdlUHJpdmF0ZS5oPgogI2lt
cG9ydCA8V2ViS2l0L1dLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQv
V0tVSURlbGVnYXRlUHJpdmF0ZS5oPgpAQCAtNjI3LDEzICs2MjgsMTEwIEBAIFRFU1QoV2ViS2l0
LCBXZWJzaXRlUG9saWNpZXNBdXRvcGxheVF1aXIKIFRFU1QoV2ViS2l0LCBJbnZhbGlkQ3VzdG9t
SGVhZGVycykKIHsKICAgICBhdXRvIHdlYnNpdGVQb2xpY2llcyA9IGFkb3B0TlMoW1tfV0tXZWJz
aXRlUG9saWNpZXMgYWxsb2NdIGluaXRdKTsKLSAgICBbd2Vic2l0ZVBvbGljaWVzIHNldEN1c3Rv
bUhlYWRlckZpZWxkczpAW0AiaW52YWxpZGhlYWRlcjoiLCBAIm5vbmN1c3RvbTogaGVhZGVyIiwg
QCJYLWN1c3RvbTogaGVhZGVyIiwgQCIgICAgeC1DdXN0b20gOiAgTmVlZHMgQ2Fub25pY2FsaXph
dGlvblx0ICJdXTsKLSAgICBOU0FycmF5PE5TU3RyaW5nICo+ICpjYW5vbmljYWxpemVkID0gW3dl
YnNpdGVQb2xpY2llcyBjdXN0b21IZWFkZXJGaWVsZHNdOworICAgIFt3ZWJzaXRlUG9saWNpZXMg
c2V0Q3VzdG9tSGVhZGVyRmllbGRzOkB7QCJpbnZhbGlkaGVhZGVyIiA6IEAiIiwgQCJub25jdXN0
b20iIDogQCJoZWFkZXIiLCBAIiAgICB4LUN1c3RvbSAiOkAiICBOZWVkcyBDYW5vbmljYWxpemF0
aW9uXHQgIiwgQCJ4LW90aGVyIiA6IEAib3RoZXIgdmFsdWUifV07CisgICAgTlNEaWN0aW9uYXJ5
PE5TU3RyaW5nICosIE5TU3RyaW5nICo+ICpjYW5vbmljYWxpemVkID0gW3dlYnNpdGVQb2xpY2ll
cyBjdXN0b21IZWFkZXJGaWVsZHNdOwogICAgIEVYUEVDVF9FUShjYW5vbmljYWxpemVkLmNvdW50
LCAydSk7Ci0gICAgRVhQRUNUX1NUUkVRKFtjYW5vbmljYWxpemVkIG9iamVjdEF0SW5kZXg6MF0u
VVRGOFN0cmluZywgIlgtY3VzdG9tOiBoZWFkZXIiKTsKLSAgICBFWFBFQ1RfU1RSRVEoW2Nhbm9u
aWNhbGl6ZWQgb2JqZWN0QXRJbmRleDoxXS5VVEY4U3RyaW5nLCAieC1DdXN0b206IE5lZWRzIENh
bm9uaWNhbGl6YXRpb24iKTsKKyAgICBFWFBFQ1RfU1RSRVEoW2Nhbm9uaWNhbGl6ZWQgb2JqZWN0
Rm9yS2V5OkAieC1DdXN0b20iXS5VVEY4U3RyaW5nLCAiTmVlZHMgQ2Fub25pY2FsaXphdGlvbiIp
OworICAgIEVYUEVDVF9TVFJFUShbY2Fub25pY2FsaXplZCBvYmplY3RGb3JLZXk6QCJ4LW90aGVy
Il0uVVRGOFN0cmluZywgIm90aGVyIHZhbHVlIik7Cit9CisKK3N0YXRpYyBib29sIGZpcnN0VGVz
dERvbmU7CitzdGF0aWMgYm9vbCBzZWNvbmRUZXN0RG9uZTsKK3N0YXRpYyBib29sIHRoaXJkVGVz
dERvbmU7CisKK3N0YXRpYyB2b2lkIGV4cGVjdEhlYWRlcnMoaWQgPFdLVVJMU2NoZW1lVGFzaz4g
dGFzaywgYm9vbCBleHBlY3RlZCkKK3sKKyAgICBOU1VSTFJlcXVlc3QgKnJlcXVlc3QgPSB0YXNr
LnJlcXVlc3Q7CisgICAgaWYgKGV4cGVjdGVkKSB7CisgICAgICAgIC8vIEZJWE1FOiBDaGVjayB0
aGF0IGhlYWRlcnMgYXJlIG9uIHRoZSByZXF1ZXN0LgorICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3NjI5CisgICAgfSBlbHNlIHsKKyAgICAgICAg
RVhQRUNUX1RSVUUoW3JlcXVlc3QgdmFsdWVGb3JIVFRQSGVhZGVyRmllbGQ6QCJYLWtleTEiXSA9
PSBuaWwpOworICAgICAgICBFWFBFQ1RfVFJVRShbcmVxdWVzdCB2YWx1ZUZvckhUVFBIZWFkZXJG
aWVsZDpAIlgta2V5MiJdID09IG5pbCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCByZXNwb25k
KGlkIDxXS1VSTFNjaGVtZVRhc2s+dGFzaywgTlNTdHJpbmcgKmh0bWwgPSBuaWwpCit7CisgICAg
W3Rhc2sgZGlkUmVjZWl2ZVJlc3BvbnNlOltbW05TVVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRo
VVJMOnRhc2sucmVxdWVzdC5VUkwgTUlNRVR5cGU6QCJ0ZXh0L2h0bWwiIGV4cGVjdGVkQ29udGVu
dExlbmd0aDpodG1sLmxlbmd0aCB0ZXh0RW5jb2RpbmdOYW1lOm5pbF0gYXV0b3JlbGVhc2VdXTsK
KyAgICBbdGFzayBkaWRSZWNlaXZlRGF0YTpbaHRtbCBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhT
dHJpbmdFbmNvZGluZ11dOworICAgIFt0YXNrIGRpZEZpbmlzaF07Cit9CisKK0BpbnRlcmZhY2Ug
Q3VzdG9tSGVhZGVyRmllbGRzRGVsZWdhdGUgOiBOU09iamVjdCA8V0tOYXZpZ2F0aW9uRGVsZWdh
dGVQcml2YXRlLCBXS1VSTFNjaGVtZUhhbmRsZXI+CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBD
dXN0b21IZWFkZXJGaWVsZHNEZWxlZ2F0ZQorCistICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcg
Kil3ZWJWaWV3IGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb246KFdLTmF2aWdhdGlvbkFj
dGlvbiAqKW5hdmlnYXRpb25BY3Rpb24gZGVjaXNpb25IYW5kbGVyOih2b2lkICheKShXS05hdmln
YXRpb25BY3Rpb25Qb2xpY3ksIF9XS1dlYnNpdGVQb2xpY2llcyAqKSlkZWNpc2lvbkhhbmRsZXIK
K3sKKyAgICBfV0tXZWJzaXRlUG9saWNpZXMgKndlYnNpdGVQb2xpY2llcyA9IFtbW19XS1dlYnNp
dGVQb2xpY2llcyBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgIFt3ZWJzaXRlUG9saWNp
ZXMgc2V0Q3VzdG9tSGVhZGVyRmllbGRzOkB7QCJYLWtleTEiOiBAInZhbHVlMSIsIEAiWC1rZXky
IjogQCJ2YWx1ZTIifV07CisgICAgZGVjaXNpb25IYW5kbGVyKFdLTmF2aWdhdGlvbkFjdGlvblBv
bGljeUFsbG93LCB3ZWJzaXRlUG9saWNpZXMpOworfQorCistICh2b2lkKXdlYlZpZXc6KFdLV2Vi
VmlldyAqKXdlYlZpZXcgc3RhcnRVUkxTY2hlbWVUYXNrOihpZCA8V0tVUkxTY2hlbWVUYXNrPil1
cmxTY2hlbWVUYXNrCit7CisgICAgTlNTdHJpbmcgKnBhdGggPSB1cmxTY2hlbWVUYXNrLnJlcXVl
c3QuVVJMLnBhdGg7CisgICAgaWYgKFtwYXRoIGlzRXF1YWxUb1N0cmluZzpAIi9tYWlucmVzb3Vy
Y2UiXSkgeworICAgICAgICBleHBlY3RIZWFkZXJzKHVybFNjaGVtZVRhc2ssIHRydWUpOworICAg
ICAgICByZXNwb25kKHVybFNjaGVtZVRhc2ssIEAiPHNjcmlwdD5mZXRjaCgnc3VicmVzb3VyY2Un
KS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKXtmZXRjaCgndGVzdDovL2RpZmZlcmVudHNlY3VyaXR5
b3JpZ2luL2Nyb3Nzb3JpZ2luc3VicmVzb3VyY2UnLHttb2RlOiduby1jb3JzJ30pfSk8L3Njcmlw
dD4iKTsKKyAgICB9IGVsc2UgaWYgKFtwYXRoIGlzRXF1YWxUb1N0cmluZzpAIi9zdWJyZXNvdXJj
ZSJdKSB7CisgICAgICAgIGV4cGVjdEhlYWRlcnModXJsU2NoZW1lVGFzaywgdHJ1ZSk7CisgICAg
ICAgIHJlc3BvbmQodXJsU2NoZW1lVGFzayk7CisgICAgfSBlbHNlIGlmIChbcGF0aCBpc0VxdWFs
VG9TdHJpbmc6QCIvY3Jvc3NvcmlnaW5zdWJyZXNvdXJjZSJdKSB7CisgICAgICAgIGV4cGVjdEhl
YWRlcnModXJsU2NoZW1lVGFzaywgZmFsc2UpOworICAgICAgICByZXNwb25kKHVybFNjaGVtZVRh
c2spOworICAgICAgICBmaXJzdFRlc3REb25lID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKFtwYXRo
IGlzRXF1YWxUb1N0cmluZzpAIi9tYWlucmVzb3VyY2V3aXRoaWZyYW1lIl0pIHsKKyAgICAgICAg
ZXhwZWN0SGVhZGVycyh1cmxTY2hlbWVUYXNrLCB0cnVlKTsKKyAgICAgICAgcmVzcG9uZCh1cmxT
Y2hlbWVUYXNrLCBAIjxpZnJhbWUgc3JjPSd0ZXN0Oi8vaWZyYW1lb3JpZ2luL2lmcmFtZW1haW5y
ZXNvdXJjZSc+PC9pZnJhbWU+Iik7CisgICAgfSBlbHNlIGlmIChbcGF0aCBpc0VxdWFsVG9TdHJp
bmc6QCIvaWZyYW1lbWFpbnJlc291cmNlIl0pIHsKKyAgICAgICAgZXhwZWN0SGVhZGVycyh1cmxT
Y2hlbWVUYXNrLCBmYWxzZSk7CisgICAgICAgIHJlc3BvbmQodXJsU2NoZW1lVGFzaywgQCI8c2Ny
aXB0PmZldGNoKCdpZnJhbWVzdWJyZXNvdXJjZScpLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2Upe2Zl
dGNoKCd0ZXN0Oi8vbWFpbmZyYW1lb3JpZ2luL29yaWdpbmFsb3JpZ2luc3VicmVzb3VyY2UnLHtt
b2RlOiduby1jb3JzJ30pfSk8L3NjcmlwdD4iKTsKKyAgICB9IGVsc2UgaWYgKFtwYXRoIGlzRXF1
YWxUb1N0cmluZzpAIi9pZnJhbWVzdWJyZXNvdXJjZSJdKSB7CisgICAgICAgIGV4cGVjdEhlYWRl
cnModXJsU2NoZW1lVGFzaywgZmFsc2UpOworICAgICAgICByZXNwb25kKHVybFNjaGVtZVRhc2sp
OworICAgIH0gZWxzZSBpZiAoW3BhdGggaXNFcXVhbFRvU3RyaW5nOkAiL29yaWdpbmFsb3JpZ2lu
c3VicmVzb3VyY2UiXSkgeworICAgICAgICBleHBlY3RIZWFkZXJzKHVybFNjaGVtZVRhc2ssIGZh
bHNlKTsKKyAgICAgICAgcmVzcG9uZCh1cmxTY2hlbWVUYXNrKTsKKyAgICAgICAgc2Vjb25kVGVz
dERvbmUgPSB0cnVlOworICAgIH0gZWxzZSBpZiAoW3BhdGggaXNFcXVhbFRvU3RyaW5nOkAiL25l
c3RlZHRvcCJdKSB7CisgICAgICAgIGV4cGVjdEhlYWRlcnModXJsU2NoZW1lVGFzaywgdHJ1ZSk7
CisgICAgICAgIHJlc3BvbmQodXJsU2NoZW1lVGFzaywgQCI8aWZyYW1lIHNyYz0ndGVzdDovL290
aGVyb3JpZ2luL25lc3RlZG1pZCc+PC9pZnJhbWU+Iik7CisgICAgfSBlbHNlIGlmIChbcGF0aCBp
c0VxdWFsVG9TdHJpbmc6QCIvbmVzdGVkbWlkIl0pIHsKKyAgICAgICAgZXhwZWN0SGVhZGVycyh1
cmxTY2hlbWVUYXNrLCBmYWxzZSk7CisgICAgICAgIHJlc3BvbmQodXJsU2NoZW1lVGFzaywgQCI8
aWZyYW1lIHNyYz0ndGVzdDovL3RvcG9yaWdpbi9uZXN0ZWRib3R0b20nPjwvaWZyYW1lPiIpOwor
ICAgIH0gZWxzZSBpZiAoW3BhdGggaXNFcXVhbFRvU3RyaW5nOkAiL25lc3RlZGJvdHRvbSJdKSB7
CisgICAgICAgIGV4cGVjdEhlYWRlcnModXJsU2NoZW1lVGFzaywgdHJ1ZSk7CisgICAgICAgIHJl
c3BvbmQodXJsU2NoZW1lVGFzayk7CisgICAgICAgIHRoaXJkVGVzdERvbmUgPSB0cnVlOworICAg
IH0gZWxzZQorICAgICAgICBFWFBFQ1RfVFJVRShmYWxzZSk7Cit9CisKKy0gKHZvaWQpd2ViVmll
dzooV0tXZWJWaWV3ICopd2ViVmlldyBzdG9wVVJMU2NoZW1lVGFzazooaWQgPFdLVVJMU2NoZW1l
VGFzaz4pdXJsU2NoZW1lVGFzaworeworfQorCitAZW5kCisKK1RFU1QoV2ViS2l0LCBDdXN0b21I
ZWFkZXJGaWVsZHMpCit7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tDdXN0b21IZWFk
ZXJGaWVsZHNEZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGF1dG8gY29uZmlndXJhdGlvbiA9
IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CisgICAgW2Nv
bmZpZ3VyYXRpb24gc2V0VVJMU2NoZW1lSGFuZGxlcjpkZWxlZ2F0ZS5nZXQoKSBmb3JVUkxTY2hl
bWU6QCJ0ZXN0Il07CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxv
Y10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9u
OmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKKyAgICBbd2ViVmlldyBzZXROYXZpZ2F0aW9uRGVsZWdh
dGU6ZGVsZWdhdGUuZ2V0KCldOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVl
c3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJ0ZXN0Oi8vL21haW5yZXNv
dXJjZSJdXV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZmaXJzdFRlc3REb25lKTsK
KyAgICAKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRo
VVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAidGVzdDovL21haW5mcmFtZW9yaWdpbi9tYWlucmVz
b3VyY2V3aXRoaWZyYW1lIl1dXTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJnNlY29u
ZFRlc3REb25lKTsKKworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVx
dWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJ0ZXN0Oi8vdG9wb3JpZ2luL25lc3Rl
ZHRvcCJdXV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZ0aGlyZFRlc3REb25lKTsK
IH0KIAotLy8gRklYTUU6IEFwcGx5IHRoZSBjdXN0b20gaGVhZGVycyBmcm9tIHRoZSBEb2N1bWVu
dExvYWRlciB0byBlYWNoIHJlcXVlc3QgYW5kIHRlc3QgdGhhdCB0aGV5IGFyZSBzZW50IG9uIG1h
aW4gcmVzb3VyY2UgYW5kIHN1YnJlc291cmNlcy4KIAogI2VuZGlmIC8vIFdLX0FQSV9FTkFCTEVE
Cg==
</data>
<flag name="review"
          id="342846"
          type_id="1"
          status="+"
          setter="rniwa"
    />
          </attachment>
      

    </bug>

</bugzilla>