<?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>67465</bug_id>
          
          <creation_ts>2011-09-01 22:49:34 -0700</creation_ts>
          <short_desc>WebSocket: Send Blob as WebSocket binary message</short_desc>
          <delta_ts>2011-09-02 04:15:46 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>67471</dependson>
          <blocked>65249</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Yuta Kitamura">yutak</reporter>
          <assigned_to name="Yuta Kitamura">yutak</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>461055</commentid>
    <comment_count>0</comment_count>
    <who name="Yuta Kitamura">yutak</who>
    <bug_when>2011-09-01 22:49:34 -0700</bug_when>
    <thetext>Part of bug 65249.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461060</commentid>
    <comment_count>1</comment_count>
      <attachid>106098</attachid>
    <who name="Yuta Kitamura">yutak</who>
    <bug_when>2011-09-01 23:19:42 -0700</bug_when>
    <thetext>Created attachment 106098
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461072</commentid>
    <comment_count>2</comment_count>
      <attachid>106101</attachid>
    <who name="Yuta Kitamura">yutak</who>
    <bug_when>2011-09-02 00:29:25 -0700</bug_when>
    <thetext>Created attachment 106101
Patch v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461076</commentid>
    <comment_count>3</comment_count>
      <attachid>106098</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-09-02 00:36:33 -0700</bug_when>
    <thetext>Comment on attachment 106098
Patch

r- because of test coverage.

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

&gt; Source/WebCore/bindings/js/JSWebSocketCustom.cpp:92
&gt; +    if (!exec-&gt;argumentCount())
&gt; +        return throwError(exec, createSyntaxError(exec, &quot;Not enough arguments&quot;));

Do we have a test for this?

&gt; Source/WebCore/websockets/ThreadableWebSocketChannel.h:57
&gt; +    virtual bool send(const Blob&amp; binaryData) = 0;

&quot;binaryData&quot; argument name should be removed.

&gt; Source/WebCore/websockets/WebSocket.cpp:276
&gt; +    if (m_state == CLOSING || m_state == CLOSED) {
&gt; +        m_bufferedAmountAfterClose += binaryData-&gt;size() + getFramingOverhead(binaryData-&gt;size());
&gt; +        return false;

No test for this block.
We don&apos;t throw an exception, right?

&gt; Source/WebCore/websockets/WebSocket.h:71
&gt; +    bool send(Blob* binaryData, ExceptionCode&amp;);

should remove &quot;binaryData&quot; argument name.

&gt; Source/WebCore/websockets/WebSocketChannel.h:69
&gt; +    virtual bool send(const Blob&amp; binaryData);

Should remove &quot;binaryData&quot; argument name

&gt; Source/WebCore/websockets/WorkerThreadableWebSocketChannel.cpp:189
&gt; +    bool sent = m_mainWebSocketChannel-&gt;send(binaryData);
&gt; +    m_loaderProxy.postTaskForModeToWorkerContext(createCallbackTask(&amp;workerContextDidSend, m_workerClientWrapper, sent), m_taskMode);

&apos;sent&apos; is confusing.  It means &apos;enqueued&apos;, right?

&gt; Source/WebCore/websockets/WorkerThreadableWebSocketChannel.h:67
&gt; +    virtual bool send(const Blob&amp; binaryData);

Should remove &apos;binaryData&apos; argument name.

&gt; Source/WebCore/websockets/WorkerThreadableWebSocketChannel.h:97
&gt; +        void send(const Blob&amp; binaryData);

ditto.

&gt; Source/WebCore/websockets/WorkerThreadableWebSocketChannel.h:130
&gt; +        bool send(const Blob&amp; binaryData);

ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461078</commentid>
    <comment_count>4</comment_count>
      <attachid>106101</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-09-02 00:39:26 -0700</bug_when>
    <thetext>Comment on attachment 106101
Patch v2

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

r- because of conflicts.

&gt; Source/WebCore/websockets/WebSocket.cpp:271
&gt; +    if (m_useHixie76Protocol)
&gt; +        return send(&quot;[object Blob]&quot;, ec);

Is there a test for this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461090</commentid>
    <comment_count>5</comment_count>
      <attachid>106104</attachid>
    <who name="Yuta Kitamura">yutak</who>
    <bug_when>2011-09-02 01:23:14 -0700</bug_when>
    <thetext>Created attachment 106104
Patch v3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461091</commentid>
    <comment_count>6</comment_count>
      <attachid>106101</attachid>
    <who name="Yuta Kitamura">yutak</who>
    <bug_when>2011-09-02 01:24:11 -0700</bug_when>
    <thetext>Comment on attachment 106101
Patch v2

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

&gt;&gt; Source/WebCore/websockets/WebSocket.cpp:271
&gt;&gt; +        return send(&quot;[object Blob]&quot;, ec);
&gt; 
&gt; Is there a test for this?

Added a test (hixie76/send-object.html).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461092</commentid>
    <comment_count>7</comment_count>
      <attachid>106104</attachid>
    <who name="Yuta Kitamura">yutak</who>
    <bug_when>2011-09-02 01:26:32 -0700</bug_when>
    <thetext>Comment on attachment 106104
Patch v3

Oops, I missed last comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461097</commentid>
    <comment_count>8</comment_count>
      <attachid>106098</attachid>
    <who name="Yuta Kitamura">yutak</who>
    <bug_when>2011-09-02 02:14:52 -0700</bug_when>
    <thetext>Comment on attachment 106098
Patch

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

&gt;&gt; Source/WebCore/websockets/WorkerThreadableWebSocketChannel.cpp:189
&gt;&gt; +    m_loaderProxy.postTaskForModeToWorkerContext(createCallbackTask(&amp;workerContextDidSend, m_workerClientWrapper, sent), m_taskMode);
&gt; 
&gt; &apos;sent&apos; is confusing.  It means &apos;enqueued&apos;, right?

The word &quot;sent&quot; here (and also in ThreadableWebSocketChannelClientWrapper.h) is used as &quot;the return value of send()&quot;, so using the term &quot;enqueued&quot; seems more confusing, as it does not sound like the variable is related to send()...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461099</commentid>
    <comment_count>9</comment_count>
      <attachid>106107</attachid>
    <who name="Yuta Kitamura">yutak</who>
    <bug_when>2011-09-02 02:23:25 -0700</bug_when>
    <thetext>Created attachment 106107
Patch v4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461100</commentid>
    <comment_count>10</comment_count>
      <attachid>106108</attachid>
    <who name="Yuta Kitamura">yutak</who>
    <bug_when>2011-09-02 02:26:28 -0700</bug_when>
    <thetext>Created attachment 106108
Patch v5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461101</commentid>
    <comment_count>11</comment_count>
      <attachid>106098</attachid>
    <who name="Yuta Kitamura">yutak</who>
    <bug_when>2011-09-02 02:27:25 -0700</bug_when>
    <thetext>Comment on attachment 106098
Patch

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

&gt;&gt; Source/WebCore/bindings/js/JSWebSocketCustom.cpp:92
&gt;&gt; +        return throwError(exec, createSyntaxError(exec, &quot;Not enough arguments&quot;));
&gt; 
&gt; Do we have a test for this?

Added a test (hixie76/send-empty.html, hybi/send-empty.html).

&gt;&gt; Source/WebCore/websockets/ThreadableWebSocketChannel.h:57
&gt;&gt; +    virtual bool send(const Blob&amp; binaryData) = 0;
&gt; 
&gt; &quot;binaryData&quot; argument name should be removed.

Removed.

&gt;&gt; Source/WebCore/websockets/WebSocket.cpp:276
&gt;&gt; +        return false;
&gt; 
&gt; No test for this block.
&gt; We don&apos;t throw an exception, right?

Updated hybi/bufferedAmount-after-close.html.

&gt;&gt; Source/WebCore/websockets/WebSocket.h:71
&gt;&gt; +    bool send(Blob* binaryData, ExceptionCode&amp;);
&gt; 
&gt; should remove &quot;binaryData&quot; argument name.

Removed.

&gt;&gt; Source/WebCore/websockets/WebSocketChannel.h:69
&gt;&gt; +    virtual bool send(const Blob&amp; binaryData);
&gt; 
&gt; Should remove &quot;binaryData&quot; argument name

Removed.

&gt;&gt; Source/WebCore/websockets/WorkerThreadableWebSocketChannel.h:67
&gt;&gt; +    virtual bool send(const Blob&amp; binaryData);
&gt; 
&gt; Should remove &apos;binaryData&apos; argument name.

Removed.

&gt;&gt; Source/WebCore/websockets/WorkerThreadableWebSocketChannel.h:97
&gt;&gt; +        void send(const Blob&amp; binaryData);
&gt; 
&gt; ditto.

Removed.

&gt;&gt; Source/WebCore/websockets/WorkerThreadableWebSocketChannel.h:130
&gt;&gt; +        bool send(const Blob&amp; binaryData);
&gt; 
&gt; ditto.

Removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461104</commentid>
    <comment_count>12</comment_count>
      <attachid>106098</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-09-02 02:33:00 -0700</bug_when>
    <thetext>Comment on attachment 106098
Patch

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

&gt;&gt;&gt; Source/WebCore/websockets/WorkerThreadableWebSocketChannel.cpp:189
&gt;&gt;&gt; +    m_loaderProxy.postTaskForModeToWorkerContext(createCallbackTask(&amp;workerContextDidSend, m_workerClientWrapper, sent), m_taskMode);
&gt;&gt; 
&gt;&gt; &apos;sent&apos; is confusing.  It means &apos;enqueued&apos;, right?
&gt; 
&gt; The word &quot;sent&quot; here (and also in ThreadableWebSocketChannelClientWrapper.h) is used as &quot;the return value of send()&quot;, so using the term &quot;enqueued&quot; seems more confusing, as it does not sound like the variable is related to send()...

So &quot;sendResult&quot; would be a candidate.

We can rename WebSocketChannel::send() to another name, though we can&apos;t rename WebSocket::send().
You and I know send(Blob) is asynchronous. However other developers who read websocket code in the future will be confused by it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461105</commentid>
    <comment_count>13</comment_count>
      <attachid>106108</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-09-02 02:34:00 -0700</bug_when>
    <thetext>Comment on attachment 106108
Patch v5

ok</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461129</commentid>
    <comment_count>14</comment_count>
      <attachid>106108</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-02 03:35:51 -0700</bug_when>
    <thetext>Comment on attachment 106108
Patch v5

Clearing flags on attachment: 106108

Committed r94399: &lt;http://trac.webkit.org/changeset/94399&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461130</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-02 03:35:57 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461151</commentid>
    <comment_count>16</comment_count>
    <who name="Yuta Kitamura">yutak</who>
    <bug_when>2011-09-02 04:15:46 -0700</bug_when>
    <thetext>Committed r94405: &lt;http://trac.webkit.org/changeset/94405&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106098</attachid>
            <date>2011-09-01 23:19:42 -0700</date>
            <delta_ts>2011-09-02 02:33:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67465-20110902151941.patch</filename>
            <type>text/plain</type>
            <size>38885</size>
            <attacher name="Yuta Kitamura">yutak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTQzNzkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBhMzRiZDAyZjc3Y2I5MTM4YjAxZjc0
NzQwNzcwMDlmYTdhNzhmMGE2Li5lM2IyYzQ1YWQwMWJjMjI1Nzc4OWNjMTUxMTM0ODM1NjIxZmYw
ZjhmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMzUgQEAKKzIwMTEtMDktMDEgIFl1dGEgS2l0YW11cmEgIDx5
dXRha0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViU29ja2V0OiBTZW5kIEJsb2IgYXMgV2Vi
U29ja2V0IGJpbmFyeSBtZXNzYWdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD02NzQ2NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWJsb2It
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0
cy9oeWJpL3NlbmQtYmxvYi5odG1sOgorICAgICAgICBBZGRlZC4gU2VuZCB0aHJlZSBCbG9icyBl
YWNoIG9mIHdoaWNoIGNvbnRhaW5zIGEgc21hbGwgYmluYXJ5IG1lc3NhZ2UuCisgICAgICAgICog
aHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWJsb2Jfd3NoLnB5OgorICAgICAg
ICBBZGRlZC4gcmVjZWl2ZV9tZXNzYWdlKCkgcmV0dXJucyBhIHVuaWNvZGUgdmFsdWUgaWYgdGhl
IHJlY2VpdmVkIG1lc3NhZ2Ugd2FzIHRleHQsIG9yCisgICAgICAgIGEgc3RyIHZhbHVlIGlmIHRo
ZSBtZXNzYWdlIHdhcyBiaW5hcnkuCisgICAgICAgICogaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVz
dHMvaHliaS9zZW5kLWZpbGUtYmxvYi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0
dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1maWxlLWJsb2ItZmFpbC1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkv
c2VuZC1maWxlLWJsb2ItZmFpbC5odG1sOgorICAgICAgICBBZGRlZC4gSWYgd2UgZGVsZXRlIGEg
ZmlsZSBiZWZvcmUgcmVhZGluZyBpdCwgRmlsZVJlYWRlckxvYWRlciByZWxpYWJseSBmYWlscy4K
KyAgICAgICAgKiBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtZmlsZS1ibG9i
Lmh0bWw6CisgICAgICAgIEFkZGVkLiBDcmVhdGUgYSBGaWxlIGFuZCB0cnkgdG8gc2VuZCBpdCBh
cyBhIEJsb2IuCisgICAgICAgICogaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5k
LWZpbGUtYmxvYl93c2gucHk6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvd2Vic29ja2V0
L3Rlc3RzL2h5Ymkvd29ya2Vycy9yZXNvdXJjZXMvc2VuZC1ibG9iLmpzOgorICAgICAgICBBZGRl
ZC4gU2FtZSBhcyBzZW5kLWJsb2IuaHRtbCBhYm92ZS4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3dl
YnNvY2tldC90ZXN0cy9oeWJpL3dvcmtlcnMvcmVzb3VyY2VzL3NlbmQtYmxvYl93c2gucHk6Cisg
ICAgICAgIEFkZGVkLiBTYW1lIGFzIHNlbmQtYmxvYl93c2gucHkgYWJvdmUuCisgICAgICAgICog
aHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS93b3JrZXJzL3NlbmQtYmxvYi1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkv
d29ya2Vycy9zZW5kLWJsb2IuaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Nr
aXBwZWQ6CisgICAgICAgIHNlbmQtZmlsZS1ibG9iLmh0bWwgYW5kIHNlbmQtZmlsZS1ibG9iLWZh
aWwuaHRtbCBkZXBlbmQgb24gYXZhaWxhYmlsaXR5IG9mIEZpbGUgQVBJLgorICAgICAgICAqIHBs
YXRmb3JtL21hYy9Ta2lwcGVkOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9Ta2lwcGVk
OiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vU2tpcHBlZDogRGl0dG8uCisKIDIwMTEt
MDktMDEgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBb
Y2hyb21pdW1dIEFkZCBjaHJvbWl1bSBsZW9wYXJkIGJhc2VsaW5lcwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWJsb2ItZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5k
LWJsb2ItZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZkZjQ4ZDA1ZjNmZDcyMGUwYmE1YWE2Nzlj
MjYyZTRkZGIyMzFjMjMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtYmxvYi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwx
MiBAQAorV2ViU29ja2V0OiBTZW5kIEJsb2JzLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
CisKK1BBU1MgUEFTUzogTWVzc2FnZSAjMC4KK1BBU1MgUEFTUzogTWVzc2FnZSAjMS4KK1BBU1Mg
UEFTUzogTWVzc2FnZSAjMi4KK1BBU1MgY2xvc2VFdmVudC53YXNDbGVhbiBpcyB0cnVlCitQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWJsb2Iu
aHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1i
bG9iLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZWFiOTM0NmQ3NDgzYTY0YTkyYWFiZjc5MWVkYjljOWQwMzc1
Zjk5MgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0
L3Rlc3RzL2h5Ymkvc2VuZC1ibG9iLmh0bWwKQEAgLTAsMCArMSw3NiBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8u
Li8uLi9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vLi4vLi4vanMtdGVzdC1yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJj
b25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KK2Rlc2NyaXB0
aW9uKCJXZWJTb2NrZXQ6IFNlbmQgQmxvYnMuIik7CisKK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0g
dHJ1ZTsKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIub3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRIaXhpZTc2V2ViU29ja2V0UHJvdG9j
b2xFbmFibGVkIiwgMCk7CisKK2Z1bmN0aW9uIHN0YXJ0c1dpdGgodGFyZ2V0LCBwcmVmaXgpCit7
CisgICAgcmV0dXJuIHRhcmdldC5pbmRleE9mKHByZWZpeCkgPT09IDA7Cit9CisKK2Z1bmN0aW9u
IGNyZWF0ZUJsb2JDb250YWluaW5nSGVsbG9Xb3JsZCgpCit7CisgICAgdmFyIGJ1aWxkZXIgPSBu
ZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKKyAgICBidWlsZGVyLmFwcGVuZCgiSGVsbG8sIHdvcmxk
ISIpOworICAgIHJldHVybiBidWlsZGVyLmdldEJsb2IoKTsKK30KKworZnVuY3Rpb24gY3JlYXRl
RW1wdHlCbG9iKCkKK3sKKyAgICB2YXIgYnVpbGRlciA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigp
OworICAgIHJldHVybiBidWlsZGVyLmdldEJsb2IoKTsKK30KKworZnVuY3Rpb24gY3JlYXRlQmxv
YkNvbnRhaW5pbmdBbGxEaXN0aW5jdEJ5dGVzKCkKK3sKKyAgICB2YXIgYXJyYXkgPSBuZXcgVWlu
dDhBcnJheSgyNTYpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyArK2kpCisgICAgICAg
IGFycmF5W2ldID0gaTsKKyAgICB2YXIgYnVpbGRlciA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigp
OworICAgIGJ1aWxkZXIuYXBwZW5kKGFycmF5LmJ1ZmZlcik7CisgICAgcmV0dXJuIGJ1aWxkZXIu
Z2V0QmxvYigpOworfQorCit2YXIgdXJsID0gIndzOi8vMTI3LjAuMC4xOjg4ODAvd2Vic29ja2V0
L3Rlc3RzL2h5Ymkvc2VuZC1ibG9iIjsKK3ZhciB3cyA9IG5ldyBXZWJTb2NrZXQodXJsKTsKK3Zh
ciBjbG9zZUV2ZW50OworCit3cy5vbm9wZW4gPSBmdW5jdGlvbigpCit7CisgICAgd3Muc2VuZChj
cmVhdGVCbG9iQ29udGFpbmluZ0hlbGxvV29ybGQoKSk7CisgICAgd3Muc2VuZChjcmVhdGVFbXB0
eUJsb2IoKSk7CisgICAgd3Muc2VuZChjcmVhdGVCbG9iQ29udGFpbmluZ0FsbERpc3RpbmN0Qnl0
ZXMoKSk7Cit9OworCit3cy5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkKK3sKKyAgICB2YXIg
bWVzc2FnZSA9IGV2ZW50LmRhdGE7CisgICAgaWYgKHN0YXJ0c1dpdGgobWVzc2FnZSwgIlBBU1Mi
KSkKKyAgICAgICAgdGVzdFBhc3NlZChtZXNzYWdlKTsKKyAgICBlbHNlCisgICAgICAgIHRlc3RG
YWlsZWQobWVzc2FnZSk7Cit9OworCit3cy5vbmNsb3NlID0gZnVuY3Rpb24oZXZlbnQpCit7Cisg
ICAgY2xvc2VFdmVudCA9IGV2ZW50OworICAgIHNob3VsZEJlVHJ1ZSgiY2xvc2VFdmVudC53YXND
bGVhbiIpOworICAgIGZpbmlzaEpTVGVzdCgpOworfTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNl
ZCA9IHRydWU7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi8uLi9qcy10ZXN0LXJl
c291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5k
LWJsb2Jfd3NoLnB5IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHli
aS9zZW5kLWJsb2Jfd3NoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAyNGUzZjRkMDc5NDVjOTJjYWFiZGMwMzdl
YzUwMDgyNGE0MmExYTIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtYmxvYl93c2gucHkKQEAgLTAsMCArMSwyMSBAQAor
ZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IGNvbW1vbgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQg
aW1wb3J0IG1zZ3V0aWwKKworCitkZWYgd2ViX3NvY2tldF9kb19leHRyYV9oYW5kc2hha2UocmVx
dWVzdCk6CisgICAgcGFzcyAjIEFsd2F5cyBhY2NlcHQuCisKKworZGVmIHdlYl9zb2NrZXRfdHJh
bnNmZXJfZGF0YShyZXF1ZXN0KToKKyAgICBleHBlY3RlZF9tZXNzYWdlcyA9IFsnSGVsbG8sIHdv
cmxkIScsICcnLCBhbGxfZGlzdGluY3RfYnl0ZXMoKV0KKworICAgIGZvciB0ZXN0X251bWJlciwg
ZXhwZWN0ZWRfbWVzc2FnZSBpbiBlbnVtZXJhdGUoZXhwZWN0ZWRfbWVzc2FnZXMpOgorICAgICAg
ICBtZXNzYWdlID0gbXNndXRpbC5yZWNlaXZlX21lc3NhZ2UocmVxdWVzdCkKKyAgICAgICAgaWYg
dHlwZShtZXNzYWdlKSA9PSBzdHIgYW5kIG1lc3NhZ2UgPT0gZXhwZWN0ZWRfbWVzc2FnZToKKyAg
ICAgICAgICAgIG1zZ3V0aWwuc2VuZF9tZXNzYWdlKHJlcXVlc3QsICdQQVNTOiBNZXNzYWdlICMl
ZC4nICUgdGVzdF9udW1iZXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtc2d1dGlsLnNl
bmRfbWVzc2FnZShyZXF1ZXN0LCAnRkFJTDogTWVzc2FnZSAjJWQ6IFJlY2VpdmVkIHVuZXhwZWN0
ZWQgbWVzc2FnZTogJXInICUgKHRlc3RfbnVtYmVyLCBtZXNzYWdlKSkKKworCitkZWYgYWxsX2Rp
c3RpbmN0X2J5dGVzKCk6CisgICAgcmV0dXJuICcnLmpvaW4oW2NocihpKSBmb3IgaSBpbiB4cmFu
Z2UoMjU2KV0pCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90
ZXN0cy9oeWJpL3NlbmQtZmlsZS1ibG9iLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1maWxlLWJsb2ItZXhwZWN0ZWQudHh0Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjUxNjQ5Y2U5ODRiZTE2ZjdmMWI3ODU1ZmVhYjU5YmQ4MDc0MWRlZjIKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJp
L3NlbmQtZmlsZS1ibG9iLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE2IEBACitXZWJTb2NrZXQ6
IFNlbmQgYSBGaWxlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK0dvdCBGaWxlU3lz
dGVtIG9iamVjdC4KK0ZpbGUgY3JlYXRlZC4KK1BBU1MgZmlsZUVudHJ5LmlzRmlsZSBpcyB0cnVl
CitXcm90ZSB0byBmaWxlLgorR290IEZpbGUgb2JqZWN0LgorUEFTUyBQQVNTOiBNZXNzYWdlICMw
LgorUEFTUyBjbG9zZUV2ZW50Lndhc0NsZWFuIGlzIHRydWUKK0RlbGV0aW5nIHRoZSBmaWxlLgor
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1m
aWxlLWJsb2ItZmFpbC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNv
Y2tldC90ZXN0cy9oeWJpL3NlbmQtZmlsZS1ibG9iLWZhaWwtZXhwZWN0ZWQudHh0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjlkNzE4ZjkwMDY5ZDU0YmQ0YmZmMzllNWYxNjEwMThhMzhlYzVkOTkKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQt
ZmlsZS1ibG9iLWZhaWwtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTYgQEAKK0NPTlNPTEUgTUVT
U0FHRTogbGluZSAwOiBGYWlsZWQgdG8gbG9hZCBCbG9iOiBlcnJvciBjb2RlID0gMQorV2ViU29j
a2V0IHNob3VsZCBmYWlsIHRoZSBjb25uZWN0aW9uIGlmIGl0IGhhcyBmYWlsZWQgdG8gcmVhZCBh
IEJsb2IuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVz
c2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworR290IEZpbGVTeXN0ZW0gb2Jq
ZWN0LgorRmlsZSBjcmVhdGVkLgorUEFTUyBmaWxlRW50cnkuaXNGaWxlIGlzIHRydWUKK1dyb3Rl
IHRvIGZpbGUuCitHb3QgRmlsZSBvYmplY3QuCitGaWxlIGRlbGV0ZWQuCitQQVNTIGNsb3NlRXZl
bnQud2FzQ2xlYW4gaXMgZmFsc2UKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKwor
VEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNv
Y2tldC90ZXN0cy9oeWJpL3NlbmQtZmlsZS1ibG9iLWZhaWwuaHRtbCBiL0xheW91dFRlc3RzL2h0
dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1maWxlLWJsb2ItZmFpbC5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjkyNjI2ZDhmMWUzYWM3MDk1ZTkzZjg2YjQ4ZWU3M2ExMjQ1NmU2MzEKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJp
L3NlbmQtZmlsZS1ibG9iLWZhaWwuaHRtbApAQCAtMCwwICsxLDEyNiBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8u
Li8uLi9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vLi4vLi4vanMtdGVzdC1yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJj
b25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KK2Rlc2NyaXB0
aW9uKCJXZWJTb2NrZXQgc2hvdWxkIGZhaWwgdGhlIGNvbm5lY3Rpb24gaWYgaXQgaGFzIGZhaWxl
ZCB0byByZWFkIGEgQmxvYi4iKTsKKword2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworaWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5v
dmVycmlkZVByZWZlcmVuY2UoIldlYktpdEhpeGllNzZXZWJTb2NrZXRQcm90b2NvbEVuYWJsZWQi
LCAwKTsKKworZnVuY3Rpb24gc3RhcnRzV2l0aCh0YXJnZXQsIHByZWZpeCkKK3sKKyAgICByZXR1
cm4gdGFyZ2V0LmluZGV4T2YocHJlZml4KSA9PT0gMDsKK30KKwordmFyIGZpbGVTeXN0ZW1TaXpl
ID0gMTAyNDsKK3ZhciBmaWxlTmFtZSA9ICJ3ZWJzb2NrZXQtc2VuZC1maWxlLWJsb2ItZmFpbC50
eHQiOwordmFyIG1lc3NhZ2VUb1dyaXRlID0gIlRoaXMgbWVzc2FnZSBzaG91bGRuJ3QgYmUgc2Vu
dC4iOworCitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICBpZiAoIXdpbmRvdy53ZWJraXRSZXF1
ZXN0RmlsZVN5c3RlbSkgeworICAgICAgICB0ZXN0RmFpbGVkKCJ3aW5kb3cud2Via2l0UmVxdWVz
dEZpbGVTeXN0ZW0gaXMgbm90IGF2YWlsYWJsZS4iKTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB3ZWJraXRSZXF1ZXN0RmlsZVN5c3RlbShU
RU1QT1JBUlksIGZpbGVTeXN0ZW1TaXplLCBkaWRHZXRGaWxlU3lzdGVtLCBkaWRGYWlsKTsKK30K
KworZnVuY3Rpb24gZGlkR2V0RmlsZVN5c3RlbShmaWxlU3lzdGVtKQoreworICAgIGRlYnVnKCJH
b3QgRmlsZVN5c3RlbSBvYmplY3QuIik7CisgICAgZmlsZVN5c3RlbS5yb290LmdldEZpbGUoZmls
ZU5hbWUsIHtjcmVhdGU6IHRydWV9LCBkaWRDcmVhdGVGaWxlLCBkaWRGYWlsKTsKK30KKwordmFy
IGZpbGVFbnRyeTsKKworZnVuY3Rpb24gZGlkQ3JlYXRlRmlsZShlbnRyeSkKK3sKKyAgICBkZWJ1
ZygiRmlsZSBjcmVhdGVkLiIpOworICAgIGZpbGVFbnRyeSA9IGVudHJ5OworICAgIHNob3VsZEJl
VHJ1ZSgiZmlsZUVudHJ5LmlzRmlsZSIpOworICAgIGZpbGVFbnRyeS5jcmVhdGVXcml0ZXIoZGlk
R2V0RmlsZVdyaXRlciwgZGlkRmFpbCk7Cit9CisKK2Z1bmN0aW9uIGRpZEdldEZpbGVXcml0ZXIo
d3JpdGVyKQoreworICAgIHdyaXRlci50cnVuY2F0ZSgwKTsKKyAgICB3cml0ZXIub25lcnJvciA9
IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRlc3RGYWlsZWQoIkZpbGVXcml0ZXIgb3BlcmF0
aW9uIGZhaWxlZC4iKTsKKyAgICAgICAgZW5kVGVzdCgpOworICAgIH07CisgICAgd3JpdGVyLm9u
d3JpdGUgPSBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBXZWJL
aXRCbG9iQnVpbGRlcigpOworICAgICAgICBidWlsZGVyLmFwcGVuZChtZXNzYWdlVG9Xcml0ZSk7
CisgICAgICAgIHdyaXRlci53cml0ZShidWlsZGVyLmdldEJsb2IoKSk7CisgICAgICAgIHdyaXRl
ci5vbndyaXRlID0gZGlkV3JpdGVGaWxlOworICAgIH07Cit9CisKK2Z1bmN0aW9uIGRpZFdyaXRl
RmlsZSgpCit7CisgICAgZGVidWcoIldyb3RlIHRvIGZpbGUuIik7CisgICAgZmlsZUVudHJ5LmZp
bGUoZGlkR2V0RmlsZSwgZGlkRmFpbCk7Cit9CisKK3ZhciBmaWxlT2JqZWN0OworCitmdW5jdGlv
biBkaWRHZXRGaWxlKGZpbGUpCit7CisgICAgZGVidWcoIkdvdCBGaWxlIG9iamVjdC4iKTsKKyAg
ICBmaWxlT2JqZWN0ID0gZmlsZTsKKworICAgIC8vIERlbGV0ZSB0aGUgZmlsZSBvYmplY3QgYmVm
b3JlIGl0IGlzIHJlYWQuIFRoaXMgc2hvdWxkIGNhdXNlIHRoZSBzdWJzZXF1ZW50IHJlYWQgb3Bl
cmF0aW9uCisgICAgLy8gdG8gZmFpbCByZWxpYWJseS4KKyAgICBmaWxlRW50cnkucmVtb3ZlKGRp
ZFJlbW92ZUZpbGUsIGRpZEZhaWwpOworfQorCitmdW5jdGlvbiBkaWRSZW1vdmVGaWxlKCkKK3sK
KyAgICBkZWJ1ZygiRmlsZSBkZWxldGVkLiIpOworICAgIGZpbGVFbnRyeSA9IG51bGw7IC8vIFRv
IHByZXZlbnQgdGhlIGZpbGUgZnJvbSBnZXR0aW5nIGRlbGV0ZWQgYWdhaW4uCisgICAgdmFyIHdz
ID0gbmV3IFdlYlNvY2tldCgid3M6Ly8xMjcuMC4wLjE6ODg4MC93ZWJzb2NrZXQvdGVzdHMvaHli
aS9lY2hvIik7CisgICAgd3Mub25vcGVuID0gZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgd3Mu
c2VuZChmaWxlT2JqZWN0KTsgLy8gVGhpcyBvcGVyYXRpb24gc2hvdWxkIGZhaWwgYW5kIHRoZSBj
b25uZWN0aW9uIHNob3VsZCBiZSBhYm9ydGVkLgorICAgIH07CisgICAgd3Mub25jbG9zZSA9IGZ1
bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAgY2xvc2VFdmVudCA9IGV2ZW50OworICAgICAg
ICBzaG91bGRCZUZhbHNlKCJjbG9zZUV2ZW50Lndhc0NsZWFuIik7CisgICAgICAgIGVuZFRlc3Qo
KTsKKyAgICB9OworfQorCitmdW5jdGlvbiBkaWRGYWlsKGZpbGVFcnJvcikKK3sKKyAgICB0ZXN0
RmFpbGVkKCJGaWxlU3lzdGVtIEFQSSBvcGVyYXRpb24gZmFpbGVkOiBlcnJvciBjb2RlID0gIiAr
IGZpbGVFcnJvci5jb2RlKTsKKyAgICBlbmRUZXN0KCk7Cit9CisKK2Z1bmN0aW9uIGVuZFRlc3Qo
KQoreworICAgIGlmIChmaWxlRW50cnkpIHsKKyAgICAgICAgZGVidWcoIkRlbGV0aW5nIHRoZSBm
aWxlLiIpOworICAgICAgICBmaWxlRW50cnkucmVtb3ZlKGZpbmlzaEpTVGVzdCwgZmluaXNoSlNU
ZXN0KTsKKyAgICB9IGVsc2UKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7Cit9CisKK3J1blRlc3Qo
KTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIuLi8uLi8uLi8uLi9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWZpbGUtYmxvYi5odG1sIGIvTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWZpbGUtYmxvYi5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjA2NGNiNjcwMzY0YTFhNmNkMjk1Y2MwYmI0NTQ0Y2U3ODUzMzUwN2MKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3Nl
bmQtZmlsZS1ibG9iLmh0bWwKQEAgLTAsMCArMSwxMjMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0
bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vLi4vanMt
dGVzdC1yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4u
Ly4uL2pzLXRlc3QtcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5PgorPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+
PC9kaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CitkZXNjcmlwdGlvbigiV2Vi
U29ja2V0OiBTZW5kIGEgRmlsZS4iKTsKKword2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOwor
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5vdmVycmlkZVByZWZlcmVuY2UoIldlYktpdEhpeGllNzZXZWJTb2NrZXRQcm90b2NvbEVuYWJs
ZWQiLCAwKTsKKworZnVuY3Rpb24gc3RhcnRzV2l0aCh0YXJnZXQsIHByZWZpeCkKK3sKKyAgICBy
ZXR1cm4gdGFyZ2V0LmluZGV4T2YocHJlZml4KSA9PT0gMDsKK30KKwordmFyIGZpbGVTeXN0ZW1T
aXplID0gMTAyNDsKK3ZhciBmaWxlTmFtZSA9ICJ3ZWJzb2NrZXQtc2VuZC1maWxlLWJsb2IudHh0
IjsKK3ZhciBtZXNzYWdlVG9Xcml0ZSA9ICJIZWxsbywgd29ybGQhIjsKKworZnVuY3Rpb24gcnVu
VGVzdCgpCit7CisgICAgaWYgKCF3aW5kb3cud2Via2l0UmVxdWVzdEZpbGVTeXN0ZW0pIHsKKyAg
ICAgICAgdGVzdEZhaWxlZCgid2luZG93LndlYmtpdFJlcXVlc3RGaWxlU3lzdGVtIGlzIG5vdCBh
dmFpbGFibGUuIik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgd2Via2l0UmVxdWVzdEZpbGVTeXN0ZW0oVEVNUE9SQVJZLCBmaWxlU3lzdGVt
U2l6ZSwgZGlkR2V0RmlsZVN5c3RlbSwgZGlkRmFpbCk7Cit9CisKK2Z1bmN0aW9uIGRpZEdldEZp
bGVTeXN0ZW0oZmlsZVN5c3RlbSkKK3sKKyAgICBkZWJ1ZygiR290IEZpbGVTeXN0ZW0gb2JqZWN0
LiIpOworICAgIGZpbGVTeXN0ZW0ucm9vdC5nZXRGaWxlKGZpbGVOYW1lLCB7Y3JlYXRlOiB0cnVl
fSwgZGlkQ3JlYXRlRmlsZSwgZGlkRmFpbCk7Cit9CisKK3ZhciBmaWxlRW50cnk7CisKK2Z1bmN0
aW9uIGRpZENyZWF0ZUZpbGUoZW50cnkpCit7CisgICAgZGVidWcoIkZpbGUgY3JlYXRlZC4iKTsK
KyAgICBmaWxlRW50cnkgPSBlbnRyeTsKKyAgICBzaG91bGRCZVRydWUoImZpbGVFbnRyeS5pc0Zp
bGUiKTsKKyAgICBmaWxlRW50cnkuY3JlYXRlV3JpdGVyKGRpZEdldEZpbGVXcml0ZXIsIGRpZEZh
aWwpOworfQorCitmdW5jdGlvbiBkaWRHZXRGaWxlV3JpdGVyKHdyaXRlcikKK3sKKyAgICB3cml0
ZXIudHJ1bmNhdGUoMCk7CisgICAgd3JpdGVyLm9uZXJyb3IgPSBmdW5jdGlvbigpCisgICAgewor
ICAgICAgICB0ZXN0RmFpbGVkKCJGaWxlV3JpdGVyIG9wZXJhdGlvbiBmYWlsZWQuIik7CisgICAg
ICAgIGVuZFRlc3QoKTsKKyAgICB9OworICAgIHdyaXRlci5vbndyaXRlID0gZnVuY3Rpb24oKQor
ICAgIHsKKyAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKKyAg
ICAgICAgYnVpbGRlci5hcHBlbmQobWVzc2FnZVRvV3JpdGUpOworICAgICAgICB3cml0ZXIud3Jp
dGUoYnVpbGRlci5nZXRCbG9iKCkpOworICAgICAgICB3cml0ZXIub253cml0ZSA9IGRpZFdyaXRl
RmlsZTsKKyAgICB9OworfQorCitmdW5jdGlvbiBkaWRXcml0ZUZpbGUoKQoreworICAgIGRlYnVn
KCJXcm90ZSB0byBmaWxlLiIpOworICAgIGZpbGVFbnRyeS5maWxlKGRpZEdldEZpbGUsIGRpZEZh
aWwpOworfQorCit2YXIgY2xvc2VFdmVudDsKKworZnVuY3Rpb24gZGlkR2V0RmlsZShmaWxlKQor
eworICAgIGRlYnVnKCJHb3QgRmlsZSBvYmplY3QuIik7CisgICAgdmFyIHdzID0gbmV3IFdlYlNv
Y2tldCgid3M6Ly8xMjcuMC4wLjE6ODg4MC93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWZpbGUt
YmxvYiIpOworICAgIHdzLm9ub3BlbiA9IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHdzLnNl
bmQoZmlsZSk7CisgICAgfTsKKyAgICB3cy5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkKKyAg
ICB7CisgICAgICAgIHZhciBtZXNzYWdlID0gZXZlbnQuZGF0YTsKKyAgICAgICAgaWYgKHN0YXJ0
c1dpdGgobWVzc2FnZSwgIlBBU1MiKSkKKyAgICAgICAgICAgIHRlc3RQYXNzZWQobWVzc2FnZSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRlc3RGYWlsZWQobWVzc2FnZSk7CisgICAgfTsK
KyAgICB3cy5vbmNsb3NlID0gZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICBjbG9zZUV2
ZW50ID0gZXZlbnQ7CisgICAgICAgIHNob3VsZEJlVHJ1ZSgiY2xvc2VFdmVudC53YXNDbGVhbiIp
OworICAgICAgICBlbmRUZXN0KCk7CisgICAgfTsKK30KKworZnVuY3Rpb24gZGlkRmFpbChmaWxl
RXJyb3IpCit7CisgICAgdGVzdEZhaWxlZCgiRmlsZVN5c3RlbSBBUEkgb3BlcmF0aW9uIGZhaWxl
ZDogZXJyb3IgY29kZSA9ICIgKyBmaWxlRXJyb3IuY29kZSk7CisgICAgZW5kVGVzdCgpOworfQor
CitmdW5jdGlvbiBlbmRUZXN0KCkKK3sKKyAgICBpZiAoZmlsZUVudHJ5KSB7CisgICAgICAgIGRl
YnVnKCJEZWxldGluZyB0aGUgZmlsZS4iKTsKKyAgICAgICAgZmlsZUVudHJ5LnJlbW92ZShmaW5p
c2hKU1Rlc3QsIGZpbmlzaEpTVGVzdCk7CisgICAgfSBlbHNlCisgICAgICAgIGZpbmlzaEpTVGVz
dCgpOworfQorCitydW5UZXN0KCk7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwor
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vanMtdGVzdC1yZXNvdXJjZXMvanMt
dGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1maWxlLWJsb2Jf
d3NoLnB5IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5k
LWZpbGUtYmxvYl93c2gucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGFhNDQwNDcxYWY4M2FiMjYyODY3NTFjM2Ux
ODg4MmY0ODRkYjc4YwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMv
d2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1maWxlLWJsb2Jfd3NoLnB5CkBAIC0wLDAgKzEsMjIg
QEAKK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBjb21tb24KK2Zyb20gbW9kX3B5d2Vic29j
a2V0IGltcG9ydCBtc2d1dGlsCisKKworZGVmIHdlYl9zb2NrZXRfZG9fZXh0cmFfaGFuZHNoYWtl
KHJlcXVlc3QpOgorICAgIHBhc3MgIyBBbHdheXMgYWNjZXB0LgorCisKK2RlZiB3ZWJfc29ja2V0
X3RyYW5zZmVyX2RhdGEocmVxdWVzdCk6CisgICAgZXhwZWN0ZWRfbWVzc2FnZXMgPSBbJ0hlbGxv
LCB3b3JsZCEnXQorCisgICAgZm9yIHRlc3RfbnVtYmVyLCBleHBlY3RlZF9tZXNzYWdlIGluIGVu
dW1lcmF0ZShleHBlY3RlZF9tZXNzYWdlcyk6CisgICAgICAgICMgRklYTUU6IFVzZSBiZXR0ZXIg
QVBJLgorICAgICAgICBvcGNvZGUsIHBheWxvYWQsIGZpbmFsLCB1bnVzZWRfcmVzZXJ2ZWQxLCB1
bnVzZWRfcmVzZXJ2ZWQyLCB1bnVzZWRfcmVzZXJ2ZWQzID0gcmVxdWVzdC53c19zdHJlYW0uX3Jl
Y2VpdmVfZnJhbWUoKQorICAgICAgICBpZiBvcGNvZGUgPT0gY29tbW9uLk9QQ09ERV9CSU5BUlkg
YW5kIHBheWxvYWQgPT0gZXhwZWN0ZWRfbWVzc2FnZSBhbmQgZmluYWw6CisgICAgICAgICAgICBt
c2d1dGlsLnNlbmRfbWVzc2FnZShyZXF1ZXN0LCAnUEFTUzogTWVzc2FnZSAjJWQuJyAlIHRlc3Rf
bnVtYmVyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbXNndXRpbC5zZW5kX21lc3NhZ2Uo
cmVxdWVzdCwgJ0ZBSUw6IE1lc3NhZ2UgIyVkOiBSZWNlaXZlZCB1bmV4cGVjdGVkIGZyYW1lOiBv
cGNvZGUgPSAlciwgcGF5bG9hZCA9ICVyLCBmaW5hbCA9ICVyJyAlICh0ZXN0X251bWJlciwgb3Bj
b2RlLCBwYXlsb2FkLCBmaW5hbCkpCisKKworZGVmIGFsbF9kaXN0aW5jdF9ieXRlcygpOgorICAg
IHJldHVybiAnJy5qb2luKFtjaHIoaSkgZm9yIGkgaW4geHJhbmdlKDI1NildKQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS93b3JrZXJzL3Jl
c291cmNlcy9zZW5kLWJsb2IuanMgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90
ZXN0cy9oeWJpL3dvcmtlcnMvcmVzb3VyY2VzL3NlbmQtYmxvYi5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZWEw
NTAzYTA5NjAyMzUyZjM5MzE5MDI2Mzc5OTgyNTEwMzExM2JmCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS93b3JrZXJzL3Jlc291
cmNlcy9zZW5kLWJsb2IuanMKQEAgLTAsMCArMSw1MSBAQAorZnVuY3Rpb24gc3RhcnRzV2l0aCh0
YXJnZXQsIHByZWZpeCkKK3sKKyAgICByZXR1cm4gdGFyZ2V0LmluZGV4T2YocHJlZml4KSA9PT0g
MDsKK30KKworZnVuY3Rpb24gY3JlYXRlQmxvYkNvbnRhaW5pbmdIZWxsb1dvcmxkKCkKK3sKKyAg
ICB2YXIgYnVpbGRlciA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOworICAgIGJ1aWxkZXIuYXBw
ZW5kKCJIZWxsbywgd29ybGQhIik7CisgICAgcmV0dXJuIGJ1aWxkZXIuZ2V0QmxvYigpOworfQor
CitmdW5jdGlvbiBjcmVhdGVFbXB0eUJsb2IoKQoreworICAgIHZhciBidWlsZGVyID0gbmV3IFdl
YktpdEJsb2JCdWlsZGVyKCk7CisgICAgcmV0dXJuIGJ1aWxkZXIuZ2V0QmxvYigpOworfQorCitm
dW5jdGlvbiBjcmVhdGVCbG9iQ29udGFpbmluZ0FsbERpc3RpbmN0Qnl0ZXMoKQoreworICAgIHZh
ciBhcnJheSA9IG5ldyBVaW50OEFycmF5KDI1Nik7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAy
NTY7ICsraSkKKyAgICAgICAgYXJyYXlbaV0gPSBpOworICAgIHZhciBidWlsZGVyID0gbmV3IFdl
YktpdEJsb2JCdWlsZGVyKCk7CisgICAgYnVpbGRlci5hcHBlbmQoYXJyYXkuYnVmZmVyKTsKKyAg
ICByZXR1cm4gYnVpbGRlci5nZXRCbG9iKCk7Cit9CisKK3ZhciB1cmwgPSAid3M6Ly8xMjcuMC4w
LjE6ODg4MC93ZWJzb2NrZXQvdGVzdHMvaHliaS93b3JrZXJzL3Jlc291cmNlcy9zZW5kLWJsb2Ii
OwordmFyIHdzID0gbmV3IFdlYlNvY2tldCh1cmwpOworCit3cy5vbm9wZW4gPSBmdW5jdGlvbigp
Cit7CisgICAgd3Muc2VuZChjcmVhdGVCbG9iQ29udGFpbmluZ0hlbGxvV29ybGQoKSk7CisgICAg
d3Muc2VuZChjcmVhdGVFbXB0eUJsb2IoKSk7CisgICAgd3Muc2VuZChjcmVhdGVCbG9iQ29udGFp
bmluZ0FsbERpc3RpbmN0Qnl0ZXMoKSk7Cit9OworCit3cy5vbm1lc3NhZ2UgPSBmdW5jdGlvbihl
dmVudCkKK3sKKyAgICBwb3N0TWVzc2FnZShldmVudC5kYXRhKTsKK307CisKK3dzLm9uY2xvc2Ug
PSBmdW5jdGlvbihjbG9zZUV2ZW50KQoreworICAgIGlmIChjbG9zZUV2ZW50Lndhc0NsZWFuID09
PSB0cnVlKQorICAgICAgICBwb3N0TWVzc2FnZSgiUEFTUzogY2xvc2VFdmVudC53YXNDbGVhbiBp
cyB0cnVlLiIpOworICAgIGVsc2UKKyAgICAgICAgcG9zdE1lc3NhZ2UoIkZBSUw6IGNsb3NlRXZl
bnQud2FzQ2xlYW4gc2hvdWxkIGJlIHRydWUsIGJ1dCB3YXM6ICIgKyBjbG9zZUV2ZW50Lndhc0Ns
ZWFuKTsKKyAgICBwb3N0TWVzc2FnZSgiRE9ORSIpOworfTsKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvd29ya2Vycy9yZXNvdXJjZXMvc2Vu
ZC1ibG9iX3dzaC5weSBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5
Ymkvd29ya2Vycy9yZXNvdXJjZXMvc2VuZC1ibG9iX3dzaC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMjRlM2Y0
ZDA3OTQ1YzkyY2FhYmRjMDM3ZWM1MDA4MjRhNDJhMWEyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS93b3JrZXJzL3Jlc291cmNl
cy9zZW5kLWJsb2Jfd3NoLnB5CkBAIC0wLDAgKzEsMjEgQEAKK2Zyb20gbW9kX3B5d2Vic29ja2V0
IGltcG9ydCBjb21tb24KK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBtc2d1dGlsCisKKwor
ZGVmIHdlYl9zb2NrZXRfZG9fZXh0cmFfaGFuZHNoYWtlKHJlcXVlc3QpOgorICAgIHBhc3MgIyBB
bHdheXMgYWNjZXB0LgorCisKK2RlZiB3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEocmVxdWVzdCk6
CisgICAgZXhwZWN0ZWRfbWVzc2FnZXMgPSBbJ0hlbGxvLCB3b3JsZCEnLCAnJywgYWxsX2Rpc3Rp
bmN0X2J5dGVzKCldCisKKyAgICBmb3IgdGVzdF9udW1iZXIsIGV4cGVjdGVkX21lc3NhZ2UgaW4g
ZW51bWVyYXRlKGV4cGVjdGVkX21lc3NhZ2VzKToKKyAgICAgICAgbWVzc2FnZSA9IG1zZ3V0aWwu
cmVjZWl2ZV9tZXNzYWdlKHJlcXVlc3QpCisgICAgICAgIGlmIHR5cGUobWVzc2FnZSkgPT0gc3Ry
IGFuZCBtZXNzYWdlID09IGV4cGVjdGVkX21lc3NhZ2U6CisgICAgICAgICAgICBtc2d1dGlsLnNl
bmRfbWVzc2FnZShyZXF1ZXN0LCAnUEFTUzogTWVzc2FnZSAjJWQuJyAlIHRlc3RfbnVtYmVyKQor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgbXNndXRpbC5zZW5kX21lc3NhZ2UocmVxdWVzdCwg
J0ZBSUw6IE1lc3NhZ2UgIyVkOiBSZWNlaXZlZCB1bmV4cGVjdGVkIG1lc3NhZ2U6ICVyJyAlICh0
ZXN0X251bWJlciwgbWVzc2FnZSkpCisKKworZGVmIGFsbF9kaXN0aW5jdF9ieXRlcygpOgorICAg
IHJldHVybiAnJy5qb2luKFtjaHIoaSkgZm9yIGkgaW4geHJhbmdlKDI1NildKQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS93b3JrZXJzL3Nl
bmQtYmxvYi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90
ZXN0cy9oeWJpL3dvcmtlcnMvc2VuZC1ibG9iLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MzNi
YjdlMzlmZjU1NTZhMzNhMTE0OGY1MTQ4MDljZTU0Y2Y2OTY4Ci0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS93b3JrZXJzL3NlbmQt
YmxvYi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMyBAQAorV2ViU29ja2V0OiBTZW5kIEJsb2Jz
IGluIFdlYiBXb3JrZXJzLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1BBU1MgUEFT
UzogTWVzc2FnZSAjMC4KK1BBU1MgUEFTUzogTWVzc2FnZSAjMS4KK1BBU1MgUEFTUzogTWVzc2Fn
ZSAjMi4KK1BBU1MgUEFTUzogY2xvc2VFdmVudC53YXNDbGVhbiBpcyB0cnVlLgorRE9ORQorUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvd29ya2Vycy9z
ZW5kLWJsb2IuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5
Ymkvd29ya2Vycy9zZW5kLWJsb2IuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNTc0NmViMjdmNDcxYjIwNGFl
ZTYzYTliNTIxNjA1MTA4Y2E0M2I4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS93b3JrZXJzL3NlbmQtYmxvYi5odG1sCkBAIC0w
LDAgKzEsNDAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0i
c3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vLi4vLi4vanMtdGVzdC1yZXNvdXJjZXMvanMtdGVz
dC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uLy4uLy4uL2pzLXRlc3QtcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0i
ZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHR5
cGU9InRleHQvamF2YXNjcmlwdCI+CitkZXNjcmlwdGlvbigiV2ViU29ja2V0OiBTZW5kIEJsb2Jz
IGluIFdlYiBXb3JrZXJzLiIpOworCit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CitpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLm92
ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0SGl4aWU3NldlYlNvY2tldFByb3RvY29sRW5hYmxlZCIs
IDApOworCitmdW5jdGlvbiBzdGFydHNXaXRoKHN0ciwgcHJlZml4KQoreworICAgIHJldHVybiBz
dHIuaW5kZXhPZihwcmVmaXgpID09IDA7Cit9CisKK3ZhciB3b3JrZXIgPSBuZXcgV29ya2VyKCJy
ZXNvdXJjZXMvc2VuZC1ibG9iLmpzIik7Cit3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24gKGV2
ZW50KQoreworICAgIHZhciBtZXNzYWdlID0gZXZlbnQuZGF0YTsKKyAgICBpZiAoc3RhcnRzV2l0
aChtZXNzYWdlLCAiUEFTUyIpKQorICAgICAgICB0ZXN0UGFzc2VkKG1lc3NhZ2UpOworICAgIGVs
c2UgaWYgKHN0YXJ0c1dpdGgobWVzc2FnZSwgIkZBSUwiKSkKKyAgICAgICAgdGVzdEZhaWxlZCht
ZXNzYWdlKQorICAgIGVsc2UKKyAgICAgICAgZGVidWcobWVzc2FnZSk7CisgICAgaWYgKG1lc3Nh
Z2UgPT09ICJET05FIikKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7Cit9OworCit2YXIgc3VjY2Vz
c2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uLy4u
Ly4uL2pzLXRlc3QtcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZCBi
L0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCmluZGV4IGU5YjZmMWIwMTAwMTViNWQ3
OWZkNWY2NmY2ODlkZTgzM2ViYTU0NGIuLjcxZWIxYmQ4ZTJkMmY5NTk1YTg1NTI3NTUzODFjYTlm
YTRlZDFhODIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCisr
KyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCkBAIC0zNjYsNiArMzY2LDggQEAg
ZmFzdC9maWxlc3lzdGVtCiBodHRwL3Rlc3RzL2ZpbGVzeXN0ZW0KIGh0dHAvdGVzdHMvbG9jYWwv
ZmlsZWFwaQogaHR0cC90ZXN0cy9zZWN1cml0eS9maWxlc3lzdGVtLWlmcmFtZS1mcm9tLXJlbW90
ZS5odG1sCitodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtZmlsZS1ibG9iLmh0
bWwKK2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1maWxlLWJsb2ItZmFpbC5o
dG1sCiAKICMgUmVxdWlyZXMgV2ViUCBzdXBwb3J0LgogZmFzdC9pbWFnZXMvd2VicC1pbWFnZS1k
ZWNvZGluZy5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBl
ZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCmluZGV4IDE1NmRiY2NhY2Q3OTZl
OWMzZTMyZDkwZmVhZTNjZDFiYmY1Y2Y1ZjUuLjk2OTM5MTkwMTU2OWI5MTA2Zjg0M2JjYzc1M2Vm
MDE5NjAwNDNiYWQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVk
CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCkBAIC0yNzcsNiArMjc3LDgg
QEAgaHR0cC90ZXN0cy9tZWRpYS92aWRlby1idWZmZXJlZC5odG1sCiBmYXN0L2ZpbGVzeXN0ZW0K
IGh0dHAvdGVzdHMvZmlsZXN5c3RlbQogaHR0cC90ZXN0cy9zZWN1cml0eS9maWxlc3lzdGVtLWlm
cmFtZS1mcm9tLXJlbW90ZS5odG1sCitodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3Nl
bmQtZmlsZS1ibG9iLmh0bWwKK2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1m
aWxlLWJsb2ItZmFpbC5odG1sCiAKICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQ2MjIzCiAjIFRoZSBXZWJLaXQgcGx1Z2luIGltcGxlbWVudGF0aW9uIGRvZXMgbm90
IHN1cHBvcnQgaWZyYW1lIHNoaW1zLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
cXQvU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQKaW5kZXggMzRhNGNm
ZDIyNzcwOTRkNjlmYmExYjEyMDdmNzU1NzUxNzkyMmJiYy4uOWJjZGNkMmM4OWE5MDQxMjE4ZThk
MGY4YmYwNjZjMWJmMGI2M2YzMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQv
U2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCkBAIC05OSw2ICs5
OSw4IEBAIHN2Zy93ZWJhcmNoaXZlCiBmYXN0L2ZpbGVzeXN0ZW0KIGh0dHAvdGVzdHMvZmlsZXN5
c3RlbQogaHR0cC90ZXN0cy9zZWN1cml0eS9maWxlc3lzdGVtLWlmcmFtZS1mcm9tLXJlbW90ZS5o
dG1sCitodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtZmlsZS1ibG9iLmh0bWwK
K2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1maWxlLWJsb2ItZmFpbC5odG1s
CiAKICMgRU5BQkxFKFFVT1RBKSBpcyBkaXNhYmxlZC4KIHN0b3JhZ2Uvc3RvcmFnZWluZm8tcXVl
cnktdXNhZ2UuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBw
ZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAppbmRleCAxZTRjYzhjYWE3MGQ5
MWNiODY5Y2IyNzBiMzE4YzY1YzM3NjA1ZTY4Li4zZDNiNjRmOTA3Njc1MWJjYjQwYmQ3YWY1MDNl
NWYxM2Q2OGQ2OGY1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBl
ZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZApAQCAtMTIwMiw2ICsxMjAy
LDggQEAgZmFzdC9wYXJzZXIvcHJlLWh0bWw1LXBhcnNlci1xdWlya3MuaHRtbAogZmFzdC9maWxl
c3lzdGVtCiBodHRwL3Rlc3RzL2ZpbGVzeXN0ZW0KIGh0dHAvdGVzdHMvc2VjdXJpdHkvZmlsZXN5
c3RlbS1pZnJhbWUtZnJvbS1yZW1vdGUuaHRtbAoraHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMv
aHliaS9zZW5kLWZpbGUtYmxvYi5odG1sCitodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJp
L3NlbmQtZmlsZS1ibG9iLWZhaWwuaHRtbAogCiAjIExheW91dFRlc3RDb250cm9sbGVyOjpub2Rl
c0Zyb21SZWN0IGlzIG5vdCBzdXBwb3J0ZWQuCiBmYXN0L2RvbS9ub2Rlc0Zyb21SZWN0LWJhc2lj
Lmh0bWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwppbmRleCAwYWZhYzUxZjMxZTFjNDljY2VjNWYwMzJiZDhlMzFiOTI0NTYw
NjA3Li5kMzExYjU2MjRkNDY0ZWQwZTc1M2M5MzA4Y2U1YjU3YmM0ZDZiZWM3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsNDAgQEAKKzIwMTEtMDktMDEgIFl1dGEgS2l0YW11cmEgIDx5dXRha0BjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgV2ViU29ja2V0OiBTZW5kIEJsb2IgYXMgV2ViU29ja2V0IGJp
bmFyeSBtZXNzYWdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD02NzQ2NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRlc3RzOiBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtYmxvYi5odG1s
CisgICAgICAgICAgICAgICBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtZmls
ZS1ibG9iLWZhaWwuaHRtbAorICAgICAgICAgICAgICAgaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVz
dHMvaHliaS9zZW5kLWZpbGUtYmxvYi5odG1sCisgICAgICAgICAgICAgICBodHRwL3Rlc3RzL3dl
YnNvY2tldC90ZXN0cy9oeWJpL3dvcmtlcnMvc2VuZC1ibG9iLmh0bWwKKworICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTV2ViU29ja2V0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTV2Vi
U29ja2V0OjpzZW5kKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhXZWJTb2NrZXRD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhXZWJTb2NrZXQ6OnNlbmRDYWxsYmFjayk6
CisgICAgICAgICogd2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oOgorICAg
ICAgICAqIHdlYnNvY2tldHMvV2ViU29ja2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlNv
Y2tldDo6c2VuZCk6CisgICAgICAgICogd2Vic29ja2V0cy9XZWJTb2NrZXQuaDoKKyAgICAgICAg
KiB3ZWJzb2NrZXRzL1dlYlNvY2tldC5pZGw6CisgICAgICAgIEZpeGluZyBjb2RlIGdlbmVyYXRv
ciBkaWQgbm90IHNvdW5kIGVhc3ksIGJlY2F1c2UgdGhlcmUgYXJlIHNvbWUgY2xhc3NlcyBkZXBl
bmRpbmcgb24KKyAgICAgICAgYnJva2VuIGJlaGF2aW9yIG9mIGN1cnJlbnQgY29kZSBnZW5lcmF0
b3IgKG9uZSBzdWNoIGV4YW1wbGUgaXMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKS4KKyAgICAg
ICAgQXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCwgbmV3IGN1c3RvbSBoYW5kbGVycyBmb3Igc2Vu
ZCgpIGFyZSBhZGRlZC4KKyAgICAgICAgKiB3ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Q2hhbm5lbDo6c2VuZCk6CisgICAgICAgICog
d2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmg6CisgICAgICAgICogd2Vic29ja2V0cy9Xb3Jr
ZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3Jr
ZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6c2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpX
b3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6UGVlcjo6c2VuZCk6CisgICAgICAgIChX
ZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6bWFpblRocmVhZFNlbmRC
bG9iKToKKyAgICAgICAgQSBCbG9iIGNhbiBiZSBkZXNlcmlhbGl6ZWQgZnJvbSB1cmwsIHR5cGUg
YW5kIHNpemUuCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hh
bm5lbDo6QnJpZGdlOjpzZW5kKToKKyAgICAgICAgS1VSTCwgU3RyaW5nIGFuZCBsb25nIGxvbmcg
KGNvcnJlc3BvbmRpbmcgdG8gdXJsLCB0eXBlIGFuZCBzaXplLCByZXNwZWN0aXZlbHkpIGNhbiBi
ZSBwYXNzZWQKKyAgICAgICAgc2FmZWx5IGFjcm9zcyB0aHJlYWRzLgorICAgICAgICAqIHdlYnNv
Y2tldHMvV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaDoKKwogMjAxMS0wOS0wMSAg
S2VudGFybyBIYXJhICA8aGFyYWtlbkBnb29nbGUuY29tPgogCiAgICAgICAgIEdlbmVyYXRlIGEg
RmlsZVJlYWRlciBjb25zdHJ1Y3RvciBvZiBWOCB1c2luZyB0aGUgSURMICdDb25zdHJ1Y3Rvcicg
ZXh0ZW5kZWQgYXR0cmlidXRlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1dlYlNvY2tldEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dl
YlNvY2tldEN1c3RvbS5jcHAKaW5kZXggYWY1ZGFjYTU1NWUwODllYzEyMjU4YzYxNzIyYzYwN2Nk
ZjMwMTZjYS4uMWI5NTFhMDQwOGQ5MDQ1MDg1NmNiMjJkZGZlYTAyZDg2MWYyZTYxNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDdXN0b20uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q3VzdG9tLmNwcApAQCAt
MzUsOCArMzUsOSBAQAogCiAjaW5jbHVkZSAiSlNXZWJTb2NrZXQuaCIKIAotI2luY2x1ZGUgIktV
UkwuaCIKKyNpbmNsdWRlICJKU0Jsb2IuaCIKICNpbmNsdWRlICJKU0V2ZW50TGlzdGVuZXIuaCIK
KyNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiV2ViU29ja2V0LmgiCiAjaW5jbHVkZSA8cnVu
dGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTg1LDYgKzg2LDMwIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvcjo6Y29u
c3RydWN0SlNXZWJTb2NrZXQoRXhlY1N0CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShDUkVB
VEVfRE9NX1dSQVBQRVIoZXhlYywganNDb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCksIFdlYlNv
Y2tldCwgd2ViU29ja2V0LmdldCgpKSk7CiB9CiAKK0pTVmFsdWUgSlNXZWJTb2NrZXQ6OnNlbmQo
RXhlY1N0YXRlKiBleGVjKQoreworICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQorICAg
ICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBjcmVhdGVTeW50YXhFcnJvcihleGVjLCAiTm90
IGVub3VnaCBhcmd1bWVudHMiKSk7CisKKyAgICBKU1ZhbHVlIG1lc3NhZ2UgPSBleGVjLT5hcmd1
bWVudCgwKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBib29sIHJlc3VsdDsKKyAg
ICBpZiAobWVzc2FnZS5pbmhlcml0cygmSlNCbG9iOjpzX2luZm8pKQorICAgICAgICByZXN1bHQg
PSBpbXBsKCktPnNlbmQodG9CbG9iKG1lc3NhZ2UpLCBlYyk7CisgICAgZWxzZSB7CisgICAgICAg
IFN0cmluZyBzdHJpbmdNZXNzYWdlID0gdXN0cmluZ1RvU3RyaW5nKG1lc3NhZ2UudG9TdHJpbmco
ZXhlYykpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgcmVzdWx0ID0gaW1wbCgpLT5zZW5kKHN0cmlu
Z01lc3NhZ2UsIGVjKTsKKyAgICB9CisgICAgaWYgKGVjKSB7CisgICAgICAgIHNldERPTUV4Y2Vw
dGlvbihleGVjLCBlYyk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKwor
ICAgIHJldHVybiBqc0Jvb2xlYW4ocmVzdWx0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOFdlYlNvY2tldEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhXZWJTb2NrZXRDdXN0b20uY3BwCmluZGV4IGFmZDkxZjZmYjI0NmIwNDA2NWI0MjFhMmJl
ZDIxZjVlZjYxMjRjY2UuLjI3ZGI2N2U2YjlmNDliNWU2OGY5MTI1MjFkYzhkMjhlMzdkY2Y0Y2Qg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYlNvY2tl
dEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2Vi
U29ja2V0Q3VzdG9tLmNwcApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAj
aW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJW
OEJsb2IuaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCiAjaW5jbHVkZSAiVjhVdGlsaXRpZXMuaCIK
ICNpbmNsdWRlICJXZWJTb2NrZXQuaCIKQEAgLTEwOCw2ICsxMDksMzQgQEAgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IFY4V2ViU29ja2V0Ojpjb25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1
bWVudHMmIGFyZ3MKICAgICByZXR1cm4gYXJncy5Ib2xkZXIoKTsKIH0KIAordjg6OkhhbmRsZTx2
ODo6VmFsdWU+IFY4V2ViU29ja2V0OjpzZW5kQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYg
YXJncykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5XZWJTb2NrZXQuc2VuZCgpIik7CisKKyAgICBp
ZiAoIWFyZ3MuTGVuZ3RoKCkpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJOb3QgZW5vdWdo
IGFyZ3VtZW50cyIsIFY4UHJveHk6OlN5bnRheEVycm9yKTsKKworICAgIFdlYlNvY2tldCogd2Vi
U29ja2V0ID0gVjhXZWJTb2NrZXQ6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOworICAgIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBtZXNzYWdlID0gYXJnc1swXTsKKyAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKKyAgICBib29sIHJlc3VsdDsKKyAgICBpZiAoVjhCbG9iOjpIYXNJbnN0YW5jZShtZXNz
YWdlKSkgeworICAgICAgICBCbG9iKiBibG9iID0gVjhCbG9iOjp0b05hdGl2ZSh2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+OjpDYXN0KG1lc3NhZ2UpKTsKKyAgICAgICAgQVNTRVJUKGJsb2IpOworICAg
ICAgICByZXN1bHQgPSB3ZWJTb2NrZXQtPnNlbmQoYmxvYiwgZWMpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIHY4OjpUcnlDYXRjaCB0cnlDYXRjaDsKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6U3Ry
aW5nPiBzdHJpbmdNZXNzYWdlID0gbWVzc2FnZS0+VG9TdHJpbmcoKTsKKyAgICAgICAgaWYgKHRy
eUNhdGNoLkhhc0NhdWdodCgpKQorICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IodHJ5Q2F0
Y2guRXhjZXB0aW9uKCkpOworICAgICAgICByZXN1bHQgPSB3ZWJTb2NrZXQtPnNlbmQodG9XZWJD
b3JlU3RyaW5nKG1lc3NhZ2UpLCBlYyk7CisgICAgfQorICAgIGlmIChlYykKKyAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoZWMpOworCisgICAgcmV0dXJuIHY4Qm9vbGVhbihyZXN1bHQpOworfQor
CiB9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgIC8vIEVOQUJMRShXRUJfU09DS0VU
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvVGhyZWFkYWJsZVdlYlNv
Y2tldENoYW5uZWwuaCBiL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvVGhyZWFkYWJsZVdlYlNv
Y2tldENoYW5uZWwuaAppbmRleCBjZDljZTI1MmE0Y2Q1YmQ2N2E3MzljZmM1MzMyNzA4ZTBlZDQ4
Y2ZlLi4zN2U5MTM5ZDE0YjMwZDk3NTgxNmM3OGVmYzNlNzlkNzFlMzVjNTU4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1RocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bC5oCkBAIC0zOSw2ICszOSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQmxv
YjsKIGNsYXNzIEtVUkw7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xhc3MgV2Vi
U29ja2V0Q2hhbm5lbENsaWVudDsKQEAgLTUzLDYgKzU0LDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBjb25uZWN0KGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHByb3RvY29sKSA9IDA7
CiAgICAgdmlydHVhbCBTdHJpbmcgc3VicHJvdG9jb2woKSA9IDA7IC8vIFdpbGwgYmUgYXZhaWxh
YmxlIGFmdGVyIGRpZENvbm5lY3QoKSBjYWxsYmFjayBpcyBpbnZva2VkLgogICAgIHZpcnR1YWwg
Ym9vbCBzZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBz
ZW5kKGNvbnN0IEJsb2ImIGJpbmFyeURhdGEpID0gMDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxv
bmcgYnVmZmVyZWRBbW91bnQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCkg
PSAwOwogICAgIC8vIExvZyB0aGUgcmVhc29uIHRleHQgYW5kIGNsb3NlIHRoZSBjb25uZWN0aW9u
LiBXaWxsIGNhbGwgZGlkQ2xvc2UoKS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYnNv
Y2tldHMvV2ViU29ja2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0
LmNwcAppbmRleCBmOTg2YzUxMzQwOWJjYWNkYjg5ZGQ2MzMwY2EyOTQ1MTAxNTM0Nzk5Li5iYWI5
ZWI5M2UyODFjYWVlMmUxZTUzOWNlN2VhZDI1MDllOTE4MjBiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd2Vi
c29ja2V0cy9XZWJTb2NrZXQuY3BwCkBAIC0yNjMsNiArMjYzLDIyIEBAIGJvb2wgV2ViU29ja2V0
OjpzZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgcmV0
dXJuIG1fY2hhbm5lbC0+c2VuZChtZXNzYWdlKTsKIH0KIAorYm9vbCBXZWJTb2NrZXQ6OnNlbmQo
QmxvYiogYmluYXJ5RGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgTE9HKE5ldHdvcmss
ICJXZWJTb2NrZXQgJXAgc2VuZCBibG9iICVzIiwgdGhpcywgYmluYXJ5RGF0YS0+dXJsKCkuc3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgQVNTRVJUKGJpbmFyeURhdGEpOworICAgIGlmICht
X3N0YXRlID09IENPTk5FQ1RJTkcpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAobV9zdGF0ZSA9PSBDTE9TSU5H
IHx8IG1fc3RhdGUgPT0gQ0xPU0VEKSB7CisgICAgICAgIG1fYnVmZmVyZWRBbW91bnRBZnRlckNs
b3NlICs9IGJpbmFyeURhdGEtPnNpemUoKSArIGdldEZyYW1pbmdPdmVyaGVhZChiaW5hcnlEYXRh
LT5zaXplKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIEFTU0VSVChtX2No
YW5uZWwpOworICAgIHJldHVybiBtX2NoYW5uZWwtPnNlbmQoKmJpbmFyeURhdGEpOworfQorCiB2
b2lkIFdlYlNvY2tldDo6Y2xvc2UoKQogewogICAgIExPRyhOZXR3b3JrLCAiV2ViU29ja2V0ICVw
IGNsb3NlIiwgdGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dl
YlNvY2tldC5oIGIvU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuaAppbmRleCA3
NjY1OWYzMjgzNzU1NGQ5ZTgxNWUxMTI2OGYyNjMxNGRkYTc2OTUyLi4wMjJjNzFhZmQ2NmQ0OTI3
NjkxNGU5NWFmNTUyMDI5MjVlYmU5ZTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJz
b2NrZXRzL1dlYlNvY2tldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29j
a2V0LmgKQEAgLTQ2LDYgKzQ2LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBC
bG9iOwogY2xhc3MgVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw7CiAKIGNsYXNzIFdlYlNvY2tl
dCA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYlNvY2tldD4sIHB1YmxpYyBFdmVudFRhcmdldCwgcHVi
bGljIEFjdGl2ZURPTU9iamVjdCwgcHVibGljIFdlYlNvY2tldENoYW5uZWxDbGllbnQgewpAQCAt
NjcsNiArNjgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb25uZWN0KGNvbnN0IFN0cmluZyYgdXJs
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcHJvdG9jb2xzLCBFeGNlcHRpb25Db2RlJik7CiAKICAg
ICBib29sIHNlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBFeGNlcHRpb25Db2RlJik7CisgICAg
Ym9vbCBzZW5kKEJsb2IqIGJpbmFyeURhdGEsIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIHZvaWQg
Y2xvc2UoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2Nr
ZXQuaWRsIGIvU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuaWRsCmluZGV4IDgx
ZDc1NjNmMDdjOTE0Mjc0NWY3ZjI5YjFjZTMyNTVmNTZhNmVjZTIuLmNkMDVjMDQyYzg5MTZkZDNm
OGQwNDBiODc2Yjc4OWRhNmMwNzI4Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYnNv
Y2tldHMvV2ViU29ja2V0LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNv
Y2tldC5pZGwKQEAgLTYzLDcgKzYzLDE0IEBAIG1vZHVsZSB3ZWJzb2NrZXRzIHsKICAgICAgICAg
YXR0cmlidXRlIFtDb252ZXJ0TnVsbFN0cmluZ1RvPVVuZGVmaW5lZF0gRE9NU3RyaW5nIGJpbmFy
eVR5cGUKICAgICAgICAgICAgIHNldHRlciByYWlzZXMoRE9NRXhjZXB0aW9uKTsKIAotICAgICAg
ICBbUmVxdWlyZXNBbGxBcmd1bWVudHNdIGJvb2xlYW4gc2VuZChpbiBET01TdHJpbmcgZGF0YSkg
cmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIC8vIEZJWE1FOiBVc2Ugb3ZlcmxvYWRpbmcg
cHJvdmlkZWQgYnkgb3VyIElETCBjb2RlIGdlbmVyYXRvci4KKyAgICAgICAgLy8gQWNjb3JkaW5n
IHRvIFdlYiBJREwgc3BlY2lmaWNhdGlvbiwgb3ZlcmxvYWRlZCBmdW5jdGlvbiB3aXRoIERPTVN0
cmluZyBhcmd1bWVudAorICAgICAgICAvLyBzaG91bGQgYWNjZXB0IGFueXRoaW5nIHRoYXQgY2Fu
IGJlIGNvbnZlcnRlZCB0byBhIHN0cmluZyAoaW5jbHVkaW5nIG51bWJlcnMsCisgICAgICAgIC8v
IGJvb2xlYW5zLCBudWxsLCB1bmRlZmluZWQgYW5kIG9iamVjdHMgZXhjZXB0IEJsb2IpLiBDdXJy
ZW50IGNvZGUgZ2VuZXJhdG9yIGRvZXMKKyAgICAgICAgLy8gbm90IGhhbmRsZSB0aGlzIHJ1bGUg
Y29ycmVjdGx5LgorICAgICAgICAvLyBbUmVxdWlyZXNBbGxBcmd1bWVudHNdIGJvb2xlYW4gc2Vu
ZChpbiBCbG9iIGRhdGEpIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICAvLyBbUmVxdWly
ZXNBbGxBcmd1bWVudHNdIGJvb2xlYW4gc2VuZChpbiBET01TdHJpbmcgZGF0YSkgcmFpc2VzKERP
TUV4Y2VwdGlvbik7CisgICAgICAgIFtDdXN0b21dIGJvb2xlYW4gc2VuZChpbiBET01TdHJpbmcg
ZGF0YSkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAgICAgICAgIHZvaWQgY2xvc2UoKTsKIAogICAg
ICAgICAvLyBFdmVudFRhcmdldCBpbnRlcmZhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93ZWJzb2Nr
ZXRzL1dlYlNvY2tldENoYW5uZWwuY3BwCmluZGV4IDY2NzJmZGQ0Y2JjMzNhZjM0MmRkMTdhOGM4
YzYxY2RjYjlkODUwZDMuLjgxMzVhMzNlNzQ0NjJlNGQ1ZTg1Zjk4NDQwNGNiMjQ5N2QxYjNjMzkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmNwcApA
QCAtMTcwLDYgKzE3MCwxNCBAQCBib29sIFdlYlNvY2tldENoYW5uZWw6OnNlbmQoY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKQogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIFdlYlNvY2tldENoYW5u
ZWw6OnNlbmQoY29uc3QgQmxvYiYgYmluYXJ5RGF0YSkKK3sKKyAgICBMT0coTmV0d29yaywgIldl
YlNvY2tldENoYW5uZWwgJXAgc2VuZCBibG9iICVzIiwgdGhpcywgYmluYXJ5RGF0YS51cmwoKS5z
dHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBBU1NFUlQoIW1fdXNlSGl4aWU3NlByb3RvY29s
KTsKKyAgICBlbnF1ZXVlQmxvYkZyYW1lKE9wQ29kZUJpbmFyeSwgYmluYXJ5RGF0YSk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKIHVuc2lnbmVkIGxvbmcgV2ViU29ja2V0Q2hhbm5lbDo6YnVmZmVy
ZWRBbW91bnQoKSBjb25zdAogewogICAgIExPRyhOZXR3b3JrLCAiV2ViU29ja2V0Q2hhbm5lbCAl
cCBidWZmZXJlZEFtb3VudCIsIHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2Vi
c29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmggYi9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dl
YlNvY2tldENoYW5uZWwuaAppbmRleCA0MDA0OTkxMDZkNzlmOWE4NDUzYjE5N2M1MDViZmZjMzMx
N2RlODgzLi4zMTRiNzFlZmVkMTVmY2VhNjc3NmNjNTgzYTUyNTAwZTdhODI3MDgxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuaApAQCAtNjYsNiArNjYs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNvbm5lY3QoY29uc3QgS1VSTCYsIGNvbnN0
IFN0cmluZyYgcHJvdG9jb2wpOwogICAgIHZpcnR1YWwgU3RyaW5nIHN1YnByb3RvY29sKCk7CiAg
ICAgdmlydHVhbCBib29sIHNlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKyAgICB2aXJ0dWFs
IGJvb2wgc2VuZChjb25zdCBCbG9iJiBiaW5hcnlEYXRhKTsKICAgICB2aXJ0dWFsIHVuc2lnbmVk
IGxvbmcgYnVmZmVyZWRBbW91bnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKTsg
Ly8gU3RhcnQgY2xvc2luZyBoYW5kc2hha2UuCiAgICAgdmlydHVhbCB2b2lkIGZhaWwoY29uc3Qg
U3RyaW5nJiByZWFzb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9X
b3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93ZWJz
b2NrZXRzL1dvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcAppbmRleCA1NmY5N2Fh
ZDAwZjdhNjQxOTZjOGZiY2Y4NWQxYmU1M2I0OGE3NGY3Li5lMmE4MThjMWI1YTkyNzhiZTVlM2Rl
YTJkZWQ4NmU2Njk0ZmFhYmE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRz
L1dvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS93ZWJzb2NrZXRzL1dvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcApAQCAtMzQs
NiArMzQsNyBAQAogCiAjaW5jbHVkZSAiV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwu
aCIKIAorI2luY2x1ZGUgIkJsb2IuaCIKICNpbmNsdWRlICJDcm9zc1RocmVhZFRhc2suaCIKICNp
bmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuaCIKQEAgLTg3LDYgKzg4LDEzIEBAIGJvb2wgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENo
YW5uZWw6OnNlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogICAgIHJldHVybiBtX2JyaWRnZS0+
c2VuZChtZXNzYWdlKTsKIH0KIAorYm9vbCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bDo6c2VuZChjb25zdCBCbG9iJiBiaW5hcnlEYXRhKQoreworICAgIGlmICghbV9icmlkZ2UpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV9icmlkZ2UtPnNlbmQoYmluYXJ5RGF0
YSk7Cit9CisKIHVuc2lnbmVkIGxvbmcgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6
OmJ1ZmZlcmVkQW1vdW50KCkgY29uc3QKIHsKICAgICBpZiAoIW1fYnJpZGdlKQpAQCAtMTcyLDYg
KzE4MCwxNSBAQCB2b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpQZWVyOjpz
ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKICAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrRm9y
TW9kZVRvV29ya2VyQ29udGV4dChjcmVhdGVDYWxsYmFja1Rhc2soJndvcmtlckNvbnRleHREaWRT
ZW5kLCBtX3dvcmtlckNsaWVudFdyYXBwZXIsIHNlbnQpLCBtX3Rhc2tNb2RlKTsKIH0KIAordm9p
ZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6UGVlcjo6c2VuZChjb25zdCBCbG9i
JiBiaW5hcnlEYXRhKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKCFt
X21haW5XZWJTb2NrZXRDaGFubmVsIHx8ICFtX3dvcmtlckNsaWVudFdyYXBwZXIpCisgICAgICAg
IHJldHVybjsKKyAgICBib29sIHNlbnQgPSBtX21haW5XZWJTb2NrZXRDaGFubmVsLT5zZW5kKGJp
bmFyeURhdGEpOworICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250
ZXh0KGNyZWF0ZUNhbGxiYWNrVGFzaygmd29ya2VyQ29udGV4dERpZFNlbmQsIG1fd29ya2VyQ2xp
ZW50V3JhcHBlciwgc2VudCksIG1fdGFza01vZGUpOworfQorCiBzdGF0aWMgdm9pZCB3b3JrZXJD
b250ZXh0RGlkR2V0QnVmZmVyZWRBbW91bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgUGFzc1JlZlB0cjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI+IHdv
cmtlckNsaWVudFdyYXBwZXIsIHVuc2lnbmVkIGxvbmcgYnVmZmVyZWRBbW91bnQpCiB7CiAgICAg
QVNTRVJUX1VOVVNFRChjb250ZXh0LCBjb250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSk7CkBAIC0z
NTgsNiArMzc1LDE2IEBAIHZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6Om1h
aW5UaHJlYWRTZW5kKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvCiAgICAgcGVlci0+c2VuZCht
ZXNzYWdlKTsKIH0KIAordm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6bWFp
blRocmVhZFNlbmRCbG9iKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBlZXIqIHBl
ZXIsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB0eXBlLCBsb25nIGxvbmcgc2l6ZSkK
K3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVF9VTlVTRUQoY29udGV4
dCwgY29udGV4dC0+aXNEb2N1bWVudCgpKTsKKyAgICBBU1NFUlQocGVlcik7CisKKyAgICBSZWZQ
dHI8QmxvYj4gYmxvYiA9IEJsb2I6OmNyZWF0ZSh1cmwsIHR5cGUsIHNpemUpOworICAgIHBlZXIt
PnNlbmQoKmJsb2IpOworfQorCiBib29sIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVs
OjpCcmlkZ2U6OnNlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewogICAgIGlmICghbV93b3Jr
ZXJDbGllbnRXcmFwcGVyKQpAQCAtMzcxLDYgKzM5OCwxOSBAQCBib29sIFdvcmtlclRocmVhZGFi
bGVXZWJTb2NrZXRDaGFubmVsOjpCcmlkZ2U6OnNlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQog
ICAgIHJldHVybiBjbGllbnRXcmFwcGVyICYmIGNsaWVudFdyYXBwZXItPnNlbnQoKTsKIH0KIAor
Ym9vbCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6QnJpZGdlOjpzZW5kKGNvbnN0
IEJsb2ImIGJpbmFyeURhdGEpCit7CisgICAgaWYgKCFtX3dvcmtlckNsaWVudFdyYXBwZXIpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBBU1NFUlQobV9wZWVyKTsKKyAgICBzZXRNZXRob2RO
b3RDb21wbGV0ZWQoKTsKKyAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrVG9Mb2FkZXIoY3JlYXRl
Q2FsbGJhY2tUYXNrKCZXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6bWFpblRocmVh
ZFNlbmRCbG9iLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKG1fcGVlciksIGJpbmFyeURhdGEudXJs
KCksIGJpbmFyeURhdGEudHlwZSgpLCBiaW5hcnlEYXRhLnNpemUoKSkpOworICAgIFJlZlB0cjxC
cmlkZ2U+IHByb3RlY3QodGhpcyk7CisgICAgd2FpdEZvck1ldGhvZENvbXBsZXRpb24oKTsKKyAg
ICBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIqIGNsaWVudFdyYXBwZXIg
PSBtX3dvcmtlckNsaWVudFdyYXBwZXIuZ2V0KCk7CisgICAgcmV0dXJuIGNsaWVudFdyYXBwZXIg
JiYgY2xpZW50V3JhcHBlci0+c2VudCgpOworfQorCiB2b2lkIFdvcmtlclRocmVhZGFibGVXZWJT
b2NrZXRDaGFubmVsOjptYWluVGhyZWFkQnVmZmVyZWRBbW91bnQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgUGVlciogcGVlcikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9Xb3JrZXJUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbC5oIGIvU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9Xb3JrZXJUaHJl
YWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oCmluZGV4IGE0OGE4YTE5ZDdjMjA4OGMxMmQ5YzE3NjIy
YjIwMTUzNzI1MTE0ZjguLjNkM2FkZTVmNzVhZGQwZTUxYTFmZjU0ZjJlOGZiZTgzMmRmMjQzZjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV29ya2VyVGhyZWFkYWJsZVdl
YlNvY2tldENoYW5uZWwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dvcmtlclRo
cmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmgKQEAgLTY0LDYgKzY0LDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBjb25uZWN0KGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHByb3RvY29s
KTsKICAgICB2aXJ0dWFsIFN0cmluZyBzdWJwcm90b2NvbCgpOwogICAgIHZpcnR1YWwgYm9vbCBz
ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisgICAgdmlydHVhbCBib29sIHNlbmQoY29uc3Qg
QmxvYiYgYmluYXJ5RGF0YSk7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGJ1ZmZlcmVkQW1v
dW50KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCk7CiAgICAgdmlydHVhbCB2b2lk
IGZhaWwoY29uc3QgU3RyaW5nJiByZWFzb24pOwpAQCAtOTMsNiArOTQsNyBAQCBwcml2YXRlOgog
ICAgICAgICBib29sIHVzZUhpeGllNzZQcm90b2NvbCgpOwogICAgICAgICB2b2lkIGNvbm5lY3Qo
Y29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2wpOwogICAgICAgICB2b2lkIHNlbmQo
Y29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKyAgICAgICAgdm9pZCBzZW5kKGNvbnN0IEJsb2ImIGJp
bmFyeURhdGEpOwogICAgICAgICB2b2lkIGJ1ZmZlcmVkQW1vdW50KCk7CiAgICAgICAgIHZvaWQg
Y2xvc2UoKTsKICAgICAgICAgdm9pZCBmYWlsKGNvbnN0IFN0cmluZyYgcmVhc29uKTsKQEAgLTEy
NSw2ICsxMjcsNyBAQCBwcml2YXRlOgogICAgICAgICB+QnJpZGdlKCk7CiAgICAgICAgIHZvaWQg
Y29ubmVjdChjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiBwcm90b2NvbCk7CiAgICAgICAgIGJv
b2wgc2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOworICAgICAgICBib29sIHNlbmQoY29uc3Qg
QmxvYiYgYmluYXJ5RGF0YSk7CiAgICAgICAgIHVuc2lnbmVkIGxvbmcgYnVmZmVyZWRBbW91bnQo
KTsKICAgICAgICAgdm9pZCBjbG9zZSgpOwogICAgICAgICB2b2lkIGZhaWwoY29uc3QgU3RyaW5n
JiByZWFzb24pOwpAQCAtMTYwLDYgKzE2Myw3IEBAIHByaXZhdGU6CiAKICAgICBzdGF0aWMgdm9p
ZCBtYWluVGhyZWFkQ29ubmVjdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGVlciosIGNvbnN0
IEtVUkwmLCBjb25zdCBTdHJpbmcmIHByb3RvY29sKTsKICAgICBzdGF0aWMgdm9pZCBtYWluVGhy
ZWFkU2VuZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGVlciosIGNvbnN0IFN0cmluZyYgbWVz
c2FnZSk7CisgICAgc3RhdGljIHZvaWQgbWFpblRocmVhZFNlbmRCbG9iKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQZWVyKiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgdHlwZSwgbG9uZyBs
b25nIHNpemUpOwogICAgIHN0YXRpYyB2b2lkIG1haW5UaHJlYWRCdWZmZXJlZEFtb3VudChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGVlciopOwogICAgIHN0YXRpYyB2b2lkIG1haW5UaHJlYWRD
bG9zZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGVlciopOwogICAgIHN0YXRpYyB2b2lkIG1h
aW5UaHJlYWRGYWlsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQZWVyKiwgY29uc3QgU3RyaW5n
JiByZWFzb24pOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106101</attachid>
            <date>2011-09-02 00:29:25 -0700</date>
            <delta_ts>2011-09-02 01:24:11 -0700</delta_ts>
            <desc>Patch v2</desc>
            <filename>bug-67465-20110902162923.patch</filename>
            <type>text/plain</type>
            <size>38959</size>
            <attacher name="Yuta Kitamura">yutak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTQzNzkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBhMzRiZDAyZjc3Y2I5MTM4YjAxZjc0
NzQwNzcwMDlmYTdhNzhmMGE2Li5lM2IyYzQ1YWQwMWJjMjI1Nzc4OWNjMTUxMTM0ODM1NjIxZmYw
ZjhmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMzUgQEAKKzIwMTEtMDktMDEgIFl1dGEgS2l0YW11cmEgIDx5
dXRha0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViU29ja2V0OiBTZW5kIEJsb2IgYXMgV2Vi
U29ja2V0IGJpbmFyeSBtZXNzYWdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD02NzQ2NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWJsb2It
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0
cy9oeWJpL3NlbmQtYmxvYi5odG1sOgorICAgICAgICBBZGRlZC4gU2VuZCB0aHJlZSBCbG9icyBl
YWNoIG9mIHdoaWNoIGNvbnRhaW5zIGEgc21hbGwgYmluYXJ5IG1lc3NhZ2UuCisgICAgICAgICog
aHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWJsb2Jfd3NoLnB5OgorICAgICAg
ICBBZGRlZC4gcmVjZWl2ZV9tZXNzYWdlKCkgcmV0dXJucyBhIHVuaWNvZGUgdmFsdWUgaWYgdGhl
IHJlY2VpdmVkIG1lc3NhZ2Ugd2FzIHRleHQsIG9yCisgICAgICAgIGEgc3RyIHZhbHVlIGlmIHRo
ZSBtZXNzYWdlIHdhcyBiaW5hcnkuCisgICAgICAgICogaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVz
dHMvaHliaS9zZW5kLWZpbGUtYmxvYi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0
dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1maWxlLWJsb2ItZmFpbC1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkv
c2VuZC1maWxlLWJsb2ItZmFpbC5odG1sOgorICAgICAgICBBZGRlZC4gSWYgd2UgZGVsZXRlIGEg
ZmlsZSBiZWZvcmUgcmVhZGluZyBpdCwgRmlsZVJlYWRlckxvYWRlciByZWxpYWJseSBmYWlscy4K
KyAgICAgICAgKiBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtZmlsZS1ibG9i
Lmh0bWw6CisgICAgICAgIEFkZGVkLiBDcmVhdGUgYSBGaWxlIGFuZCB0cnkgdG8gc2VuZCBpdCBh
cyBhIEJsb2IuCisgICAgICAgICogaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5k
LWZpbGUtYmxvYl93c2gucHk6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvd2Vic29ja2V0
L3Rlc3RzL2h5Ymkvd29ya2Vycy9yZXNvdXJjZXMvc2VuZC1ibG9iLmpzOgorICAgICAgICBBZGRl
ZC4gU2FtZSBhcyBzZW5kLWJsb2IuaHRtbCBhYm92ZS4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3dl
YnNvY2tldC90ZXN0cy9oeWJpL3dvcmtlcnMvcmVzb3VyY2VzL3NlbmQtYmxvYl93c2gucHk6Cisg
ICAgICAgIEFkZGVkLiBTYW1lIGFzIHNlbmQtYmxvYl93c2gucHkgYWJvdmUuCisgICAgICAgICog
aHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS93b3JrZXJzL3NlbmQtYmxvYi1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkv
d29ya2Vycy9zZW5kLWJsb2IuaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Nr
aXBwZWQ6CisgICAgICAgIHNlbmQtZmlsZS1ibG9iLmh0bWwgYW5kIHNlbmQtZmlsZS1ibG9iLWZh
aWwuaHRtbCBkZXBlbmQgb24gYXZhaWxhYmlsaXR5IG9mIEZpbGUgQVBJLgorICAgICAgICAqIHBs
YXRmb3JtL21hYy9Ta2lwcGVkOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9Ta2lwcGVk
OiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vU2tpcHBlZDogRGl0dG8uCisKIDIwMTEt
MDktMDEgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBb
Y2hyb21pdW1dIEFkZCBjaHJvbWl1bSBsZW9wYXJkIGJhc2VsaW5lcwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWJsb2ItZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5k
LWJsb2ItZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZkZjQ4ZDA1ZjNmZDcyMGUwYmE1YWE2Nzlj
MjYyZTRkZGIyMzFjMjMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtYmxvYi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwx
MiBAQAorV2ViU29ja2V0OiBTZW5kIEJsb2JzLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
CisKK1BBU1MgUEFTUzogTWVzc2FnZSAjMC4KK1BBU1MgUEFTUzogTWVzc2FnZSAjMS4KK1BBU1Mg
UEFTUzogTWVzc2FnZSAjMi4KK1BBU1MgY2xvc2VFdmVudC53YXNDbGVhbiBpcyB0cnVlCitQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWJsb2Iu
aHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1i
bG9iLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZWFiOTM0NmQ3NDgzYTY0YTkyYWFiZjc5MWVkYjljOWQwMzc1
Zjk5MgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0
L3Rlc3RzL2h5Ymkvc2VuZC1ibG9iLmh0bWwKQEAgLTAsMCArMSw3NiBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8u
Li8uLi9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vLi4vLi4vanMtdGVzdC1yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJj
b25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KK2Rlc2NyaXB0
aW9uKCJXZWJTb2NrZXQ6IFNlbmQgQmxvYnMuIik7CisKK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0g
dHJ1ZTsKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIub3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRIaXhpZTc2V2ViU29ja2V0UHJvdG9j
b2xFbmFibGVkIiwgMCk7CisKK2Z1bmN0aW9uIHN0YXJ0c1dpdGgodGFyZ2V0LCBwcmVmaXgpCit7
CisgICAgcmV0dXJuIHRhcmdldC5pbmRleE9mKHByZWZpeCkgPT09IDA7Cit9CisKK2Z1bmN0aW9u
IGNyZWF0ZUJsb2JDb250YWluaW5nSGVsbG9Xb3JsZCgpCit7CisgICAgdmFyIGJ1aWxkZXIgPSBu
ZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKKyAgICBidWlsZGVyLmFwcGVuZCgiSGVsbG8sIHdvcmxk
ISIpOworICAgIHJldHVybiBidWlsZGVyLmdldEJsb2IoKTsKK30KKworZnVuY3Rpb24gY3JlYXRl
RW1wdHlCbG9iKCkKK3sKKyAgICB2YXIgYnVpbGRlciA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigp
OworICAgIHJldHVybiBidWlsZGVyLmdldEJsb2IoKTsKK30KKworZnVuY3Rpb24gY3JlYXRlQmxv
YkNvbnRhaW5pbmdBbGxEaXN0aW5jdEJ5dGVzKCkKK3sKKyAgICB2YXIgYXJyYXkgPSBuZXcgVWlu
dDhBcnJheSgyNTYpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyArK2kpCisgICAgICAg
IGFycmF5W2ldID0gaTsKKyAgICB2YXIgYnVpbGRlciA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigp
OworICAgIGJ1aWxkZXIuYXBwZW5kKGFycmF5LmJ1ZmZlcik7CisgICAgcmV0dXJuIGJ1aWxkZXIu
Z2V0QmxvYigpOworfQorCit2YXIgdXJsID0gIndzOi8vMTI3LjAuMC4xOjg4ODAvd2Vic29ja2V0
L3Rlc3RzL2h5Ymkvc2VuZC1ibG9iIjsKK3ZhciB3cyA9IG5ldyBXZWJTb2NrZXQodXJsKTsKK3Zh
ciBjbG9zZUV2ZW50OworCit3cy5vbm9wZW4gPSBmdW5jdGlvbigpCit7CisgICAgd3Muc2VuZChj
cmVhdGVCbG9iQ29udGFpbmluZ0hlbGxvV29ybGQoKSk7CisgICAgd3Muc2VuZChjcmVhdGVFbXB0
eUJsb2IoKSk7CisgICAgd3Muc2VuZChjcmVhdGVCbG9iQ29udGFpbmluZ0FsbERpc3RpbmN0Qnl0
ZXMoKSk7Cit9OworCit3cy5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkKK3sKKyAgICB2YXIg
bWVzc2FnZSA9IGV2ZW50LmRhdGE7CisgICAgaWYgKHN0YXJ0c1dpdGgobWVzc2FnZSwgIlBBU1Mi
KSkKKyAgICAgICAgdGVzdFBhc3NlZChtZXNzYWdlKTsKKyAgICBlbHNlCisgICAgICAgIHRlc3RG
YWlsZWQobWVzc2FnZSk7Cit9OworCit3cy5vbmNsb3NlID0gZnVuY3Rpb24oZXZlbnQpCit7Cisg
ICAgY2xvc2VFdmVudCA9IGV2ZW50OworICAgIHNob3VsZEJlVHJ1ZSgiY2xvc2VFdmVudC53YXND
bGVhbiIpOworICAgIGZpbmlzaEpTVGVzdCgpOworfTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNl
ZCA9IHRydWU7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi8uLi9qcy10ZXN0LXJl
c291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5k
LWJsb2Jfd3NoLnB5IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHli
aS9zZW5kLWJsb2Jfd3NoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAyNGUzZjRkMDc5NDVjOTJjYWFiZGMwMzdl
YzUwMDgyNGE0MmExYTIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtYmxvYl93c2gucHkKQEAgLTAsMCArMSwyMSBAQAor
ZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IGNvbW1vbgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQg
aW1wb3J0IG1zZ3V0aWwKKworCitkZWYgd2ViX3NvY2tldF9kb19leHRyYV9oYW5kc2hha2UocmVx
dWVzdCk6CisgICAgcGFzcyAjIEFsd2F5cyBhY2NlcHQuCisKKworZGVmIHdlYl9zb2NrZXRfdHJh
bnNmZXJfZGF0YShyZXF1ZXN0KToKKyAgICBleHBlY3RlZF9tZXNzYWdlcyA9IFsnSGVsbG8sIHdv
cmxkIScsICcnLCBhbGxfZGlzdGluY3RfYnl0ZXMoKV0KKworICAgIGZvciB0ZXN0X251bWJlciwg
ZXhwZWN0ZWRfbWVzc2FnZSBpbiBlbnVtZXJhdGUoZXhwZWN0ZWRfbWVzc2FnZXMpOgorICAgICAg
ICBtZXNzYWdlID0gbXNndXRpbC5yZWNlaXZlX21lc3NhZ2UocmVxdWVzdCkKKyAgICAgICAgaWYg
dHlwZShtZXNzYWdlKSA9PSBzdHIgYW5kIG1lc3NhZ2UgPT0gZXhwZWN0ZWRfbWVzc2FnZToKKyAg
ICAgICAgICAgIG1zZ3V0aWwuc2VuZF9tZXNzYWdlKHJlcXVlc3QsICdQQVNTOiBNZXNzYWdlICMl
ZC4nICUgdGVzdF9udW1iZXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtc2d1dGlsLnNl
bmRfbWVzc2FnZShyZXF1ZXN0LCAnRkFJTDogTWVzc2FnZSAjJWQ6IFJlY2VpdmVkIHVuZXhwZWN0
ZWQgbWVzc2FnZTogJXInICUgKHRlc3RfbnVtYmVyLCBtZXNzYWdlKSkKKworCitkZWYgYWxsX2Rp
c3RpbmN0X2J5dGVzKCk6CisgICAgcmV0dXJuICcnLmpvaW4oW2NocihpKSBmb3IgaSBpbiB4cmFu
Z2UoMjU2KV0pCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90
ZXN0cy9oeWJpL3NlbmQtZmlsZS1ibG9iLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1maWxlLWJsb2ItZXhwZWN0ZWQudHh0Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjUxNjQ5Y2U5ODRiZTE2ZjdmMWI3ODU1ZmVhYjU5YmQ4MDc0MWRlZjIKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJp
L3NlbmQtZmlsZS1ibG9iLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE2IEBACitXZWJTb2NrZXQ6
IFNlbmQgYSBGaWxlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK0dvdCBGaWxlU3lz
dGVtIG9iamVjdC4KK0ZpbGUgY3JlYXRlZC4KK1BBU1MgZmlsZUVudHJ5LmlzRmlsZSBpcyB0cnVl
CitXcm90ZSB0byBmaWxlLgorR290IEZpbGUgb2JqZWN0LgorUEFTUyBQQVNTOiBNZXNzYWdlICMw
LgorUEFTUyBjbG9zZUV2ZW50Lndhc0NsZWFuIGlzIHRydWUKK0RlbGV0aW5nIHRoZSBmaWxlLgor
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1m
aWxlLWJsb2ItZmFpbC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNv
Y2tldC90ZXN0cy9oeWJpL3NlbmQtZmlsZS1ibG9iLWZhaWwtZXhwZWN0ZWQudHh0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjlkNzE4ZjkwMDY5ZDU0YmQ0YmZmMzllNWYxNjEwMThhMzhlYzVkOTkKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQt
ZmlsZS1ibG9iLWZhaWwtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTYgQEAKK0NPTlNPTEUgTUVT
U0FHRTogbGluZSAwOiBGYWlsZWQgdG8gbG9hZCBCbG9iOiBlcnJvciBjb2RlID0gMQorV2ViU29j
a2V0IHNob3VsZCBmYWlsIHRoZSBjb25uZWN0aW9uIGlmIGl0IGhhcyBmYWlsZWQgdG8gcmVhZCBh
IEJsb2IuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVz
c2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworR290IEZpbGVTeXN0ZW0gb2Jq
ZWN0LgorRmlsZSBjcmVhdGVkLgorUEFTUyBmaWxlRW50cnkuaXNGaWxlIGlzIHRydWUKK1dyb3Rl
IHRvIGZpbGUuCitHb3QgRmlsZSBvYmplY3QuCitGaWxlIGRlbGV0ZWQuCitQQVNTIGNsb3NlRXZl
bnQud2FzQ2xlYW4gaXMgZmFsc2UKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKwor
VEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNv
Y2tldC90ZXN0cy9oeWJpL3NlbmQtZmlsZS1ibG9iLWZhaWwuaHRtbCBiL0xheW91dFRlc3RzL2h0
dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1maWxlLWJsb2ItZmFpbC5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjkyNjI2ZDhmMWUzYWM3MDk1ZTkzZjg2YjQ4ZWU3M2ExMjQ1NmU2MzEKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJp
L3NlbmQtZmlsZS1ibG9iLWZhaWwuaHRtbApAQCAtMCwwICsxLDEyNiBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8u
Li8uLi9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vLi4vLi4vanMtdGVzdC1yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJj
b25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KK2Rlc2NyaXB0
aW9uKCJXZWJTb2NrZXQgc2hvdWxkIGZhaWwgdGhlIGNvbm5lY3Rpb24gaWYgaXQgaGFzIGZhaWxl
ZCB0byByZWFkIGEgQmxvYi4iKTsKKword2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworaWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5v
dmVycmlkZVByZWZlcmVuY2UoIldlYktpdEhpeGllNzZXZWJTb2NrZXRQcm90b2NvbEVuYWJsZWQi
LCAwKTsKKworZnVuY3Rpb24gc3RhcnRzV2l0aCh0YXJnZXQsIHByZWZpeCkKK3sKKyAgICByZXR1
cm4gdGFyZ2V0LmluZGV4T2YocHJlZml4KSA9PT0gMDsKK30KKwordmFyIGZpbGVTeXN0ZW1TaXpl
ID0gMTAyNDsKK3ZhciBmaWxlTmFtZSA9ICJ3ZWJzb2NrZXQtc2VuZC1maWxlLWJsb2ItZmFpbC50
eHQiOwordmFyIG1lc3NhZ2VUb1dyaXRlID0gIlRoaXMgbWVzc2FnZSBzaG91bGRuJ3QgYmUgc2Vu
dC4iOworCitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICBpZiAoIXdpbmRvdy53ZWJraXRSZXF1
ZXN0RmlsZVN5c3RlbSkgeworICAgICAgICB0ZXN0RmFpbGVkKCJ3aW5kb3cud2Via2l0UmVxdWVz
dEZpbGVTeXN0ZW0gaXMgbm90IGF2YWlsYWJsZS4iKTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB3ZWJraXRSZXF1ZXN0RmlsZVN5c3RlbShU
RU1QT1JBUlksIGZpbGVTeXN0ZW1TaXplLCBkaWRHZXRGaWxlU3lzdGVtLCBkaWRGYWlsKTsKK30K
KworZnVuY3Rpb24gZGlkR2V0RmlsZVN5c3RlbShmaWxlU3lzdGVtKQoreworICAgIGRlYnVnKCJH
b3QgRmlsZVN5c3RlbSBvYmplY3QuIik7CisgICAgZmlsZVN5c3RlbS5yb290LmdldEZpbGUoZmls
ZU5hbWUsIHtjcmVhdGU6IHRydWV9LCBkaWRDcmVhdGVGaWxlLCBkaWRGYWlsKTsKK30KKwordmFy
IGZpbGVFbnRyeTsKKworZnVuY3Rpb24gZGlkQ3JlYXRlRmlsZShlbnRyeSkKK3sKKyAgICBkZWJ1
ZygiRmlsZSBjcmVhdGVkLiIpOworICAgIGZpbGVFbnRyeSA9IGVudHJ5OworICAgIHNob3VsZEJl
VHJ1ZSgiZmlsZUVudHJ5LmlzRmlsZSIpOworICAgIGZpbGVFbnRyeS5jcmVhdGVXcml0ZXIoZGlk
R2V0RmlsZVdyaXRlciwgZGlkRmFpbCk7Cit9CisKK2Z1bmN0aW9uIGRpZEdldEZpbGVXcml0ZXIo
d3JpdGVyKQoreworICAgIHdyaXRlci50cnVuY2F0ZSgwKTsKKyAgICB3cml0ZXIub25lcnJvciA9
IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRlc3RGYWlsZWQoIkZpbGVXcml0ZXIgb3BlcmF0
aW9uIGZhaWxlZC4iKTsKKyAgICAgICAgZW5kVGVzdCgpOworICAgIH07CisgICAgd3JpdGVyLm9u
d3JpdGUgPSBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBXZWJL
aXRCbG9iQnVpbGRlcigpOworICAgICAgICBidWlsZGVyLmFwcGVuZChtZXNzYWdlVG9Xcml0ZSk7
CisgICAgICAgIHdyaXRlci53cml0ZShidWlsZGVyLmdldEJsb2IoKSk7CisgICAgICAgIHdyaXRl
ci5vbndyaXRlID0gZGlkV3JpdGVGaWxlOworICAgIH07Cit9CisKK2Z1bmN0aW9uIGRpZFdyaXRl
RmlsZSgpCit7CisgICAgZGVidWcoIldyb3RlIHRvIGZpbGUuIik7CisgICAgZmlsZUVudHJ5LmZp
bGUoZGlkR2V0RmlsZSwgZGlkRmFpbCk7Cit9CisKK3ZhciBmaWxlT2JqZWN0OworCitmdW5jdGlv
biBkaWRHZXRGaWxlKGZpbGUpCit7CisgICAgZGVidWcoIkdvdCBGaWxlIG9iamVjdC4iKTsKKyAg
ICBmaWxlT2JqZWN0ID0gZmlsZTsKKworICAgIC8vIERlbGV0ZSB0aGUgZmlsZSBvYmplY3QgYmVm
b3JlIGl0IGlzIHJlYWQuIFRoaXMgc2hvdWxkIGNhdXNlIHRoZSBzdWJzZXF1ZW50IHJlYWQgb3Bl
cmF0aW9uCisgICAgLy8gdG8gZmFpbCByZWxpYWJseS4KKyAgICBmaWxlRW50cnkucmVtb3ZlKGRp
ZFJlbW92ZUZpbGUsIGRpZEZhaWwpOworfQorCitmdW5jdGlvbiBkaWRSZW1vdmVGaWxlKCkKK3sK
KyAgICBkZWJ1ZygiRmlsZSBkZWxldGVkLiIpOworICAgIGZpbGVFbnRyeSA9IG51bGw7IC8vIFRv
IHByZXZlbnQgdGhlIGZpbGUgZnJvbSBnZXR0aW5nIGRlbGV0ZWQgYWdhaW4uCisgICAgdmFyIHdz
ID0gbmV3IFdlYlNvY2tldCgid3M6Ly8xMjcuMC4wLjE6ODg4MC93ZWJzb2NrZXQvdGVzdHMvaHli
aS9lY2hvIik7CisgICAgd3Mub25vcGVuID0gZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgd3Mu
c2VuZChmaWxlT2JqZWN0KTsgLy8gVGhpcyBvcGVyYXRpb24gc2hvdWxkIGZhaWwgYW5kIHRoZSBj
b25uZWN0aW9uIHNob3VsZCBiZSBhYm9ydGVkLgorICAgIH07CisgICAgd3Mub25jbG9zZSA9IGZ1
bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAgY2xvc2VFdmVudCA9IGV2ZW50OworICAgICAg
ICBzaG91bGRCZUZhbHNlKCJjbG9zZUV2ZW50Lndhc0NsZWFuIik7CisgICAgICAgIGVuZFRlc3Qo
KTsKKyAgICB9OworfQorCitmdW5jdGlvbiBkaWRGYWlsKGZpbGVFcnJvcikKK3sKKyAgICB0ZXN0
RmFpbGVkKCJGaWxlU3lzdGVtIEFQSSBvcGVyYXRpb24gZmFpbGVkOiBlcnJvciBjb2RlID0gIiAr
IGZpbGVFcnJvci5jb2RlKTsKKyAgICBlbmRUZXN0KCk7Cit9CisKK2Z1bmN0aW9uIGVuZFRlc3Qo
KQoreworICAgIGlmIChmaWxlRW50cnkpIHsKKyAgICAgICAgZGVidWcoIkRlbGV0aW5nIHRoZSBm
aWxlLiIpOworICAgICAgICBmaWxlRW50cnkucmVtb3ZlKGZpbmlzaEpTVGVzdCwgZmluaXNoSlNU
ZXN0KTsKKyAgICB9IGVsc2UKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7Cit9CisKK3J1blRlc3Qo
KTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIuLi8uLi8uLi8uLi9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWZpbGUtYmxvYi5odG1sIGIvTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWZpbGUtYmxvYi5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjA2NGNiNjcwMzY0YTFhNmNkMjk1Y2MwYmI0NTQ0Y2U3ODUzMzUwN2MKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3Nl
bmQtZmlsZS1ibG9iLmh0bWwKQEAgLTAsMCArMSwxMjMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0
bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vLi4vanMt
dGVzdC1yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4u
Ly4uL2pzLXRlc3QtcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5PgorPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+
PC9kaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CitkZXNjcmlwdGlvbigiV2Vi
U29ja2V0OiBTZW5kIGEgRmlsZS4iKTsKKword2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOwor
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5vdmVycmlkZVByZWZlcmVuY2UoIldlYktpdEhpeGllNzZXZWJTb2NrZXRQcm90b2NvbEVuYWJs
ZWQiLCAwKTsKKworZnVuY3Rpb24gc3RhcnRzV2l0aCh0YXJnZXQsIHByZWZpeCkKK3sKKyAgICBy
ZXR1cm4gdGFyZ2V0LmluZGV4T2YocHJlZml4KSA9PT0gMDsKK30KKwordmFyIGZpbGVTeXN0ZW1T
aXplID0gMTAyNDsKK3ZhciBmaWxlTmFtZSA9ICJ3ZWJzb2NrZXQtc2VuZC1maWxlLWJsb2IudHh0
IjsKK3ZhciBtZXNzYWdlVG9Xcml0ZSA9ICJIZWxsbywgd29ybGQhIjsKKworZnVuY3Rpb24gcnVu
VGVzdCgpCit7CisgICAgaWYgKCF3aW5kb3cud2Via2l0UmVxdWVzdEZpbGVTeXN0ZW0pIHsKKyAg
ICAgICAgdGVzdEZhaWxlZCgid2luZG93LndlYmtpdFJlcXVlc3RGaWxlU3lzdGVtIGlzIG5vdCBh
dmFpbGFibGUuIik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgd2Via2l0UmVxdWVzdEZpbGVTeXN0ZW0oVEVNUE9SQVJZLCBmaWxlU3lzdGVt
U2l6ZSwgZGlkR2V0RmlsZVN5c3RlbSwgZGlkRmFpbCk7Cit9CisKK2Z1bmN0aW9uIGRpZEdldEZp
bGVTeXN0ZW0oZmlsZVN5c3RlbSkKK3sKKyAgICBkZWJ1ZygiR290IEZpbGVTeXN0ZW0gb2JqZWN0
LiIpOworICAgIGZpbGVTeXN0ZW0ucm9vdC5nZXRGaWxlKGZpbGVOYW1lLCB7Y3JlYXRlOiB0cnVl
fSwgZGlkQ3JlYXRlRmlsZSwgZGlkRmFpbCk7Cit9CisKK3ZhciBmaWxlRW50cnk7CisKK2Z1bmN0
aW9uIGRpZENyZWF0ZUZpbGUoZW50cnkpCit7CisgICAgZGVidWcoIkZpbGUgY3JlYXRlZC4iKTsK
KyAgICBmaWxlRW50cnkgPSBlbnRyeTsKKyAgICBzaG91bGRCZVRydWUoImZpbGVFbnRyeS5pc0Zp
bGUiKTsKKyAgICBmaWxlRW50cnkuY3JlYXRlV3JpdGVyKGRpZEdldEZpbGVXcml0ZXIsIGRpZEZh
aWwpOworfQorCitmdW5jdGlvbiBkaWRHZXRGaWxlV3JpdGVyKHdyaXRlcikKK3sKKyAgICB3cml0
ZXIudHJ1bmNhdGUoMCk7CisgICAgd3JpdGVyLm9uZXJyb3IgPSBmdW5jdGlvbigpCisgICAgewor
ICAgICAgICB0ZXN0RmFpbGVkKCJGaWxlV3JpdGVyIG9wZXJhdGlvbiBmYWlsZWQuIik7CisgICAg
ICAgIGVuZFRlc3QoKTsKKyAgICB9OworICAgIHdyaXRlci5vbndyaXRlID0gZnVuY3Rpb24oKQor
ICAgIHsKKyAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKKyAg
ICAgICAgYnVpbGRlci5hcHBlbmQobWVzc2FnZVRvV3JpdGUpOworICAgICAgICB3cml0ZXIud3Jp
dGUoYnVpbGRlci5nZXRCbG9iKCkpOworICAgICAgICB3cml0ZXIub253cml0ZSA9IGRpZFdyaXRl
RmlsZTsKKyAgICB9OworfQorCitmdW5jdGlvbiBkaWRXcml0ZUZpbGUoKQoreworICAgIGRlYnVn
KCJXcm90ZSB0byBmaWxlLiIpOworICAgIGZpbGVFbnRyeS5maWxlKGRpZEdldEZpbGUsIGRpZEZh
aWwpOworfQorCit2YXIgY2xvc2VFdmVudDsKKworZnVuY3Rpb24gZGlkR2V0RmlsZShmaWxlKQor
eworICAgIGRlYnVnKCJHb3QgRmlsZSBvYmplY3QuIik7CisgICAgdmFyIHdzID0gbmV3IFdlYlNv
Y2tldCgid3M6Ly8xMjcuMC4wLjE6ODg4MC93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWZpbGUt
YmxvYiIpOworICAgIHdzLm9ub3BlbiA9IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHdzLnNl
bmQoZmlsZSk7CisgICAgfTsKKyAgICB3cy5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkKKyAg
ICB7CisgICAgICAgIHZhciBtZXNzYWdlID0gZXZlbnQuZGF0YTsKKyAgICAgICAgaWYgKHN0YXJ0
c1dpdGgobWVzc2FnZSwgIlBBU1MiKSkKKyAgICAgICAgICAgIHRlc3RQYXNzZWQobWVzc2FnZSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRlc3RGYWlsZWQobWVzc2FnZSk7CisgICAgfTsK
KyAgICB3cy5vbmNsb3NlID0gZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICBjbG9zZUV2
ZW50ID0gZXZlbnQ7CisgICAgICAgIHNob3VsZEJlVHJ1ZSgiY2xvc2VFdmVudC53YXNDbGVhbiIp
OworICAgICAgICBlbmRUZXN0KCk7CisgICAgfTsKK30KKworZnVuY3Rpb24gZGlkRmFpbChmaWxl
RXJyb3IpCit7CisgICAgdGVzdEZhaWxlZCgiRmlsZVN5c3RlbSBBUEkgb3BlcmF0aW9uIGZhaWxl
ZDogZXJyb3IgY29kZSA9ICIgKyBmaWxlRXJyb3IuY29kZSk7CisgICAgZW5kVGVzdCgpOworfQor
CitmdW5jdGlvbiBlbmRUZXN0KCkKK3sKKyAgICBpZiAoZmlsZUVudHJ5KSB7CisgICAgICAgIGRl
YnVnKCJEZWxldGluZyB0aGUgZmlsZS4iKTsKKyAgICAgICAgZmlsZUVudHJ5LnJlbW92ZShmaW5p
c2hKU1Rlc3QsIGZpbmlzaEpTVGVzdCk7CisgICAgfSBlbHNlCisgICAgICAgIGZpbmlzaEpTVGVz
dCgpOworfQorCitydW5UZXN0KCk7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwor
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vanMtdGVzdC1yZXNvdXJjZXMvanMt
dGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1maWxlLWJsb2Jf
d3NoLnB5IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5k
LWZpbGUtYmxvYl93c2gucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGFhNDQwNDcxYWY4M2FiMjYyODY3NTFjM2Ux
ODg4MmY0ODRkYjc4YwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMv
d2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1maWxlLWJsb2Jfd3NoLnB5CkBAIC0wLDAgKzEsMjIg
QEAKK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBjb21tb24KK2Zyb20gbW9kX3B5d2Vic29j
a2V0IGltcG9ydCBtc2d1dGlsCisKKworZGVmIHdlYl9zb2NrZXRfZG9fZXh0cmFfaGFuZHNoYWtl
KHJlcXVlc3QpOgorICAgIHBhc3MgIyBBbHdheXMgYWNjZXB0LgorCisKK2RlZiB3ZWJfc29ja2V0
X3RyYW5zZmVyX2RhdGEocmVxdWVzdCk6CisgICAgZXhwZWN0ZWRfbWVzc2FnZXMgPSBbJ0hlbGxv
LCB3b3JsZCEnXQorCisgICAgZm9yIHRlc3RfbnVtYmVyLCBleHBlY3RlZF9tZXNzYWdlIGluIGVu
dW1lcmF0ZShleHBlY3RlZF9tZXNzYWdlcyk6CisgICAgICAgICMgRklYTUU6IFVzZSBiZXR0ZXIg
QVBJLgorICAgICAgICBvcGNvZGUsIHBheWxvYWQsIGZpbmFsLCB1bnVzZWRfcmVzZXJ2ZWQxLCB1
bnVzZWRfcmVzZXJ2ZWQyLCB1bnVzZWRfcmVzZXJ2ZWQzID0gcmVxdWVzdC53c19zdHJlYW0uX3Jl
Y2VpdmVfZnJhbWUoKQorICAgICAgICBpZiBvcGNvZGUgPT0gY29tbW9uLk9QQ09ERV9CSU5BUlkg
YW5kIHBheWxvYWQgPT0gZXhwZWN0ZWRfbWVzc2FnZSBhbmQgZmluYWw6CisgICAgICAgICAgICBt
c2d1dGlsLnNlbmRfbWVzc2FnZShyZXF1ZXN0LCAnUEFTUzogTWVzc2FnZSAjJWQuJyAlIHRlc3Rf
bnVtYmVyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbXNndXRpbC5zZW5kX21lc3NhZ2Uo
cmVxdWVzdCwgJ0ZBSUw6IE1lc3NhZ2UgIyVkOiBSZWNlaXZlZCB1bmV4cGVjdGVkIGZyYW1lOiBv
cGNvZGUgPSAlciwgcGF5bG9hZCA9ICVyLCBmaW5hbCA9ICVyJyAlICh0ZXN0X251bWJlciwgb3Bj
b2RlLCBwYXlsb2FkLCBmaW5hbCkpCisKKworZGVmIGFsbF9kaXN0aW5jdF9ieXRlcygpOgorICAg
IHJldHVybiAnJy5qb2luKFtjaHIoaSkgZm9yIGkgaW4geHJhbmdlKDI1NildKQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS93b3JrZXJzL3Jl
c291cmNlcy9zZW5kLWJsb2IuanMgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90
ZXN0cy9oeWJpL3dvcmtlcnMvcmVzb3VyY2VzL3NlbmQtYmxvYi5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZWEw
NTAzYTA5NjAyMzUyZjM5MzE5MDI2Mzc5OTgyNTEwMzExM2JmCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS93b3JrZXJzL3Jlc291
cmNlcy9zZW5kLWJsb2IuanMKQEAgLTAsMCArMSw1MSBAQAorZnVuY3Rpb24gc3RhcnRzV2l0aCh0
YXJnZXQsIHByZWZpeCkKK3sKKyAgICByZXR1cm4gdGFyZ2V0LmluZGV4T2YocHJlZml4KSA9PT0g
MDsKK30KKworZnVuY3Rpb24gY3JlYXRlQmxvYkNvbnRhaW5pbmdIZWxsb1dvcmxkKCkKK3sKKyAg
ICB2YXIgYnVpbGRlciA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOworICAgIGJ1aWxkZXIuYXBw
ZW5kKCJIZWxsbywgd29ybGQhIik7CisgICAgcmV0dXJuIGJ1aWxkZXIuZ2V0QmxvYigpOworfQor
CitmdW5jdGlvbiBjcmVhdGVFbXB0eUJsb2IoKQoreworICAgIHZhciBidWlsZGVyID0gbmV3IFdl
YktpdEJsb2JCdWlsZGVyKCk7CisgICAgcmV0dXJuIGJ1aWxkZXIuZ2V0QmxvYigpOworfQorCitm
dW5jdGlvbiBjcmVhdGVCbG9iQ29udGFpbmluZ0FsbERpc3RpbmN0Qnl0ZXMoKQoreworICAgIHZh
ciBhcnJheSA9IG5ldyBVaW50OEFycmF5KDI1Nik7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAy
NTY7ICsraSkKKyAgICAgICAgYXJyYXlbaV0gPSBpOworICAgIHZhciBidWlsZGVyID0gbmV3IFdl
YktpdEJsb2JCdWlsZGVyKCk7CisgICAgYnVpbGRlci5hcHBlbmQoYXJyYXkuYnVmZmVyKTsKKyAg
ICByZXR1cm4gYnVpbGRlci5nZXRCbG9iKCk7Cit9CisKK3ZhciB1cmwgPSAid3M6Ly8xMjcuMC4w
LjE6ODg4MC93ZWJzb2NrZXQvdGVzdHMvaHliaS93b3JrZXJzL3Jlc291cmNlcy9zZW5kLWJsb2Ii
OwordmFyIHdzID0gbmV3IFdlYlNvY2tldCh1cmwpOworCit3cy5vbm9wZW4gPSBmdW5jdGlvbigp
Cit7CisgICAgd3Muc2VuZChjcmVhdGVCbG9iQ29udGFpbmluZ0hlbGxvV29ybGQoKSk7CisgICAg
d3Muc2VuZChjcmVhdGVFbXB0eUJsb2IoKSk7CisgICAgd3Muc2VuZChjcmVhdGVCbG9iQ29udGFp
bmluZ0FsbERpc3RpbmN0Qnl0ZXMoKSk7Cit9OworCit3cy5vbm1lc3NhZ2UgPSBmdW5jdGlvbihl
dmVudCkKK3sKKyAgICBwb3N0TWVzc2FnZShldmVudC5kYXRhKTsKK307CisKK3dzLm9uY2xvc2Ug
PSBmdW5jdGlvbihjbG9zZUV2ZW50KQoreworICAgIGlmIChjbG9zZUV2ZW50Lndhc0NsZWFuID09
PSB0cnVlKQorICAgICAgICBwb3N0TWVzc2FnZSgiUEFTUzogY2xvc2VFdmVudC53YXNDbGVhbiBp
cyB0cnVlLiIpOworICAgIGVsc2UKKyAgICAgICAgcG9zdE1lc3NhZ2UoIkZBSUw6IGNsb3NlRXZl
bnQud2FzQ2xlYW4gc2hvdWxkIGJlIHRydWUsIGJ1dCB3YXM6ICIgKyBjbG9zZUV2ZW50Lndhc0Ns
ZWFuKTsKKyAgICBwb3N0TWVzc2FnZSgiRE9ORSIpOworfTsKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvd29ya2Vycy9yZXNvdXJjZXMvc2Vu
ZC1ibG9iX3dzaC5weSBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5
Ymkvd29ya2Vycy9yZXNvdXJjZXMvc2VuZC1ibG9iX3dzaC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMjRlM2Y0
ZDA3OTQ1YzkyY2FhYmRjMDM3ZWM1MDA4MjRhNDJhMWEyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS93b3JrZXJzL3Jlc291cmNl
cy9zZW5kLWJsb2Jfd3NoLnB5CkBAIC0wLDAgKzEsMjEgQEAKK2Zyb20gbW9kX3B5d2Vic29ja2V0
IGltcG9ydCBjb21tb24KK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBtc2d1dGlsCisKKwor
ZGVmIHdlYl9zb2NrZXRfZG9fZXh0cmFfaGFuZHNoYWtlKHJlcXVlc3QpOgorICAgIHBhc3MgIyBB
bHdheXMgYWNjZXB0LgorCisKK2RlZiB3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEocmVxdWVzdCk6
CisgICAgZXhwZWN0ZWRfbWVzc2FnZXMgPSBbJ0hlbGxvLCB3b3JsZCEnLCAnJywgYWxsX2Rpc3Rp
bmN0X2J5dGVzKCldCisKKyAgICBmb3IgdGVzdF9udW1iZXIsIGV4cGVjdGVkX21lc3NhZ2UgaW4g
ZW51bWVyYXRlKGV4cGVjdGVkX21lc3NhZ2VzKToKKyAgICAgICAgbWVzc2FnZSA9IG1zZ3V0aWwu
cmVjZWl2ZV9tZXNzYWdlKHJlcXVlc3QpCisgICAgICAgIGlmIHR5cGUobWVzc2FnZSkgPT0gc3Ry
IGFuZCBtZXNzYWdlID09IGV4cGVjdGVkX21lc3NhZ2U6CisgICAgICAgICAgICBtc2d1dGlsLnNl
bmRfbWVzc2FnZShyZXF1ZXN0LCAnUEFTUzogTWVzc2FnZSAjJWQuJyAlIHRlc3RfbnVtYmVyKQor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgbXNndXRpbC5zZW5kX21lc3NhZ2UocmVxdWVzdCwg
J0ZBSUw6IE1lc3NhZ2UgIyVkOiBSZWNlaXZlZCB1bmV4cGVjdGVkIG1lc3NhZ2U6ICVyJyAlICh0
ZXN0X251bWJlciwgbWVzc2FnZSkpCisKKworZGVmIGFsbF9kaXN0aW5jdF9ieXRlcygpOgorICAg
IHJldHVybiAnJy5qb2luKFtjaHIoaSkgZm9yIGkgaW4geHJhbmdlKDI1NildKQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS93b3JrZXJzL3Nl
bmQtYmxvYi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90
ZXN0cy9oeWJpL3dvcmtlcnMvc2VuZC1ibG9iLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MzNi
YjdlMzlmZjU1NTZhMzNhMTE0OGY1MTQ4MDljZTU0Y2Y2OTY4Ci0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS93b3JrZXJzL3NlbmQt
YmxvYi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMyBAQAorV2ViU29ja2V0OiBTZW5kIEJsb2Jz
IGluIFdlYiBXb3JrZXJzLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1BBU1MgUEFT
UzogTWVzc2FnZSAjMC4KK1BBU1MgUEFTUzogTWVzc2FnZSAjMS4KK1BBU1MgUEFTUzogTWVzc2Fn
ZSAjMi4KK1BBU1MgUEFTUzogY2xvc2VFdmVudC53YXNDbGVhbiBpcyB0cnVlLgorRE9ORQorUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvd29ya2Vycy9z
ZW5kLWJsb2IuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5
Ymkvd29ya2Vycy9zZW5kLWJsb2IuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNTc0NmViMjdmNDcxYjIwNGFl
ZTYzYTliNTIxNjA1MTA4Y2E0M2I4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS93b3JrZXJzL3NlbmQtYmxvYi5odG1sCkBAIC0w
LDAgKzEsNDAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0i
c3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vLi4vLi4vanMtdGVzdC1yZXNvdXJjZXMvanMtdGVz
dC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uLy4uLy4uL2pzLXRlc3QtcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0i
ZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHR5
cGU9InRleHQvamF2YXNjcmlwdCI+CitkZXNjcmlwdGlvbigiV2ViU29ja2V0OiBTZW5kIEJsb2Jz
IGluIFdlYiBXb3JrZXJzLiIpOworCit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CitpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLm92
ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0SGl4aWU3NldlYlNvY2tldFByb3RvY29sRW5hYmxlZCIs
IDApOworCitmdW5jdGlvbiBzdGFydHNXaXRoKHN0ciwgcHJlZml4KQoreworICAgIHJldHVybiBz
dHIuaW5kZXhPZihwcmVmaXgpID09IDA7Cit9CisKK3ZhciB3b3JrZXIgPSBuZXcgV29ya2VyKCJy
ZXNvdXJjZXMvc2VuZC1ibG9iLmpzIik7Cit3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24gKGV2
ZW50KQoreworICAgIHZhciBtZXNzYWdlID0gZXZlbnQuZGF0YTsKKyAgICBpZiAoc3RhcnRzV2l0
aChtZXNzYWdlLCAiUEFTUyIpKQorICAgICAgICB0ZXN0UGFzc2VkKG1lc3NhZ2UpOworICAgIGVs
c2UgaWYgKHN0YXJ0c1dpdGgobWVzc2FnZSwgIkZBSUwiKSkKKyAgICAgICAgdGVzdEZhaWxlZCht
ZXNzYWdlKQorICAgIGVsc2UKKyAgICAgICAgZGVidWcobWVzc2FnZSk7CisgICAgaWYgKG1lc3Nh
Z2UgPT09ICJET05FIikKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7Cit9OworCit2YXIgc3VjY2Vz
c2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uLy4u
Ly4uL2pzLXRlc3QtcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZCBi
L0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCmluZGV4IGU5YjZmMWIwMTAwMTViNWQ3
OWZkNWY2NmY2ODlkZTgzM2ViYTU0NGIuLjcxZWIxYmQ4ZTJkMmY5NTk1YTg1NTI3NTUzODFjYTlm
YTRlZDFhODIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCisr
KyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCkBAIC0zNjYsNiArMzY2LDggQEAg
ZmFzdC9maWxlc3lzdGVtCiBodHRwL3Rlc3RzL2ZpbGVzeXN0ZW0KIGh0dHAvdGVzdHMvbG9jYWwv
ZmlsZWFwaQogaHR0cC90ZXN0cy9zZWN1cml0eS9maWxlc3lzdGVtLWlmcmFtZS1mcm9tLXJlbW90
ZS5odG1sCitodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtZmlsZS1ibG9iLmh0
bWwKK2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1maWxlLWJsb2ItZmFpbC5o
dG1sCiAKICMgUmVxdWlyZXMgV2ViUCBzdXBwb3J0LgogZmFzdC9pbWFnZXMvd2VicC1pbWFnZS1k
ZWNvZGluZy5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBl
ZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCmluZGV4IDE1NmRiY2NhY2Q3OTZl
OWMzZTMyZDkwZmVhZTNjZDFiYmY1Y2Y1ZjUuLjk2OTM5MTkwMTU2OWI5MTA2Zjg0M2JjYzc1M2Vm
MDE5NjAwNDNiYWQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVk
CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCkBAIC0yNzcsNiArMjc3LDgg
QEAgaHR0cC90ZXN0cy9tZWRpYS92aWRlby1idWZmZXJlZC5odG1sCiBmYXN0L2ZpbGVzeXN0ZW0K
IGh0dHAvdGVzdHMvZmlsZXN5c3RlbQogaHR0cC90ZXN0cy9zZWN1cml0eS9maWxlc3lzdGVtLWlm
cmFtZS1mcm9tLXJlbW90ZS5odG1sCitodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3Nl
bmQtZmlsZS1ibG9iLmh0bWwKK2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1m
aWxlLWJsb2ItZmFpbC5odG1sCiAKICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQ2MjIzCiAjIFRoZSBXZWJLaXQgcGx1Z2luIGltcGxlbWVudGF0aW9uIGRvZXMgbm90
IHN1cHBvcnQgaWZyYW1lIHNoaW1zLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
cXQvU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQKaW5kZXggMzRhNGNm
ZDIyNzcwOTRkNjlmYmExYjEyMDdmNzU1NzUxNzkyMmJiYy4uOWJjZGNkMmM4OWE5MDQxMjE4ZThk
MGY4YmYwNjZjMWJmMGI2M2YzMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQv
U2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVkCkBAIC05OSw2ICs5
OSw4IEBAIHN2Zy93ZWJhcmNoaXZlCiBmYXN0L2ZpbGVzeXN0ZW0KIGh0dHAvdGVzdHMvZmlsZXN5
c3RlbQogaHR0cC90ZXN0cy9zZWN1cml0eS9maWxlc3lzdGVtLWlmcmFtZS1mcm9tLXJlbW90ZS5o
dG1sCitodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtZmlsZS1ibG9iLmh0bWwK
K2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1maWxlLWJsb2ItZmFpbC5odG1s
CiAKICMgRU5BQkxFKFFVT1RBKSBpcyBkaXNhYmxlZC4KIHN0b3JhZ2Uvc3RvcmFnZWluZm8tcXVl
cnktdXNhZ2UuaHRtbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBw
ZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZAppbmRleCAxZTRjYzhjYWE3MGQ5
MWNiODY5Y2IyNzBiMzE4YzY1YzM3NjA1ZTY4Li4zZDNiNjRmOTA3Njc1MWJjYjQwYmQ3YWY1MDNl
NWYxM2Q2OGQ2OGY1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBl
ZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZApAQCAtMTIwMiw2ICsxMjAy
LDggQEAgZmFzdC9wYXJzZXIvcHJlLWh0bWw1LXBhcnNlci1xdWlya3MuaHRtbAogZmFzdC9maWxl
c3lzdGVtCiBodHRwL3Rlc3RzL2ZpbGVzeXN0ZW0KIGh0dHAvdGVzdHMvc2VjdXJpdHkvZmlsZXN5
c3RlbS1pZnJhbWUtZnJvbS1yZW1vdGUuaHRtbAoraHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMv
aHliaS9zZW5kLWZpbGUtYmxvYi5odG1sCitodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJp
L3NlbmQtZmlsZS1ibG9iLWZhaWwuaHRtbAogCiAjIExheW91dFRlc3RDb250cm9sbGVyOjpub2Rl
c0Zyb21SZWN0IGlzIG5vdCBzdXBwb3J0ZWQuCiBmYXN0L2RvbS9ub2Rlc0Zyb21SZWN0LWJhc2lj
Lmh0bWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwppbmRleCAwYWZhYzUxZjMxZTFjNDljY2VjNWYwMzJiZDhlMzFiOTI0NTYw
NjA3Li5kMzExYjU2MjRkNDY0ZWQwZTc1M2M5MzA4Y2U1YjU3YmM0ZDZiZWM3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsNDAgQEAKKzIwMTEtMDktMDEgIFl1dGEgS2l0YW11cmEgIDx5dXRha0BjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgV2ViU29ja2V0OiBTZW5kIEJsb2IgYXMgV2ViU29ja2V0IGJp
bmFyeSBtZXNzYWdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD02NzQ2NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRlc3RzOiBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtYmxvYi5odG1s
CisgICAgICAgICAgICAgICBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtZmls
ZS1ibG9iLWZhaWwuaHRtbAorICAgICAgICAgICAgICAgaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVz
dHMvaHliaS9zZW5kLWZpbGUtYmxvYi5odG1sCisgICAgICAgICAgICAgICBodHRwL3Rlc3RzL3dl
YnNvY2tldC90ZXN0cy9oeWJpL3dvcmtlcnMvc2VuZC1ibG9iLmh0bWwKKworICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTV2ViU29ja2V0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTV2Vi
U29ja2V0OjpzZW5kKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhXZWJTb2NrZXRD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhXZWJTb2NrZXQ6OnNlbmRDYWxsYmFjayk6
CisgICAgICAgICogd2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oOgorICAg
ICAgICAqIHdlYnNvY2tldHMvV2ViU29ja2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlNv
Y2tldDo6c2VuZCk6CisgICAgICAgICogd2Vic29ja2V0cy9XZWJTb2NrZXQuaDoKKyAgICAgICAg
KiB3ZWJzb2NrZXRzL1dlYlNvY2tldC5pZGw6CisgICAgICAgIEZpeGluZyBjb2RlIGdlbmVyYXRv
ciBkaWQgbm90IHNvdW5kIGVhc3ksIGJlY2F1c2UgdGhlcmUgYXJlIHNvbWUgY2xhc3NlcyBkZXBl
bmRpbmcgb24KKyAgICAgICAgYnJva2VuIGJlaGF2aW9yIG9mIGN1cnJlbnQgY29kZSBnZW5lcmF0
b3IgKG9uZSBzdWNoIGV4YW1wbGUgaXMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKS4KKyAgICAg
ICAgQXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCwgbmV3IGN1c3RvbSBoYW5kbGVycyBmb3Igc2Vu
ZCgpIGFyZSBhZGRlZC4KKyAgICAgICAgKiB3ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Q2hhbm5lbDo6c2VuZCk6CisgICAgICAgICog
d2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmg6CisgICAgICAgICogd2Vic29ja2V0cy9Xb3Jr
ZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3Jr
ZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6c2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpX
b3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6UGVlcjo6c2VuZCk6CisgICAgICAgIChX
ZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6bWFpblRocmVhZFNlbmRC
bG9iKToKKyAgICAgICAgQSBCbG9iIGNhbiBiZSBkZXNlcmlhbGl6ZWQgZnJvbSB1cmwsIHR5cGUg
YW5kIHNpemUuCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hh
bm5lbDo6QnJpZGdlOjpzZW5kKToKKyAgICAgICAgS1VSTCwgU3RyaW5nIGFuZCBsb25nIGxvbmcg
KGNvcnJlc3BvbmRpbmcgdG8gdXJsLCB0eXBlIGFuZCBzaXplLCByZXNwZWN0aXZlbHkpIGNhbiBi
ZSBwYXNzZWQKKyAgICAgICAgc2FmZWx5IGFjcm9zcyB0aHJlYWRzLgorICAgICAgICAqIHdlYnNv
Y2tldHMvV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaDoKKwogMjAxMS0wOS0wMSAg
S2VudGFybyBIYXJhICA8aGFyYWtlbkBnb29nbGUuY29tPgogCiAgICAgICAgIEdlbmVyYXRlIGEg
RmlsZVJlYWRlciBjb25zdHJ1Y3RvciBvZiBWOCB1c2luZyB0aGUgSURMICdDb25zdHJ1Y3Rvcicg
ZXh0ZW5kZWQgYXR0cmlidXRlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1dlYlNvY2tldEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dl
YlNvY2tldEN1c3RvbS5jcHAKaW5kZXggYWY1ZGFjYTU1NWUwODllYzEyMjU4YzYxNzIyYzYwN2Nk
ZjMwMTZjYS4uMWI5NTFhMDQwOGQ5MDQ1MDg1NmNiMjJkZGZlYTAyZDg2MWYyZTYxNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDdXN0b20uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q3VzdG9tLmNwcApAQCAt
MzUsOCArMzUsOSBAQAogCiAjaW5jbHVkZSAiSlNXZWJTb2NrZXQuaCIKIAotI2luY2x1ZGUgIktV
UkwuaCIKKyNpbmNsdWRlICJKU0Jsb2IuaCIKICNpbmNsdWRlICJKU0V2ZW50TGlzdGVuZXIuaCIK
KyNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiV2ViU29ja2V0LmgiCiAjaW5jbHVkZSA8cnVu
dGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTg1LDYgKzg2LDMwIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvcjo6Y29u
c3RydWN0SlNXZWJTb2NrZXQoRXhlY1N0CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShDUkVB
VEVfRE9NX1dSQVBQRVIoZXhlYywganNDb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCksIFdlYlNv
Y2tldCwgd2ViU29ja2V0LmdldCgpKSk7CiB9CiAKK0pTVmFsdWUgSlNXZWJTb2NrZXQ6OnNlbmQo
RXhlY1N0YXRlKiBleGVjKQoreworICAgIGlmICghZXhlYy0+YXJndW1lbnRDb3VudCgpKQorICAg
ICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBjcmVhdGVTeW50YXhFcnJvcihleGVjLCAiTm90
IGVub3VnaCBhcmd1bWVudHMiKSk7CisKKyAgICBKU1ZhbHVlIG1lc3NhZ2UgPSBleGVjLT5hcmd1
bWVudCgwKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBib29sIHJlc3VsdDsKKyAg
ICBpZiAobWVzc2FnZS5pbmhlcml0cygmSlNCbG9iOjpzX2luZm8pKQorICAgICAgICByZXN1bHQg
PSBpbXBsKCktPnNlbmQodG9CbG9iKG1lc3NhZ2UpLCBlYyk7CisgICAgZWxzZSB7CisgICAgICAg
IFN0cmluZyBzdHJpbmdNZXNzYWdlID0gdXN0cmluZ1RvU3RyaW5nKG1lc3NhZ2UudG9TdHJpbmco
ZXhlYykpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgcmVzdWx0ID0gaW1wbCgpLT5zZW5kKHN0cmlu
Z01lc3NhZ2UsIGVjKTsKKyAgICB9CisgICAgaWYgKGVjKSB7CisgICAgICAgIHNldERPTUV4Y2Vw
dGlvbihleGVjLCBlYyk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKwor
ICAgIHJldHVybiBqc0Jvb2xlYW4ocmVzdWx0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOFdlYlNvY2tldEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhXZWJTb2NrZXRDdXN0b20uY3BwCmluZGV4IGFmZDkxZjZmYjI0NmIwNDA2NWI0MjFhMmJl
ZDIxZjVlZjYxMjRjY2UuLjI3ZGI2N2U2YjlmNDliNWU2OGY5MTI1MjFkYzhkMjhlMzdkY2Y0Y2Qg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYlNvY2tl
dEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2Vi
U29ja2V0Q3VzdG9tLmNwcApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAj
aW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJW
OEJsb2IuaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCiAjaW5jbHVkZSAiVjhVdGlsaXRpZXMuaCIK
ICNpbmNsdWRlICJXZWJTb2NrZXQuaCIKQEAgLTEwOCw2ICsxMDksMzQgQEAgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IFY4V2ViU29ja2V0Ojpjb25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1
bWVudHMmIGFyZ3MKICAgICByZXR1cm4gYXJncy5Ib2xkZXIoKTsKIH0KIAordjg6OkhhbmRsZTx2
ODo6VmFsdWU+IFY4V2ViU29ja2V0OjpzZW5kQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYg
YXJncykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5XZWJTb2NrZXQuc2VuZCgpIik7CisKKyAgICBp
ZiAoIWFyZ3MuTGVuZ3RoKCkpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJOb3QgZW5vdWdo
IGFyZ3VtZW50cyIsIFY4UHJveHk6OlN5bnRheEVycm9yKTsKKworICAgIFdlYlNvY2tldCogd2Vi
U29ja2V0ID0gVjhXZWJTb2NrZXQ6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOworICAgIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBtZXNzYWdlID0gYXJnc1swXTsKKyAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKKyAgICBib29sIHJlc3VsdDsKKyAgICBpZiAoVjhCbG9iOjpIYXNJbnN0YW5jZShtZXNz
YWdlKSkgeworICAgICAgICBCbG9iKiBibG9iID0gVjhCbG9iOjp0b05hdGl2ZSh2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+OjpDYXN0KG1lc3NhZ2UpKTsKKyAgICAgICAgQVNTRVJUKGJsb2IpOworICAg
ICAgICByZXN1bHQgPSB3ZWJTb2NrZXQtPnNlbmQoYmxvYiwgZWMpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIHY4OjpUcnlDYXRjaCB0cnlDYXRjaDsKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6U3Ry
aW5nPiBzdHJpbmdNZXNzYWdlID0gbWVzc2FnZS0+VG9TdHJpbmcoKTsKKyAgICAgICAgaWYgKHRy
eUNhdGNoLkhhc0NhdWdodCgpKQorICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IodHJ5Q2F0
Y2guRXhjZXB0aW9uKCkpOworICAgICAgICByZXN1bHQgPSB3ZWJTb2NrZXQtPnNlbmQodG9XZWJD
b3JlU3RyaW5nKG1lc3NhZ2UpLCBlYyk7CisgICAgfQorICAgIGlmIChlYykKKyAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoZWMpOworCisgICAgcmV0dXJuIHY4Qm9vbGVhbihyZXN1bHQpOworfQor
CiB9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgIC8vIEVOQUJMRShXRUJfU09DS0VU
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvVGhyZWFkYWJsZVdlYlNv
Y2tldENoYW5uZWwuaCBiL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvVGhyZWFkYWJsZVdlYlNv
Y2tldENoYW5uZWwuaAppbmRleCBjZDljZTI1MmE0Y2Q1YmQ2N2E3MzljZmM1MzMyNzA4ZTBlZDQ4
Y2ZlLi4zN2U5MTM5ZDE0YjMwZDk3NTgxNmM3OGVmYzNlNzlkNzFlMzVjNTU4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1RocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bC5oCkBAIC0zOSw2ICszOSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQmxv
YjsKIGNsYXNzIEtVUkw7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xhc3MgV2Vi
U29ja2V0Q2hhbm5lbENsaWVudDsKQEAgLTUzLDYgKzU0LDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBjb25uZWN0KGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHByb3RvY29sKSA9IDA7
CiAgICAgdmlydHVhbCBTdHJpbmcgc3VicHJvdG9jb2woKSA9IDA7IC8vIFdpbGwgYmUgYXZhaWxh
YmxlIGFmdGVyIGRpZENvbm5lY3QoKSBjYWxsYmFjayBpcyBpbnZva2VkLgogICAgIHZpcnR1YWwg
Ym9vbCBzZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBz
ZW5kKGNvbnN0IEJsb2ImIGJpbmFyeURhdGEpID0gMDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxv
bmcgYnVmZmVyZWRBbW91bnQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCkg
PSAwOwogICAgIC8vIExvZyB0aGUgcmVhc29uIHRleHQgYW5kIGNsb3NlIHRoZSBjb25uZWN0aW9u
LiBXaWxsIGNhbGwgZGlkQ2xvc2UoKS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYnNv
Y2tldHMvV2ViU29ja2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0
LmNwcAppbmRleCBmOTg2YzUxMzQwOWJjYWNkYjg5ZGQ2MzMwY2EyOTQ1MTAxNTM0Nzk5Li45ZTc1
OGIwZWFmNDkwMDlkOTRmZDc0NjkyZTBiMTJkMTAyODk3M2ZhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd2Vi
c29ja2V0cy9XZWJTb2NrZXQuY3BwCkBAIC0yNjMsNiArMjYzLDI0IEBAIGJvb2wgV2ViU29ja2V0
OjpzZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgcmV0
dXJuIG1fY2hhbm5lbC0+c2VuZChtZXNzYWdlKTsKIH0KIAorYm9vbCBXZWJTb2NrZXQ6OnNlbmQo
QmxvYiogYmluYXJ5RGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgTE9HKE5ldHdvcmss
ICJXZWJTb2NrZXQgJXAgc2VuZCBibG9iICVzIiwgdGhpcywgYmluYXJ5RGF0YS0+dXJsKCkuc3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgQVNTRVJUKGJpbmFyeURhdGEpOworICAgIGlmICht
X3VzZUhpeGllNzZQcm90b2NvbCkKKyAgICAgICAgcmV0dXJuIHNlbmQoIltvYmplY3QgQmxvYl0i
LCBlYyk7CisgICAgaWYgKG1fc3RhdGUgPT0gQ09OTkVDVElORykgeworICAgICAgICBlYyA9IElO
VkFMSURfU1RBVEVfRVJSOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICht
X3N0YXRlID09IENMT1NJTkcgfHwgbV9zdGF0ZSA9PSBDTE9TRUQpIHsKKyAgICAgICAgbV9idWZm
ZXJlZEFtb3VudEFmdGVyQ2xvc2UgKz0gYmluYXJ5RGF0YS0+c2l6ZSgpICsgZ2V0RnJhbWluZ092
ZXJoZWFkKGJpbmFyeURhdGEtPnNpemUoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgQVNTRVJUKG1fY2hhbm5lbCk7CisgICAgcmV0dXJuIG1fY2hhbm5lbC0+c2VuZCgqYmlu
YXJ5RGF0YSk7Cit9CisKIHZvaWQgV2ViU29ja2V0OjpjbG9zZSgpCiB7CiAgICAgTE9HKE5ldHdv
cmssICJXZWJTb2NrZXQgJXAgY2xvc2UiLCB0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmggYi9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dl
YlNvY2tldC5oCmluZGV4IDc2NjU5ZjMyODM3NTU0ZDllODE1ZTExMjY4ZjI2MzE0ZGRhNzY5NTIu
LjAyMmM3MWFmZDY2ZDQ5Mjc2OTE0ZTk1YWY1NTIwMjkyNWViZTllNTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
d2Vic29ja2V0cy9XZWJTb2NrZXQuaApAQCAtNDYsNiArNDYsNyBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKK2NsYXNzIEJsb2I7CiBjbGFzcyBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDsK
IAogY2xhc3MgV2ViU29ja2V0IDogcHVibGljIFJlZkNvdW50ZWQ8V2ViU29ja2V0PiwgcHVibGlj
IEV2ZW50VGFyZ2V0LCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0LCBwdWJsaWMgV2ViU29ja2V0Q2hh
bm5lbENsaWVudCB7CkBAIC02Nyw2ICs2OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbm5lY3Qo
Y29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwcm90b2NvbHMsIEV4Y2Vw
dGlvbkNvZGUmKTsKIAogICAgIGJvb2wgc2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIEV4Y2Vw
dGlvbkNvZGUmKTsKKyAgICBib29sIHNlbmQoQmxvYiogYmluYXJ5RGF0YSwgRXhjZXB0aW9uQ29k
ZSYpOwogCiAgICAgdm9pZCBjbG9zZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93
ZWJzb2NrZXRzL1dlYlNvY2tldC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNv
Y2tldC5pZGwKaW5kZXggODFkNzU2M2YwN2M5MTQyNzQ1ZjdmMjliMWNlMzI1NWY1NmE2ZWNlMi4u
Y2QwNWMwNDJjODkxNmRkM2Y4ZDA0MGI4NzZiNzg5ZGE2YzA3MjhjZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3dlYnNvY2tldHMvV2ViU29ja2V0LmlkbApAQCAtNjMsNyArNjMsMTQgQEAgbW9kdWxlIHdlYnNv
Y2tldHMgewogICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsU3RyaW5nVG89VW5kZWZpbmVk
XSBET01TdHJpbmcgYmluYXJ5VHlwZQogICAgICAgICAgICAgc2V0dGVyIHJhaXNlcyhET01FeGNl
cHRpb24pOwogCi0gICAgICAgIFtSZXF1aXJlc0FsbEFyZ3VtZW50c10gYm9vbGVhbiBzZW5kKGlu
IERPTVN0cmluZyBkYXRhKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgLy8gRklYTUU6
IFVzZSBvdmVybG9hZGluZyBwcm92aWRlZCBieSBvdXIgSURMIGNvZGUgZ2VuZXJhdG9yLgorICAg
ICAgICAvLyBBY2NvcmRpbmcgdG8gV2ViIElETCBzcGVjaWZpY2F0aW9uLCBvdmVybG9hZGVkIGZ1
bmN0aW9uIHdpdGggRE9NU3RyaW5nIGFyZ3VtZW50CisgICAgICAgIC8vIHNob3VsZCBhY2NlcHQg
YW55dGhpbmcgdGhhdCBjYW4gYmUgY29udmVydGVkIHRvIGEgc3RyaW5nIChpbmNsdWRpbmcgbnVt
YmVycywKKyAgICAgICAgLy8gYm9vbGVhbnMsIG51bGwsIHVuZGVmaW5lZCBhbmQgb2JqZWN0cyBl
eGNlcHQgQmxvYikuIEN1cnJlbnQgY29kZSBnZW5lcmF0b3IgZG9lcworICAgICAgICAvLyBub3Qg
aGFuZGxlIHRoaXMgcnVsZSBjb3JyZWN0bHkuCisgICAgICAgIC8vIFtSZXF1aXJlc0FsbEFyZ3Vt
ZW50c10gYm9vbGVhbiBzZW5kKGluIEJsb2IgZGF0YSkgcmFpc2VzKERPTUV4Y2VwdGlvbik7Cisg
ICAgICAgIC8vIFtSZXF1aXJlc0FsbEFyZ3VtZW50c10gYm9vbGVhbiBzZW5kKGluIERPTVN0cmlu
ZyBkYXRhKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgW0N1c3RvbV0gYm9vbGVhbiBz
ZW5kKGluIERPTVN0cmluZyBkYXRhKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKICAgICAgICAgdm9p
ZCBjbG9zZSgpOwogCiAgICAgICAgIC8vIEV2ZW50VGFyZ2V0IGludGVyZmFjZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAKaW5kZXggNjY3MmZkZDRj
YmMzM2FmMzQyZGQxN2E4YzhjNjFjZGNiOWQ4NTBkMy4uODEzNWEzM2U3NDQ2MmU0ZDVlODVmOTg0
NDA0Y2IyNDk3ZDFiM2MzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9X
ZWJTb2NrZXRDaGFubmVsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNv
Y2tldENoYW5uZWwuY3BwCkBAIC0xNzAsNiArMTcwLDE0IEBAIGJvb2wgV2ViU29ja2V0Q2hhbm5l
bDo6c2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jv
b2wgV2ViU29ja2V0Q2hhbm5lbDo6c2VuZChjb25zdCBCbG9iJiBiaW5hcnlEYXRhKQoreworICAg
IExPRyhOZXR3b3JrLCAiV2ViU29ja2V0Q2hhbm5lbCAlcCBzZW5kIGJsb2IgJXMiLCB0aGlzLCBi
aW5hcnlEYXRhLnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIEFTU0VSVCghbV91
c2VIaXhpZTc2UHJvdG9jb2wpOworICAgIGVucXVldWVCbG9iRnJhbWUoT3BDb2RlQmluYXJ5LCBi
aW5hcnlEYXRhKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogdW5zaWduZWQgbG9uZyBXZWJTb2Nr
ZXRDaGFubmVsOjpidWZmZXJlZEFtb3VudCgpIGNvbnN0CiB7CiAgICAgTE9HKE5ldHdvcmssICJX
ZWJTb2NrZXRDaGFubmVsICVwIGJ1ZmZlcmVkQW1vdW50IiwgdGhpcyk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuaCBiL1NvdXJjZS9XZWJD
b3JlL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5oCmluZGV4IDQwMDQ5OTEwNmQ3OWY5YTg0
NTNiMTk3YzUwNWJmZmMzMzE3ZGU4ODMuLjMxNGI3MWVmZWQxNWZjZWE2Nzc2Y2M1ODNhNTI1MDBl
N2E4MjcwODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0
Q2hhbm5lbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5l
bC5oCkBAIC02Niw2ICs2Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY29ubmVjdChj
b25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiBwcm90b2NvbCk7CiAgICAgdmlydHVhbCBTdHJpbmcg
c3VicHJvdG9jb2woKTsKICAgICB2aXJ0dWFsIGJvb2wgc2VuZChjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpOworICAgIHZpcnR1YWwgYm9vbCBzZW5kKGNvbnN0IEJsb2ImIGJpbmFyeURhdGEpOwogICAg
IHZpcnR1YWwgdW5zaWduZWQgbG9uZyBidWZmZXJlZEFtb3VudCgpIGNvbnN0OwogICAgIHZpcnR1
YWwgdm9pZCBjbG9zZSgpOyAvLyBTdGFydCBjbG9zaW5nIGhhbmRzaGFrZS4KICAgICB2aXJ0dWFs
IHZvaWQgZmFpbChjb25zdCBTdHJpbmcmIHJlYXNvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS93ZWJzb2NrZXRzL1dvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwu
Y3BwCmluZGV4IDU2Zjk3YWFkMDBmN2E2NDE5NmM4ZmJjZjg1ZDFiZTUzYjQ4YTc0ZjcuLmUyYTgx
OGMxYjVhOTI3OGJlNWUzZGVhMmRlZDg2ZTY2OTRmYWFiYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3dlYnNvY2tldHMvV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENo
YW5uZWwuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAKICNpbmNsdWRlICJXb3JrZXJUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbC5oIgogCisjaW5jbHVkZSAiQmxvYi5oIgogI2luY2x1ZGUgIkNyb3Nz
VGhyZWFkVGFzay5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5oIgpAQCAtODcsNiArODgsMTMgQEAgYm9vbCBXb3JrZXJUaHJl
YWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6c2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiAgICAg
cmV0dXJuIG1fYnJpZGdlLT5zZW5kKG1lc3NhZ2UpOwogfQogCitib29sIFdvcmtlclRocmVhZGFi
bGVXZWJTb2NrZXRDaGFubmVsOjpzZW5kKGNvbnN0IEJsb2ImIGJpbmFyeURhdGEpCit7CisgICAg
aWYgKCFtX2JyaWRnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX2JyaWRn
ZS0+c2VuZChiaW5hcnlEYXRhKTsKK30KKwogdW5zaWduZWQgbG9uZyBXb3JrZXJUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbDo6YnVmZmVyZWRBbW91bnQoKSBjb25zdAogewogICAgIGlmICghbV9i
cmlkZ2UpCkBAIC0xNzIsNiArMTgwLDE1IEBAIHZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tl
dENoYW5uZWw6OlBlZXI6OnNlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogICAgIG1fbG9hZGVy
UHJveHkucG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KGNyZWF0ZUNhbGxiYWNrVGFzaygm
d29ya2VyQ29udGV4dERpZFNlbmQsIG1fd29ya2VyQ2xpZW50V3JhcHBlciwgc2VudCksIG1fdGFz
a01vZGUpOwogfQogCit2b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpQZWVy
OjpzZW5kKGNvbnN0IEJsb2ImIGJpbmFyeURhdGEpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKKyAgICBpZiAoIW1fbWFpbldlYlNvY2tldENoYW5uZWwgfHwgIW1fd29ya2VyQ2xpZW50
V3JhcHBlcikKKyAgICAgICAgcmV0dXJuOworICAgIGJvb2wgc2VudCA9IG1fbWFpbldlYlNvY2tl
dENoYW5uZWwtPnNlbmQoYmluYXJ5RGF0YSk7CisgICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza0Zv
ck1vZGVUb1dvcmtlckNvbnRleHQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZ3b3JrZXJDb250ZXh0RGlk
U2VuZCwgbV93b3JrZXJDbGllbnRXcmFwcGVyLCBzZW50KSwgbV90YXNrTW9kZSk7Cit9CisKIHN0
YXRpYyB2b2lkIHdvcmtlckNvbnRleHREaWRHZXRCdWZmZXJlZEFtb3VudChTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVs
Q2xpZW50V3JhcHBlcj4gd29ya2VyQ2xpZW50V3JhcHBlciwgdW5zaWduZWQgbG9uZyBidWZmZXJl
ZEFtb3VudCkKIHsKICAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQsIGNvbnRleHQtPmlzV29ya2Vy
Q29udGV4dCgpKTsKQEAgLTM1OCw2ICszNzUsMTYgQEAgdm9pZCBXb3JrZXJUaHJlYWRhYmxlV2Vi
U29ja2V0Q2hhbm5lbDo6bWFpblRocmVhZFNlbmQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY28K
ICAgICBwZWVyLT5zZW5kKG1lc3NhZ2UpOwogfQogCit2b2lkIFdvcmtlclRocmVhZGFibGVXZWJT
b2NrZXRDaGFubmVsOjptYWluVGhyZWFkU2VuZEJsb2IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgUGVlciogcGVlciwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHR5cGUs
IGxvbmcgbG9uZyBzaXplKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNT
RVJUX1VOVVNFRChjb250ZXh0LCBjb250ZXh0LT5pc0RvY3VtZW50KCkpOworICAgIEFTU0VSVChw
ZWVyKTsKKworICAgIFJlZlB0cjxCbG9iPiBibG9iID0gQmxvYjo6Y3JlYXRlKHVybCwgdHlwZSwg
c2l6ZSk7CisgICAgcGVlci0+c2VuZCgqYmxvYik7Cit9CisKIGJvb2wgV29ya2VyVGhyZWFkYWJs
ZVdlYlNvY2tldENoYW5uZWw6OkJyaWRnZTo6c2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7
CiAgICAgaWYgKCFtX3dvcmtlckNsaWVudFdyYXBwZXIpCkBAIC0zNzEsNiArMzk4LDE5IEBAIGJv
b2wgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OkJyaWRnZTo6c2VuZChjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpCiAgICAgcmV0dXJuIGNsaWVudFdyYXBwZXIgJiYgY2xpZW50V3JhcHBl
ci0+c2VudCgpOwogfQogCitib29sIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpC
cmlkZ2U6OnNlbmQoY29uc3QgQmxvYiYgYmluYXJ5RGF0YSkKK3sKKyAgICBpZiAoIW1fd29ya2Vy
Q2xpZW50V3JhcHBlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEFTU0VSVChtX3BlZXIp
OworICAgIHNldE1ldGhvZE5vdENvbXBsZXRlZCgpOworICAgIG1fbG9hZGVyUHJveHkucG9zdFRh
c2tUb0xvYWRlcihjcmVhdGVDYWxsYmFja1Rhc2soJldvcmtlclRocmVhZGFibGVXZWJTb2NrZXRD
aGFubmVsOjptYWluVGhyZWFkU2VuZEJsb2IsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MobV9wZWVy
KSwgYmluYXJ5RGF0YS51cmwoKSwgYmluYXJ5RGF0YS50eXBlKCksIGJpbmFyeURhdGEuc2l6ZSgp
KSk7CisgICAgUmVmUHRyPEJyaWRnZT4gcHJvdGVjdCh0aGlzKTsKKyAgICB3YWl0Rm9yTWV0aG9k
Q29tcGxldGlvbigpOworICAgIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBl
ciogY2xpZW50V3JhcHBlciA9IG1fd29ya2VyQ2xpZW50V3JhcHBlci5nZXQoKTsKKyAgICByZXR1
cm4gY2xpZW50V3JhcHBlciAmJiBjbGllbnRXcmFwcGVyLT5zZW50KCk7Cit9CisKIHZvaWQgV29y
a2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6Om1haW5UaHJlYWRCdWZmZXJlZEFtb3VudChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQZWVyKiBwZWVyKQogewogICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRz
L1dvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmggYi9Tb3VyY2UvV2ViQ29yZS93ZWJz
b2NrZXRzL1dvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmgKaW5kZXggYTQ4YThhMTlk
N2MyMDg4YzEyZDljMTc2MjJiMjAxNTM3MjUxMTRmOC4uM2QzYWRlNWY3NWFkZDBlNTFhMWZmNTRm
MmU4ZmJlODMyZGYyNDNmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9X
b3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dl
YnNvY2tldHMvV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaApAQCAtNjQsNiArNjQs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNvbm5lY3QoY29uc3QgS1VSTCYsIGNvbnN0
IFN0cmluZyYgcHJvdG9jb2wpOwogICAgIHZpcnR1YWwgU3RyaW5nIHN1YnByb3RvY29sKCk7CiAg
ICAgdmlydHVhbCBib29sIHNlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKyAgICB2aXJ0dWFs
IGJvb2wgc2VuZChjb25zdCBCbG9iJiBiaW5hcnlEYXRhKTsKICAgICB2aXJ0dWFsIHVuc2lnbmVk
IGxvbmcgYnVmZmVyZWRBbW91bnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKTsK
ICAgICB2aXJ0dWFsIHZvaWQgZmFpbChjb25zdCBTdHJpbmcmIHJlYXNvbik7CkBAIC05Myw2ICs5
NCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wgdXNlSGl4aWU3NlByb3RvY29sKCk7CiAgICAg
ICAgIHZvaWQgY29ubmVjdChjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiBwcm90b2NvbCk7CiAg
ICAgICAgIHZvaWQgc2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOworICAgICAgICB2b2lkIHNl
bmQoY29uc3QgQmxvYiYgYmluYXJ5RGF0YSk7CiAgICAgICAgIHZvaWQgYnVmZmVyZWRBbW91bnQo
KTsKICAgICAgICAgdm9pZCBjbG9zZSgpOwogICAgICAgICB2b2lkIGZhaWwoY29uc3QgU3RyaW5n
JiByZWFzb24pOwpAQCAtMTI1LDYgKzEyNyw3IEBAIHByaXZhdGU6CiAgICAgICAgIH5CcmlkZ2Uo
KTsKICAgICAgICAgdm9pZCBjb25uZWN0KGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHByb3Rv
Y29sKTsKICAgICAgICAgYm9vbCBzZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisgICAgICAg
IGJvb2wgc2VuZChjb25zdCBCbG9iJiBiaW5hcnlEYXRhKTsKICAgICAgICAgdW5zaWduZWQgbG9u
ZyBidWZmZXJlZEFtb3VudCgpOwogICAgICAgICB2b2lkIGNsb3NlKCk7CiAgICAgICAgIHZvaWQg
ZmFpbChjb25zdCBTdHJpbmcmIHJlYXNvbik7CkBAIC0xNjAsNiArMTYzLDcgQEAgcHJpdmF0ZToK
IAogICAgIHN0YXRpYyB2b2lkIG1haW5UaHJlYWRDb25uZWN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBQZWVyKiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2wpOwogICAgIHN0
YXRpYyB2b2lkIG1haW5UaHJlYWRTZW5kKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQZWVyKiwg
Y29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKyAgICBzdGF0aWMgdm9pZCBtYWluVGhyZWFkU2VuZEJs
b2IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBlZXIqLCBjb25zdCBLVVJMJiwgY29uc3QgU3Ry
aW5nJiB0eXBlLCBsb25nIGxvbmcgc2l6ZSk7CiAgICAgc3RhdGljIHZvaWQgbWFpblRocmVhZEJ1
ZmZlcmVkQW1vdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQZWVyKik7CiAgICAgc3RhdGlj
IHZvaWQgbWFpblRocmVhZENsb3NlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQZWVyKik7CiAg
ICAgc3RhdGljIHZvaWQgbWFpblRocmVhZEZhaWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBl
ZXIqLCBjb25zdCBTdHJpbmcmIHJlYXNvbik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106104</attachid>
            <date>2011-09-02 01:23:14 -0700</date>
            <delta_ts>2011-09-02 02:23:19 -0700</delta_ts>
            <desc>Patch v3</desc>
            <filename>bug-67465-20110902172312.patch</filename>
            <type>text/plain</type>
            <size>42495</size>
            <attacher name="Yuta Kitamura">yutak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTQzODcKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA0NTMwZTE1N2QzY2VkNzU0ZmFjMzlh
ZDU4OTVkOWZmN2VmOTU5OWE1Li4xMjhiMDBmYTJmZTJmZmVlMTZlNWQ0N2Q0NThlYmI2ZWZmZjY0
ZGUyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTEtMDktMDIgIFl1dGEgS2l0YW11cmEgIDx5
dXRha0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViU29ja2V0OiBTZW5kIEJsb2IgYXMgV2Vi
U29ja2V0IGJpbmFyeSBtZXNzYWdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD02NzQ2NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGl4aWU3Ni9zZW5kLW9i
amVjdC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvd2Vic29ja2V0
L3Rlc3RzL2hpeGllNzYvc2VuZC1vYmplY3QuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90
ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWJsb2ItZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtYmxvYi5odG1s
OgorICAgICAgICBBZGRlZC4gU2VuZCB0aHJlZSBCbG9icyBlYWNoIG9mIHdoaWNoIGNvbnRhaW5z
IGEgc21hbGwgYmluYXJ5IG1lc3NhZ2UuCisgICAgICAgICogaHR0cC90ZXN0cy93ZWJzb2NrZXQv
dGVzdHMvaHliaS9zZW5kLWJsb2Jfd3NoLnB5OgorICAgICAgICBBZGRlZC4gcmVjZWl2ZV9tZXNz
YWdlKCkgcmV0dXJucyBhIHVuaWNvZGUgdmFsdWUgaWYgdGhlIHJlY2VpdmVkIG1lc3NhZ2Ugd2Fz
IHRleHQsIG9yCisgICAgICAgIGEgc3RyIHZhbHVlIGlmIHRoZSBtZXNzYWdlIHdhcyBiaW5hcnku
CisgICAgICAgICogaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWZpbGUtYmxv
Yi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rl
c3RzL2h5Ymkvc2VuZC1maWxlLWJsb2ItZmFpbC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1maWxlLWJsb2ItZmFpbC5o
dG1sOgorICAgICAgICBBZGRlZC4gSWYgd2UgZGVsZXRlIGEgZmlsZSBiZWZvcmUgcmVhZGluZyBp
dCwgRmlsZVJlYWRlckxvYWRlciByZWxpYWJseSBmYWlscy4KKyAgICAgICAgKiBodHRwL3Rlc3Rz
L3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtZmlsZS1ibG9iLmh0bWw6CisgICAgICAgIEFkZGVk
LiBDcmVhdGUgYSBGaWxlIGFuZCB0cnkgdG8gc2VuZCBpdCBhcyBhIEJsb2IuCisgICAgICAgICog
aHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWZpbGUtYmxvYl93c2gucHk6IEFk
ZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvd29ya2Vycy9y
ZXNvdXJjZXMvc2VuZC1ibG9iLmpzOgorICAgICAgICBBZGRlZC4gU2FtZSBhcyBzZW5kLWJsb2Iu
aHRtbCBhYm92ZS4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3dv
cmtlcnMvcmVzb3VyY2VzL3NlbmQtYmxvYl93c2gucHk6CisgICAgICAgIEFkZGVkLiBTYW1lIGFz
IHNlbmQtYmxvYl93c2gucHkgYWJvdmUuCisgICAgICAgICogaHR0cC90ZXN0cy93ZWJzb2NrZXQv
dGVzdHMvaHliaS93b3JrZXJzL3NlbmQtYmxvYi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvd29ya2Vycy9zZW5kLWJsb2IuaHRt
bDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1NraXBwZWQ6CisgICAgICAgIHNlbmQt
ZmlsZS1ibG9iLmh0bWwgYW5kIHNlbmQtZmlsZS1ibG9iLWZhaWwuaHRtbCBkZXBlbmQgb24gYXZh
aWxhYmlsaXR5IG9mIEZpbGUgQVBJLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9Ta2lwcGVkOiBE
aXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9Ta2lwcGVkOiBEaXR0by4KKyAgICAgICAgKiBw
bGF0Zm9ybS93aW4vU2tpcHBlZDogRGl0dG8uCisKIDIwMTEtMDktMDEgIFRha2FzaGkgVG95b3No
aW1hICA8dG95b3NoaW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtXZWJTb2NrZXRdIEltcGxl
bWVudCBXZWJTb2NrZXQ6OmNsb3NlKCkgY29kZSBhbmQgcmVhc29uIGhhbmRsaW5nLgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGl4aWU3Ni9zZW5k
LW9iamVjdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90
ZXN0cy9oaXhpZTc2L3NlbmQtb2JqZWN0LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYzliMmNh
ZDJmMTllYTYyZmZlMDU0NWFmYjdlNzkyYjNjODg4OTUyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGl4aWU3Ni9zZW5kLW9iamVjdC1l
eHBlY3RlZC50eHQKQEAgLTAsMCArMSwxNCBAQAorV2ViU29ja2V0OiBzZW5kKG9iamVjdCkgc2hv
dWxkIGJlIGludGVycHJldGVkIGFzIHNlbmQob2JqZWN0LnRvU3RyaW5nKCkpLgorCitPbiBzdWNj
ZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBi
eSAiVEVTVCBDT01QTEVURSIuCisKK1BBU1MgY2xvc2VFdmVudC53YXNDbGVhbiBpcyB0cnVlCitQ
QVNTIHJlY2VpdmVkTWVzc2FnZXMubGVuZ3RoIGlzIDQKK1BBU1MgcmVjZWl2ZWRNZXNzYWdlc1sw
XSBpcyAiW29iamVjdCBPYmplY3RdIgorUEFTUyByZWNlaXZlZE1lc3NhZ2VzWzFdIGlzICJbb2Jq
ZWN0IEFycmF5QnVmZmVyXSIKK1BBU1MgcmVjZWl2ZWRNZXNzYWdlc1syXSBpcyAiW29iamVjdCBC
bG9iXSIKK1BBU1MgcmVjZWl2ZWRNZXNzYWdlc1szXSBpcyAiR29vZGJ5ZSIKK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oaXhpZTc2L3NlbmQtb2JqZWN0Lmh0
bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oaXhpZTc2L3NlbmQt
b2JqZWN0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTA5MWZmYzg3OTQ3YmIwZWU2ZDZjYzA3Y2Q3NWRjNjFl
NTBiMmNiNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29j
a2V0L3Rlc3RzL2hpeGllNzYvc2VuZC1vYmplY3QuaHRtbApAQCAtMCwwICsxLDU3IEBACis8IURP
Q1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9
Ii4uLy4uLy4uLy4uL2pzLXRlc3QtcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi8uLi8uLi9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxk
aXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJXZWJTb2NrZXQ6
IHNlbmQob2JqZWN0KSBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgYXMgc2VuZChvYmplY3QudG9TdHJp
bmcoKSkuIik7CisKK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKworZnVuY3Rpb24gY3Jl
YXRlRW1wdHlCbG9iKCkKK3sKKyAgICB2YXIgYnVpbGRlciA9IG5ldyBXZWJLaXRCbG9iQnVpbGRl
cigpOworICAgIHJldHVybiBidWlsZGVyLmdldEJsb2IoKTsKK30KKwordmFyIHdzID0gbmV3IFdl
YlNvY2tldCgid3M6Ly8xMjcuMC4wLjE6ODg4MC93ZWJzb2NrZXQvdGVzdHMvaGl4aWU3Ni9lY2hv
Iik7CisKK3ZhciBjbG9zZUV2ZW50OwordmFyIHJlY2VpdmVkTWVzc2FnZXMgPSBbXTsKK3ZhciBl
eHBlY3RlZE1lc3NhZ2VzID0gWyJbb2JqZWN0IE9iamVjdF0iLCAiW29iamVjdCBBcnJheUJ1ZmZl
cl0iLCAiW29iamVjdCBCbG9iXSIsICJHb29kYnllIl07CisKK3dzLm9ub3BlbiA9IGZ1bmN0aW9u
KCkKK3sKKyAgICB3cy5zZW5kKHt9KTsKKyAgICB3cy5zZW5kKG5ldyBBcnJheUJ1ZmZlcigpKTsK
KyAgICB3cy5zZW5kKGNyZWF0ZUVtcHR5QmxvYigpKTsKKyAgICB3cy5zZW5kKCJHb29kYnllIik7
Cit9OworCit3cy5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkKK3sKKyAgICByZWNlaXZlZE1l
c3NhZ2VzLnB1c2goZXZlbnQuZGF0YSk7Cit9OworCit2YXIgY2xvc2VFdmVudDsKKword3Mub25j
bG9zZSA9IGZ1bmN0aW9uKGV2ZW50KQoreworICAgIGNsb3NlRXZlbnQgPSBldmVudDsKKyAgICBz
aG91bGRCZVRydWUoImNsb3NlRXZlbnQud2FzQ2xlYW4iKTsKKworICAgIHNob3VsZEV2YWx1YXRl
VG8oInJlY2VpdmVkTWVzc2FnZXMubGVuZ3RoIiwgZXhwZWN0ZWRNZXNzYWdlcy5sZW5ndGgpOwor
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwZWN0ZWRNZXNzYWdlcy5sZW5ndGg7ICsraSkKKyAg
ICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJyZWNlaXZlZE1lc3NhZ2VzWyIgKyBpICsgIl0i
LCBleHBlY3RlZE1lc3NhZ2VzW2ldKTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK307CisKK3ZhciBz
dWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
Li4vLi4vanMtdGVzdC1yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0
L3Rlc3RzL2h5Ymkvc2VuZC1ibG9iLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1ibG9iLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5mZGY0OGQwNWYzZmQ3MjBlMGJhNWFhNjc5YzI2MmU0ZGRiMjMxYzIzCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWJs
b2ItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTIgQEAKK1dlYlNvY2tldDogU2VuZCBCbG9icy4K
KworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitQQVNTIFBBU1M6IE1lc3NhZ2UgIzAuCitQ
QVNTIFBBU1M6IE1lc3NhZ2UgIzEuCitQQVNTIFBBU1M6IE1lc3NhZ2UgIzIuCitQQVNTIGNsb3Nl
RXZlbnQud2FzQ2xlYW4gaXMgdHJ1ZQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQor
CitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vi
c29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1ibG9iLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtYmxvYi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVhYjkzNDZk
NzQ4M2E2NGE5MmFhYmY3OTFlZGI5YzlkMDM3NWY5OTIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtYmxvYi5odG1sCkBA
IC0wLDAgKzEsNzYgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJl
bD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vLi4vanMtdGVzdC1yZXNvdXJjZXMvanMtdGVz
dC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uLy4uL2pzLXRlc3QtcmVzb3VyY2Vz
L2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0iZGVz
Y3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHR5cGU9
InRleHQvamF2YXNjcmlwdCI+CitkZXNjcmlwdGlvbigiV2ViU29ja2V0OiBTZW5kIEJsb2JzLiIp
OworCit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CitpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLm92ZXJyaWRlUHJlZmVyZW5jZSgi
V2ViS2l0SGl4aWU3NldlYlNvY2tldFByb3RvY29sRW5hYmxlZCIsIDApOworCitmdW5jdGlvbiBz
dGFydHNXaXRoKHRhcmdldCwgcHJlZml4KQoreworICAgIHJldHVybiB0YXJnZXQuaW5kZXhPZihw
cmVmaXgpID09PSAwOworfQorCitmdW5jdGlvbiBjcmVhdGVCbG9iQ29udGFpbmluZ0hlbGxvV29y
bGQoKQoreworICAgIHZhciBidWlsZGVyID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7CisgICAg
YnVpbGRlci5hcHBlbmQoIkhlbGxvLCB3b3JsZCEiKTsKKyAgICByZXR1cm4gYnVpbGRlci5nZXRC
bG9iKCk7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZUVtcHR5QmxvYigpCit7CisgICAgdmFyIGJ1aWxk
ZXIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKKyAgICByZXR1cm4gYnVpbGRlci5nZXRCbG9i
KCk7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZUJsb2JDb250YWluaW5nQWxsRGlzdGluY3RCeXRlcygp
Cit7CisgICAgdmFyIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoMjU2KTsKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IDI1NjsgKytpKQorICAgICAgICBhcnJheVtpXSA9IGk7CisgICAgdmFyIGJ1aWxk
ZXIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKKyAgICBidWlsZGVyLmFwcGVuZChhcnJheS5i
dWZmZXIpOworICAgIHJldHVybiBidWlsZGVyLmdldEJsb2IoKTsKK30KKwordmFyIHVybCA9ICJ3
czovLzEyNy4wLjAuMTo4ODgwL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtYmxvYiI7Cit2YXIg
d3MgPSBuZXcgV2ViU29ja2V0KHVybCk7Cit2YXIgY2xvc2VFdmVudDsKKword3Mub25vcGVuID0g
ZnVuY3Rpb24oKQoreworICAgIHdzLnNlbmQoY3JlYXRlQmxvYkNvbnRhaW5pbmdIZWxsb1dvcmxk
KCkpOworICAgIHdzLnNlbmQoY3JlYXRlRW1wdHlCbG9iKCkpOworICAgIHdzLnNlbmQoY3JlYXRl
QmxvYkNvbnRhaW5pbmdBbGxEaXN0aW5jdEJ5dGVzKCkpOworfTsKKword3Mub25tZXNzYWdlID0g
ZnVuY3Rpb24oZXZlbnQpCit7CisgICAgdmFyIG1lc3NhZ2UgPSBldmVudC5kYXRhOworICAgIGlm
IChzdGFydHNXaXRoKG1lc3NhZ2UsICJQQVNTIikpCisgICAgICAgIHRlc3RQYXNzZWQobWVzc2Fn
ZSk7CisgICAgZWxzZQorICAgICAgICB0ZXN0RmFpbGVkKG1lc3NhZ2UpOworfTsKKword3Mub25j
bG9zZSA9IGZ1bmN0aW9uKGV2ZW50KQoreworICAgIGNsb3NlRXZlbnQgPSBldmVudDsKKyAgICBz
aG91bGRCZVRydWUoImNsb3NlRXZlbnQud2FzQ2xlYW4iKTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsK
K307CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vLi4vLi4vanMtdGVzdC1yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1ibG9iX3dzaC5weSBiL0xheW91dFRlc3RzL2h0
dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1ibG9iX3dzaC5weQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4wMjRlM2Y0ZDA3OTQ1YzkyY2FhYmRjMDM3ZWM1MDA4MjRhNDJhMWEyCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWJs
b2Jfd3NoLnB5CkBAIC0wLDAgKzEsMjEgQEAKK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBj
b21tb24KK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBtc2d1dGlsCisKKworZGVmIHdlYl9z
b2NrZXRfZG9fZXh0cmFfaGFuZHNoYWtlKHJlcXVlc3QpOgorICAgIHBhc3MgIyBBbHdheXMgYWNj
ZXB0LgorCisKK2RlZiB3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEocmVxdWVzdCk6CisgICAgZXhw
ZWN0ZWRfbWVzc2FnZXMgPSBbJ0hlbGxvLCB3b3JsZCEnLCAnJywgYWxsX2Rpc3RpbmN0X2J5dGVz
KCldCisKKyAgICBmb3IgdGVzdF9udW1iZXIsIGV4cGVjdGVkX21lc3NhZ2UgaW4gZW51bWVyYXRl
KGV4cGVjdGVkX21lc3NhZ2VzKToKKyAgICAgICAgbWVzc2FnZSA9IG1zZ3V0aWwucmVjZWl2ZV9t
ZXNzYWdlKHJlcXVlc3QpCisgICAgICAgIGlmIHR5cGUobWVzc2FnZSkgPT0gc3RyIGFuZCBtZXNz
YWdlID09IGV4cGVjdGVkX21lc3NhZ2U6CisgICAgICAgICAgICBtc2d1dGlsLnNlbmRfbWVzc2Fn
ZShyZXF1ZXN0LCAnUEFTUzogTWVzc2FnZSAjJWQuJyAlIHRlc3RfbnVtYmVyKQorICAgICAgICBl
bHNlOgorICAgICAgICAgICAgbXNndXRpbC5zZW5kX21lc3NhZ2UocmVxdWVzdCwgJ0ZBSUw6IE1l
c3NhZ2UgIyVkOiBSZWNlaXZlZCB1bmV4cGVjdGVkIG1lc3NhZ2U6ICVyJyAlICh0ZXN0X251bWJl
ciwgbWVzc2FnZSkpCisKKworZGVmIGFsbF9kaXN0aW5jdF9ieXRlcygpOgorICAgIHJldHVybiAn
Jy5qb2luKFtjaHIoaSkgZm9yIGkgaW4geHJhbmdlKDI1NildKQpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWZpbGUtYmxvYi1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3Nl
bmQtZmlsZS1ibG9iLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MTY0OWNlOTg0YmUxNmY3ZjFi
Nzg1NWZlYWI1OWJkODA3NDFkZWYyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWZpbGUtYmxvYi1leHBlY3RlZC50eHQK
QEAgLTAsMCArMSwxNiBAQAorV2ViU29ja2V0OiBTZW5kIGEgRmlsZS4KKworT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUiLgorCitHb3QgRmlsZVN5c3RlbSBvYmplY3QuCitGaWxlIGNyZWF0ZWQuCitQ
QVNTIGZpbGVFbnRyeS5pc0ZpbGUgaXMgdHJ1ZQorV3JvdGUgdG8gZmlsZS4KK0dvdCBGaWxlIG9i
amVjdC4KK1BBU1MgUEFTUzogTWVzc2FnZSAjMC4KK1BBU1MgY2xvc2VFdmVudC53YXNDbGVhbiBp
cyB0cnVlCitEZWxldGluZyB0aGUgZmlsZS4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtZmlsZS1ibG9iLWZhaWwtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWZpbGUtYmxv
Yi1mYWlsLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZDcxOGY5MDA2OWQ1NGJkNGJmZjM5ZTVm
MTYxMDE4YTM4ZWM1ZDk5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWZpbGUtYmxvYi1mYWlsLWV4cGVjdGVkLnR4dApA
QCAtMCwwICsxLDE2IEBACitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMDogRmFpbGVkIHRvIGxvYWQg
QmxvYjogZXJyb3IgY29kZSA9IDEKK1dlYlNvY2tldCBzaG91bGQgZmFpbCB0aGUgY29ubmVjdGlv
biBpZiBpdCBoYXMgZmFpbGVkIHRvIHJlYWQgYSBCbG9iLgorCitPbiBzdWNjZXNzLCB5b3Ugd2ls
bCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01Q
TEVURSIuCisKK0dvdCBGaWxlU3lzdGVtIG9iamVjdC4KK0ZpbGUgY3JlYXRlZC4KK1BBU1MgZmls
ZUVudHJ5LmlzRmlsZSBpcyB0cnVlCitXcm90ZSB0byBmaWxlLgorR290IEZpbGUgb2JqZWN0Lgor
RmlsZSBkZWxldGVkLgorUEFTUyBjbG9zZUV2ZW50Lndhc0NsZWFuIGlzIGZhbHNlCitQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWZpbGUtYmxv
Yi1mYWlsLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJp
L3NlbmQtZmlsZS1ibG9iLWZhaWwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MjYyNmQ4ZjFlM2FjNzA5NWU5
M2Y4NmI0OGVlNzNhMTI0NTZlNjMxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWZpbGUtYmxvYi1mYWlsLmh0bWwKQEAg
LTAsMCArMSwxMjYgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJl
bD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vLi4vanMtdGVzdC1yZXNvdXJjZXMvanMtdGVz
dC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uLy4uL2pzLXRlc3QtcmVzb3VyY2Vz
L2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0iZGVz
Y3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHR5cGU9
InRleHQvamF2YXNjcmlwdCI+CitkZXNjcmlwdGlvbigiV2ViU29ja2V0IHNob3VsZCBmYWlsIHRo
ZSBjb25uZWN0aW9uIGlmIGl0IGhhcyBmYWlsZWQgdG8gcmVhZCBhIEJsb2IuIik7CisKK3dpbmRv
dy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIub3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRIaXhp
ZTc2V2ViU29ja2V0UHJvdG9jb2xFbmFibGVkIiwgMCk7CisKK2Z1bmN0aW9uIHN0YXJ0c1dpdGgo
dGFyZ2V0LCBwcmVmaXgpCit7CisgICAgcmV0dXJuIHRhcmdldC5pbmRleE9mKHByZWZpeCkgPT09
IDA7Cit9CisKK3ZhciBmaWxlU3lzdGVtU2l6ZSA9IDEwMjQ7Cit2YXIgZmlsZU5hbWUgPSAid2Vi
c29ja2V0LXNlbmQtZmlsZS1ibG9iLWZhaWwudHh0IjsKK3ZhciBtZXNzYWdlVG9Xcml0ZSA9ICJU
aGlzIG1lc3NhZ2Ugc2hvdWxkbid0IGJlIHNlbnQuIjsKKworZnVuY3Rpb24gcnVuVGVzdCgpCit7
CisgICAgaWYgKCF3aW5kb3cud2Via2l0UmVxdWVzdEZpbGVTeXN0ZW0pIHsKKyAgICAgICAgdGVz
dEZhaWxlZCgid2luZG93LndlYmtpdFJlcXVlc3RGaWxlU3lzdGVtIGlzIG5vdCBhdmFpbGFibGUu
Iik7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgd2Via2l0UmVxdWVzdEZpbGVTeXN0ZW0oVEVNUE9SQVJZLCBmaWxlU3lzdGVtU2l6ZSwgZGlk
R2V0RmlsZVN5c3RlbSwgZGlkRmFpbCk7Cit9CisKK2Z1bmN0aW9uIGRpZEdldEZpbGVTeXN0ZW0o
ZmlsZVN5c3RlbSkKK3sKKyAgICBkZWJ1ZygiR290IEZpbGVTeXN0ZW0gb2JqZWN0LiIpOworICAg
IGZpbGVTeXN0ZW0ucm9vdC5nZXRGaWxlKGZpbGVOYW1lLCB7Y3JlYXRlOiB0cnVlfSwgZGlkQ3Jl
YXRlRmlsZSwgZGlkRmFpbCk7Cit9CisKK3ZhciBmaWxlRW50cnk7CisKK2Z1bmN0aW9uIGRpZENy
ZWF0ZUZpbGUoZW50cnkpCit7CisgICAgZGVidWcoIkZpbGUgY3JlYXRlZC4iKTsKKyAgICBmaWxl
RW50cnkgPSBlbnRyeTsKKyAgICBzaG91bGRCZVRydWUoImZpbGVFbnRyeS5pc0ZpbGUiKTsKKyAg
ICBmaWxlRW50cnkuY3JlYXRlV3JpdGVyKGRpZEdldEZpbGVXcml0ZXIsIGRpZEZhaWwpOworfQor
CitmdW5jdGlvbiBkaWRHZXRGaWxlV3JpdGVyKHdyaXRlcikKK3sKKyAgICB3cml0ZXIudHJ1bmNh
dGUoMCk7CisgICAgd3JpdGVyLm9uZXJyb3IgPSBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0
ZXN0RmFpbGVkKCJGaWxlV3JpdGVyIG9wZXJhdGlvbiBmYWlsZWQuIik7CisgICAgICAgIGVuZFRl
c3QoKTsKKyAgICB9OworICAgIHdyaXRlci5vbndyaXRlID0gZnVuY3Rpb24oKQorICAgIHsKKyAg
ICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKKyAgICAgICAgYnVp
bGRlci5hcHBlbmQobWVzc2FnZVRvV3JpdGUpOworICAgICAgICB3cml0ZXIud3JpdGUoYnVpbGRl
ci5nZXRCbG9iKCkpOworICAgICAgICB3cml0ZXIub253cml0ZSA9IGRpZFdyaXRlRmlsZTsKKyAg
ICB9OworfQorCitmdW5jdGlvbiBkaWRXcml0ZUZpbGUoKQoreworICAgIGRlYnVnKCJXcm90ZSB0
byBmaWxlLiIpOworICAgIGZpbGVFbnRyeS5maWxlKGRpZEdldEZpbGUsIGRpZEZhaWwpOworfQor
Cit2YXIgZmlsZU9iamVjdDsKKworZnVuY3Rpb24gZGlkR2V0RmlsZShmaWxlKQoreworICAgIGRl
YnVnKCJHb3QgRmlsZSBvYmplY3QuIik7CisgICAgZmlsZU9iamVjdCA9IGZpbGU7CisKKyAgICAv
LyBEZWxldGUgdGhlIGZpbGUgb2JqZWN0IGJlZm9yZSBpdCBpcyByZWFkLiBUaGlzIHNob3VsZCBj
YXVzZSB0aGUgc3Vic2VxdWVudCByZWFkIG9wZXJhdGlvbgorICAgIC8vIHRvIGZhaWwgcmVsaWFi
bHkuCisgICAgZmlsZUVudHJ5LnJlbW92ZShkaWRSZW1vdmVGaWxlLCBkaWRGYWlsKTsKK30KKwor
ZnVuY3Rpb24gZGlkUmVtb3ZlRmlsZSgpCit7CisgICAgZGVidWcoIkZpbGUgZGVsZXRlZC4iKTsK
KyAgICBmaWxlRW50cnkgPSBudWxsOyAvLyBUbyBwcmV2ZW50IHRoZSBmaWxlIGZyb20gZ2V0dGlu
ZyBkZWxldGVkIGFnYWluLgorICAgIHZhciB3cyA9IG5ldyBXZWJTb2NrZXQoIndzOi8vMTI3LjAu
MC4xOjg4ODAvd2Vic29ja2V0L3Rlc3RzL2h5YmkvZWNobyIpOworICAgIHdzLm9ub3BlbiA9IGZ1
bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHdzLnNlbmQoZmlsZU9iamVjdCk7IC8vIFRoaXMgb3Bl
cmF0aW9uIHNob3VsZCBmYWlsIGFuZCB0aGUgY29ubmVjdGlvbiBzaG91bGQgYmUgYWJvcnRlZC4K
KyAgICB9OworICAgIHdzLm9uY2xvc2UgPSBmdW5jdGlvbihldmVudCkKKyAgICB7CisgICAgICAg
IGNsb3NlRXZlbnQgPSBldmVudDsKKyAgICAgICAgc2hvdWxkQmVGYWxzZSgiY2xvc2VFdmVudC53
YXNDbGVhbiIpOworICAgICAgICBlbmRUZXN0KCk7CisgICAgfTsKK30KKworZnVuY3Rpb24gZGlk
RmFpbChmaWxlRXJyb3IpCit7CisgICAgdGVzdEZhaWxlZCgiRmlsZVN5c3RlbSBBUEkgb3BlcmF0
aW9uIGZhaWxlZDogZXJyb3IgY29kZSA9ICIgKyBmaWxlRXJyb3IuY29kZSk7CisgICAgZW5kVGVz
dCgpOworfQorCitmdW5jdGlvbiBlbmRUZXN0KCkKK3sKKyAgICBpZiAoZmlsZUVudHJ5KSB7Cisg
ICAgICAgIGRlYnVnKCJEZWxldGluZyB0aGUgZmlsZS4iKTsKKyAgICAgICAgZmlsZUVudHJ5LnJl
bW92ZShmaW5pc2hKU1Rlc3QsIGZpbmlzaEpTVGVzdCk7CisgICAgfSBlbHNlCisgICAgICAgIGZp
bmlzaEpTVGVzdCgpOworfQorCitydW5UZXN0KCk7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQg
PSB0cnVlOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vanMtdGVzdC1yZXNv
dXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1m
aWxlLWJsb2IuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5
Ymkvc2VuZC1maWxlLWJsb2IuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNjRjYjY3MDM2NGExYTZjZDI5NWNj
MGJiNDU0NGNlNzg1MzM1MDdjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWZpbGUtYmxvYi5odG1sCkBAIC0wLDAgKzEs
MTIzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxl
c2hlZXQiIGhyZWY9Ii4uLy4uLy4uLy4uL2pzLXRlc3QtcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUu
Y3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi8uLi9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0
LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9u
Ij48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2ph
dmFzY3JpcHQiPgorZGVzY3JpcHRpb24oIldlYlNvY2tldDogU2VuZCBhIEZpbGUuIik7CisKK3dp
bmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIub3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRI
aXhpZTc2V2ViU29ja2V0UHJvdG9jb2xFbmFibGVkIiwgMCk7CisKK2Z1bmN0aW9uIHN0YXJ0c1dp
dGgodGFyZ2V0LCBwcmVmaXgpCit7CisgICAgcmV0dXJuIHRhcmdldC5pbmRleE9mKHByZWZpeCkg
PT09IDA7Cit9CisKK3ZhciBmaWxlU3lzdGVtU2l6ZSA9IDEwMjQ7Cit2YXIgZmlsZU5hbWUgPSAi
d2Vic29ja2V0LXNlbmQtZmlsZS1ibG9iLnR4dCI7Cit2YXIgbWVzc2FnZVRvV3JpdGUgPSAiSGVs
bG8sIHdvcmxkISI7CisKK2Z1bmN0aW9uIHJ1blRlc3QoKQoreworICAgIGlmICghd2luZG93Lndl
YmtpdFJlcXVlc3RGaWxlU3lzdGVtKSB7CisgICAgICAgIHRlc3RGYWlsZWQoIndpbmRvdy53ZWJr
aXRSZXF1ZXN0RmlsZVN5c3RlbSBpcyBub3QgYXZhaWxhYmxlLiIpOworICAgICAgICBmaW5pc2hK
U1Rlc3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHdlYmtpdFJlcXVlc3RGaWxl
U3lzdGVtKFRFTVBPUkFSWSwgZmlsZVN5c3RlbVNpemUsIGRpZEdldEZpbGVTeXN0ZW0sIGRpZEZh
aWwpOworfQorCitmdW5jdGlvbiBkaWRHZXRGaWxlU3lzdGVtKGZpbGVTeXN0ZW0pCit7CisgICAg
ZGVidWcoIkdvdCBGaWxlU3lzdGVtIG9iamVjdC4iKTsKKyAgICBmaWxlU3lzdGVtLnJvb3QuZ2V0
RmlsZShmaWxlTmFtZSwge2NyZWF0ZTogdHJ1ZX0sIGRpZENyZWF0ZUZpbGUsIGRpZEZhaWwpOwor
fQorCit2YXIgZmlsZUVudHJ5OworCitmdW5jdGlvbiBkaWRDcmVhdGVGaWxlKGVudHJ5KQorewor
ICAgIGRlYnVnKCJGaWxlIGNyZWF0ZWQuIik7CisgICAgZmlsZUVudHJ5ID0gZW50cnk7CisgICAg
c2hvdWxkQmVUcnVlKCJmaWxlRW50cnkuaXNGaWxlIik7CisgICAgZmlsZUVudHJ5LmNyZWF0ZVdy
aXRlcihkaWRHZXRGaWxlV3JpdGVyLCBkaWRGYWlsKTsKK30KKworZnVuY3Rpb24gZGlkR2V0Rmls
ZVdyaXRlcih3cml0ZXIpCit7CisgICAgd3JpdGVyLnRydW5jYXRlKDApOworICAgIHdyaXRlci5v
bmVycm9yID0gZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiRmlsZVdyaXRl
ciBvcGVyYXRpb24gZmFpbGVkLiIpOworICAgICAgICBlbmRUZXN0KCk7CisgICAgfTsKKyAgICB3
cml0ZXIub253cml0ZSA9IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBidWlsZGVyID0g
bmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKG1lc3NhZ2VU
b1dyaXRlKTsKKyAgICAgICAgd3JpdGVyLndyaXRlKGJ1aWxkZXIuZ2V0QmxvYigpKTsKKyAgICAg
ICAgd3JpdGVyLm9ud3JpdGUgPSBkaWRXcml0ZUZpbGU7CisgICAgfTsKK30KKworZnVuY3Rpb24g
ZGlkV3JpdGVGaWxlKCkKK3sKKyAgICBkZWJ1ZygiV3JvdGUgdG8gZmlsZS4iKTsKKyAgICBmaWxl
RW50cnkuZmlsZShkaWRHZXRGaWxlLCBkaWRGYWlsKTsKK30KKwordmFyIGNsb3NlRXZlbnQ7CisK
K2Z1bmN0aW9uIGRpZEdldEZpbGUoZmlsZSkKK3sKKyAgICBkZWJ1ZygiR290IEZpbGUgb2JqZWN0
LiIpOworICAgIHZhciB3cyA9IG5ldyBXZWJTb2NrZXQoIndzOi8vMTI3LjAuMC4xOjg4ODAvd2Vi
c29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1maWxlLWJsb2IiKTsKKyAgICB3cy5vbm9wZW4gPSBmdW5j
dGlvbigpCisgICAgeworICAgICAgICB3cy5zZW5kKGZpbGUpOworICAgIH07CisgICAgd3Mub25t
ZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICB2YXIgbWVzc2FnZSA9IGV2
ZW50LmRhdGE7CisgICAgICAgIGlmIChzdGFydHNXaXRoKG1lc3NhZ2UsICJQQVNTIikpCisgICAg
ICAgICAgICB0ZXN0UGFzc2VkKG1lc3NhZ2UpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0
ZXN0RmFpbGVkKG1lc3NhZ2UpOworICAgIH07CisgICAgd3Mub25jbG9zZSA9IGZ1bmN0aW9uKGV2
ZW50KQorICAgIHsKKyAgICAgICAgY2xvc2VFdmVudCA9IGV2ZW50OworICAgICAgICBzaG91bGRC
ZVRydWUoImNsb3NlRXZlbnQud2FzQ2xlYW4iKTsKKyAgICAgICAgZW5kVGVzdCgpOworICAgIH07
Cit9CisKK2Z1bmN0aW9uIGRpZEZhaWwoZmlsZUVycm9yKQoreworICAgIHRlc3RGYWlsZWQoIkZp
bGVTeXN0ZW0gQVBJIG9wZXJhdGlvbiBmYWlsZWQ6IGVycm9yIGNvZGUgPSAiICsgZmlsZUVycm9y
LmNvZGUpOworICAgIGVuZFRlc3QoKTsKK30KKworZnVuY3Rpb24gZW5kVGVzdCgpCit7CisgICAg
aWYgKGZpbGVFbnRyeSkgeworICAgICAgICBkZWJ1ZygiRGVsZXRpbmcgdGhlIGZpbGUuIik7Cisg
ICAgICAgIGZpbGVFbnRyeS5yZW1vdmUoZmluaXNoSlNUZXN0LCBmaW5pc2hKU1Rlc3QpOworICAg
IH0gZWxzZQorICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKK30KKworcnVuVGVzdCgpOworCit2YXIg
c3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4u
Ly4uLy4uL2pzLXRlc3QtcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tl
dC90ZXN0cy9oeWJpL3NlbmQtZmlsZS1ibG9iX3dzaC5weSBiL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1maWxlLWJsb2Jfd3NoLnB5Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmRhYTQ0MDQ3MWFmODNhYjI2Mjg2NzUxYzNlMTg4ODJmNDg0ZGI3OGMKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtZmls
ZS1ibG9iX3dzaC5weQpAQCAtMCwwICsxLDIyIEBACitmcm9tIG1vZF9weXdlYnNvY2tldCBpbXBv
cnQgY29tbW9uCitmcm9tIG1vZF9weXdlYnNvY2tldCBpbXBvcnQgbXNndXRpbAorCisKK2RlZiB3
ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRzaGFrZShyZXF1ZXN0KToKKyAgICBwYXNzICMgQWx3YXlz
IGFjY2VwdC4KKworCitkZWYgd2ViX3NvY2tldF90cmFuc2Zlcl9kYXRhKHJlcXVlc3QpOgorICAg
IGV4cGVjdGVkX21lc3NhZ2VzID0gWydIZWxsbywgd29ybGQhJ10KKworICAgIGZvciB0ZXN0X251
bWJlciwgZXhwZWN0ZWRfbWVzc2FnZSBpbiBlbnVtZXJhdGUoZXhwZWN0ZWRfbWVzc2FnZXMpOgor
ICAgICAgICAjIEZJWE1FOiBVc2UgYmV0dGVyIEFQSS4KKyAgICAgICAgb3Bjb2RlLCBwYXlsb2Fk
LCBmaW5hbCwgdW51c2VkX3Jlc2VydmVkMSwgdW51c2VkX3Jlc2VydmVkMiwgdW51c2VkX3Jlc2Vy
dmVkMyA9IHJlcXVlc3Qud3Nfc3RyZWFtLl9yZWNlaXZlX2ZyYW1lKCkKKyAgICAgICAgaWYgb3Bj
b2RlID09IGNvbW1vbi5PUENPREVfQklOQVJZIGFuZCBwYXlsb2FkID09IGV4cGVjdGVkX21lc3Nh
Z2UgYW5kIGZpbmFsOgorICAgICAgICAgICAgbXNndXRpbC5zZW5kX21lc3NhZ2UocmVxdWVzdCwg
J1BBU1M6IE1lc3NhZ2UgIyVkLicgJSB0ZXN0X251bWJlcikKKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgIG1zZ3V0aWwuc2VuZF9tZXNzYWdlKHJlcXVlc3QsICdGQUlMOiBNZXNzYWdlICMlZDog
UmVjZWl2ZWQgdW5leHBlY3RlZCBmcmFtZTogb3Bjb2RlID0gJXIsIHBheWxvYWQgPSAlciwgZmlu
YWwgPSAlcicgJSAodGVzdF9udW1iZXIsIG9wY29kZSwgcGF5bG9hZCwgZmluYWwpKQorCisKK2Rl
ZiBhbGxfZGlzdGluY3RfYnl0ZXMoKToKKyAgICByZXR1cm4gJycuam9pbihbY2hyKGkpIGZvciBp
IGluIHhyYW5nZSgyNTYpXSkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vi
c29ja2V0L3Rlc3RzL2h5Ymkvd29ya2Vycy9yZXNvdXJjZXMvc2VuZC1ibG9iLmpzIGIvTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS93b3JrZXJzL3Jlc291cmNlcy9z
ZW5kLWJsb2IuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2VhMDUwM2EwOTYwMjM1MmYzOTMxOTAyNjM3OTk4MjUx
MDMxMTNiZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29j
a2V0L3Rlc3RzL2h5Ymkvd29ya2Vycy9yZXNvdXJjZXMvc2VuZC1ibG9iLmpzCkBAIC0wLDAgKzEs
NTEgQEAKK2Z1bmN0aW9uIHN0YXJ0c1dpdGgodGFyZ2V0LCBwcmVmaXgpCit7CisgICAgcmV0dXJu
IHRhcmdldC5pbmRleE9mKHByZWZpeCkgPT09IDA7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZUJsb2JD
b250YWluaW5nSGVsbG9Xb3JsZCgpCit7CisgICAgdmFyIGJ1aWxkZXIgPSBuZXcgV2ViS2l0Qmxv
YkJ1aWxkZXIoKTsKKyAgICBidWlsZGVyLmFwcGVuZCgiSGVsbG8sIHdvcmxkISIpOworICAgIHJl
dHVybiBidWlsZGVyLmdldEJsb2IoKTsKK30KKworZnVuY3Rpb24gY3JlYXRlRW1wdHlCbG9iKCkK
K3sKKyAgICB2YXIgYnVpbGRlciA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOworICAgIHJldHVy
biBidWlsZGVyLmdldEJsb2IoKTsKK30KKworZnVuY3Rpb24gY3JlYXRlQmxvYkNvbnRhaW5pbmdB
bGxEaXN0aW5jdEJ5dGVzKCkKK3sKKyAgICB2YXIgYXJyYXkgPSBuZXcgVWludDhBcnJheSgyNTYp
OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyArK2kpCisgICAgICAgIGFycmF5W2ldID0g
aTsKKyAgICB2YXIgYnVpbGRlciA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOworICAgIGJ1aWxk
ZXIuYXBwZW5kKGFycmF5LmJ1ZmZlcik7CisgICAgcmV0dXJuIGJ1aWxkZXIuZ2V0QmxvYigpOwor
fQorCit2YXIgdXJsID0gIndzOi8vMTI3LjAuMC4xOjg4ODAvd2Vic29ja2V0L3Rlc3RzL2h5Ymkv
d29ya2Vycy9yZXNvdXJjZXMvc2VuZC1ibG9iIjsKK3ZhciB3cyA9IG5ldyBXZWJTb2NrZXQodXJs
KTsKKword3Mub25vcGVuID0gZnVuY3Rpb24oKQoreworICAgIHdzLnNlbmQoY3JlYXRlQmxvYkNv
bnRhaW5pbmdIZWxsb1dvcmxkKCkpOworICAgIHdzLnNlbmQoY3JlYXRlRW1wdHlCbG9iKCkpOwor
ICAgIHdzLnNlbmQoY3JlYXRlQmxvYkNvbnRhaW5pbmdBbGxEaXN0aW5jdEJ5dGVzKCkpOworfTsK
Kword3Mub25tZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpCit7CisgICAgcG9zdE1lc3NhZ2UoZXZl
bnQuZGF0YSk7Cit9OworCit3cy5vbmNsb3NlID0gZnVuY3Rpb24oY2xvc2VFdmVudCkKK3sKKyAg
ICBpZiAoY2xvc2VFdmVudC53YXNDbGVhbiA9PT0gdHJ1ZSkKKyAgICAgICAgcG9zdE1lc3NhZ2Uo
IlBBU1M6IGNsb3NlRXZlbnQud2FzQ2xlYW4gaXMgdHJ1ZS4iKTsKKyAgICBlbHNlCisgICAgICAg
IHBvc3RNZXNzYWdlKCJGQUlMOiBjbG9zZUV2ZW50Lndhc0NsZWFuIHNob3VsZCBiZSB0cnVlLCBi
dXQgd2FzOiAiICsgY2xvc2VFdmVudC53YXNDbGVhbik7CisgICAgcG9zdE1lc3NhZ2UoIkRPTkUi
KTsKK307CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0
cy9oeWJpL3dvcmtlcnMvcmVzb3VyY2VzL3NlbmQtYmxvYl93c2gucHkgYi9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3dvcmtlcnMvcmVzb3VyY2VzL3NlbmQtYmxv
Yl93c2gucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMDI0ZTNmNGQwNzk0NWM5MmNhYWJkYzAzN2VjNTAwODI0YTQy
YTFhMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0
L3Rlc3RzL2h5Ymkvd29ya2Vycy9yZXNvdXJjZXMvc2VuZC1ibG9iX3dzaC5weQpAQCAtMCwwICsx
LDIxIEBACitmcm9tIG1vZF9weXdlYnNvY2tldCBpbXBvcnQgY29tbW9uCitmcm9tIG1vZF9weXdl
YnNvY2tldCBpbXBvcnQgbXNndXRpbAorCisKK2RlZiB3ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRz
aGFrZShyZXF1ZXN0KToKKyAgICBwYXNzICMgQWx3YXlzIGFjY2VwdC4KKworCitkZWYgd2ViX3Nv
Y2tldF90cmFuc2Zlcl9kYXRhKHJlcXVlc3QpOgorICAgIGV4cGVjdGVkX21lc3NhZ2VzID0gWydI
ZWxsbywgd29ybGQhJywgJycsIGFsbF9kaXN0aW5jdF9ieXRlcygpXQorCisgICAgZm9yIHRlc3Rf
bnVtYmVyLCBleHBlY3RlZF9tZXNzYWdlIGluIGVudW1lcmF0ZShleHBlY3RlZF9tZXNzYWdlcyk6
CisgICAgICAgIG1lc3NhZ2UgPSBtc2d1dGlsLnJlY2VpdmVfbWVzc2FnZShyZXF1ZXN0KQorICAg
ICAgICBpZiB0eXBlKG1lc3NhZ2UpID09IHN0ciBhbmQgbWVzc2FnZSA9PSBleHBlY3RlZF9tZXNz
YWdlOgorICAgICAgICAgICAgbXNndXRpbC5zZW5kX21lc3NhZ2UocmVxdWVzdCwgJ1BBU1M6IE1l
c3NhZ2UgIyVkLicgJSB0ZXN0X251bWJlcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1z
Z3V0aWwuc2VuZF9tZXNzYWdlKHJlcXVlc3QsICdGQUlMOiBNZXNzYWdlICMlZDogUmVjZWl2ZWQg
dW5leHBlY3RlZCBtZXNzYWdlOiAlcicgJSAodGVzdF9udW1iZXIsIG1lc3NhZ2UpKQorCisKK2Rl
ZiBhbGxfZGlzdGluY3RfYnl0ZXMoKToKKyAgICByZXR1cm4gJycuam9pbihbY2hyKGkpIGZvciBp
IGluIHhyYW5nZSgyNTYpXSkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vi
c29ja2V0L3Rlc3RzL2h5Ymkvd29ya2Vycy9zZW5kLWJsb2ItZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS93b3JrZXJzL3NlbmQtYmxvYi1l
eHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjMzYmI3ZTM5ZmY1NTU2YTMzYTExNDhmNTE0ODA5Y2U1
NGNmNjk2OAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29j
a2V0L3Rlc3RzL2h5Ymkvd29ya2Vycy9zZW5kLWJsb2ItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEs
MTMgQEAKK1dlYlNvY2tldDogU2VuZCBCbG9icyBpbiBXZWIgV29ya2Vycy4KKworT24gc3VjY2Vz
cywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkg
IlRFU1QgQ09NUExFVEUiLgorCitQQVNTIFBBU1M6IE1lc3NhZ2UgIzAuCitQQVNTIFBBU1M6IE1l
c3NhZ2UgIzEuCitQQVNTIFBBU1M6IE1lc3NhZ2UgIzIuCitQQVNTIFBBU1M6IGNsb3NlRXZlbnQu
d2FzQ2xlYW4gaXMgdHJ1ZS4KK0RPTkUKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUK
KworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dl
YnNvY2tldC90ZXN0cy9oeWJpL3dvcmtlcnMvc2VuZC1ibG9iLmh0bWwgYi9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3dvcmtlcnMvc2VuZC1ibG9iLmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMTU3NDZlYjI3ZjQ3MWIyMDRhZWU2M2E5YjUyMTYwNTEwOGNhNDNiOAotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkv
d29ya2Vycy9zZW5kLWJsb2IuaHRtbApAQCAtMCwwICsxLDQwIEBACis8IURPQ1RZUEUgaHRtbD4K
KzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uLy4u
Ly4uL2pzLXRlc3QtcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIu
Li8uLi8uLi8uLi8uLi9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9
ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorZGVzY3Jp
cHRpb24oIldlYlNvY2tldDogU2VuZCBCbG9icyBpbiBXZWIgV29ya2Vycy4iKTsKKword2luZG93
LmpzVGVzdElzQXN5bmMgPSB0cnVlOworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikK
KyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5vdmVycmlkZVByZWZlcmVuY2UoIldlYktpdEhpeGll
NzZXZWJTb2NrZXRQcm90b2NvbEVuYWJsZWQiLCAwKTsKKworZnVuY3Rpb24gc3RhcnRzV2l0aChz
dHIsIHByZWZpeCkKK3sKKyAgICByZXR1cm4gc3RyLmluZGV4T2YocHJlZml4KSA9PSAwOworfQor
Cit2YXIgd29ya2VyID0gbmV3IFdvcmtlcigicmVzb3VyY2VzL3NlbmQtYmxvYi5qcyIpOword29y
a2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChldmVudCkKK3sKKyAgICB2YXIgbWVzc2FnZSA9IGV2
ZW50LmRhdGE7CisgICAgaWYgKHN0YXJ0c1dpdGgobWVzc2FnZSwgIlBBU1MiKSkKKyAgICAgICAg
dGVzdFBhc3NlZChtZXNzYWdlKTsKKyAgICBlbHNlIGlmIChzdGFydHNXaXRoKG1lc3NhZ2UsICJG
QUlMIikpCisgICAgICAgIHRlc3RGYWlsZWQobWVzc2FnZSkKKyAgICBlbHNlCisgICAgICAgIGRl
YnVnKG1lc3NhZ2UpOworICAgIGlmIChtZXNzYWdlID09PSAiRE9ORSIpCisgICAgICAgIGZpbmlz
aEpTVGVzdCgpOworfTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi8uLi8uLi9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tp
cHBlZAppbmRleCBlOWI2ZjFiMDEwMDE1YjVkNzlmZDVmNjZmNjg5ZGU4MzNlYmE1NDRiLi43MWVi
MWJkOGUyZDJmOTU5NWE4NTUyNzU1MzgxY2E5ZmE0ZWQxYTgyIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsv
U2tpcHBlZApAQCAtMzY2LDYgKzM2Niw4IEBAIGZhc3QvZmlsZXN5c3RlbQogaHR0cC90ZXN0cy9m
aWxlc3lzdGVtCiBodHRwL3Rlc3RzL2xvY2FsL2ZpbGVhcGkKIGh0dHAvdGVzdHMvc2VjdXJpdHkv
ZmlsZXN5c3RlbS1pZnJhbWUtZnJvbS1yZW1vdGUuaHRtbAoraHR0cC90ZXN0cy93ZWJzb2NrZXQv
dGVzdHMvaHliaS9zZW5kLWZpbGUtYmxvYi5odG1sCitodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0
cy9oeWJpL3NlbmQtZmlsZS1ibG9iLWZhaWwuaHRtbAogCiAjIFJlcXVpcmVzIFdlYlAgc3VwcG9y
dC4KIGZhc3QvaW1hZ2VzL3dlYnAtaW1hZ2UtZGVjb2RpbmcuaHRtbApkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMv
U2tpcHBlZAppbmRleCAxNTZkYmNjYWNkNzk2ZTljM2UzMmQ5MGZlYWUzY2QxYmJmNWNmNWY1Li45
NjkzOTE5MDE1NjliOTEwNmY4NDNiY2M3NTNlZjAxOTYwMDQzYmFkIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9t
YWMvU2tpcHBlZApAQCAtMjc3LDYgKzI3Nyw4IEBAIGh0dHAvdGVzdHMvbWVkaWEvdmlkZW8tYnVm
ZmVyZWQuaHRtbAogZmFzdC9maWxlc3lzdGVtCiBodHRwL3Rlc3RzL2ZpbGVzeXN0ZW0KIGh0dHAv
dGVzdHMvc2VjdXJpdHkvZmlsZXN5c3RlbS1pZnJhbWUtZnJvbS1yZW1vdGUuaHRtbAoraHR0cC90
ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWZpbGUtYmxvYi5odG1sCitodHRwL3Rlc3Rz
L3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtZmlsZS1ibG9iLWZhaWwuaHRtbAogCiAjIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NjIyMwogIyBUaGUgV2ViS2l0IHBs
dWdpbiBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBzdXBwb3J0IGlmcmFtZSBzaGltcy4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9xdC9Ta2lwcGVkCmluZGV4IDM0YTRjZmQyMjc3MDk0ZDY5ZmJhMWIxMjA3Zjc1NTc1MTc5
MjJiYmMuLjliY2RjZDJjODlhOTA0MTIxOGU4ZDBmOGJmMDY2YzFiZjBiNjNmMzAgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vcXQvU2tpcHBlZApAQCAtOTksNiArOTksOCBAQCBzdmcvd2ViYXJjaGl2ZQogZmFzdC9m
aWxlc3lzdGVtCiBodHRwL3Rlc3RzL2ZpbGVzeXN0ZW0KIGh0dHAvdGVzdHMvc2VjdXJpdHkvZmls
ZXN5c3RlbS1pZnJhbWUtZnJvbS1yZW1vdGUuaHRtbAoraHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVz
dHMvaHliaS9zZW5kLWZpbGUtYmxvYi5odG1sCitodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9o
eWJpL3NlbmQtZmlsZS1ibG9iLWZhaWwuaHRtbAogCiAjIEVOQUJMRShRVU9UQSkgaXMgZGlzYWJs
ZWQuCiBzdG9yYWdlL3N0b3JhZ2VpbmZvLXF1ZXJ5LXVzYWdlLmh0bWwKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2lu
L1NraXBwZWQKaW5kZXggMWU0Y2M4Y2FhNzBkOTFjYjg2OWNiMjcwYjMxOGM2NWMzNzYwNWU2OC4u
M2QzYjY0ZjkwNzY3NTFiY2I0MGJkN2FmNTAzZTVmMTNkNjhkNjhmNSAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vd2luL1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
d2luL1NraXBwZWQKQEAgLTEyMDIsNiArMTIwMiw4IEBAIGZhc3QvcGFyc2VyL3ByZS1odG1sNS1w
YXJzZXItcXVpcmtzLmh0bWwKIGZhc3QvZmlsZXN5c3RlbQogaHR0cC90ZXN0cy9maWxlc3lzdGVt
CiBodHRwL3Rlc3RzL3NlY3VyaXR5L2ZpbGVzeXN0ZW0taWZyYW1lLWZyb20tcmVtb3RlLmh0bWwK
K2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1maWxlLWJsb2IuaHRtbAoraHR0
cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWZpbGUtYmxvYi1mYWlsLmh0bWwKIAog
IyBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bm9kZXNGcm9tUmVjdCBpcyBub3Qgc3VwcG9ydGVkLgog
ZmFzdC9kb20vbm9kZXNGcm9tUmVjdC1iYXNpYy5odG1sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDJjY2UyNmI0
MmI4YmYzN2E1MzQ1ZjJhOGQ1NTRlM2YwNDUxZDE2Zi4uMmZlNTU5MjViODI1OGVmY2IwOTY2ZDA2
ZjBjMzY5OWUwMWQ4NjM2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDExLTA5LTAy
ICBZdXRhIEtpdGFtdXJhICA8eXV0YWtAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYlNvY2tl
dDogU2VuZCBCbG9iIGFzIFdlYlNvY2tldCBiaW5hcnkgbWVzc2FnZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc0NjUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0czogaHR0cC90ZXN0cy93ZWJzb2Nr
ZXQvdGVzdHMvaGl4aWU3Ni9zZW5kLW9iamVjdC5odG1sCisgICAgICAgICAgICAgICBodHRwL3Rl
c3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtYmxvYi5odG1sCisgICAgICAgICAgICAgICBo
dHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtZmlsZS1ibG9iLWZhaWwuaHRtbAor
ICAgICAgICAgICAgICAgaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWZpbGUt
YmxvYi5odG1sCisgICAgICAgICAgICAgICBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJp
L3dvcmtlcnMvc2VuZC1ibG9iLmh0bWwKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV2ViU29j
a2V0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViU29ja2V0OjpzZW5kKToKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhXZWJTb2NrZXRDdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VjhXZWJTb2NrZXQ6OnNlbmRDYWxsYmFjayk6CisgICAgICAgICogd2Vic29j
a2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oOgorICAgICAgICAqIHdlYnNvY2tldHMv
V2ViU29ja2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6c2VuZCk6CisgICAg
ICAgICogd2Vic29ja2V0cy9XZWJTb2NrZXQuaDoKKyAgICAgICAgKiB3ZWJzb2NrZXRzL1dlYlNv
Y2tldC5pZGw6CisgICAgICAgIEZpeGluZyBjb2RlIGdlbmVyYXRvciBkaWQgbm90IHNvdW5kIGVh
c3ksIGJlY2F1c2UgdGhlcmUgYXJlIHNvbWUgY2xhc3NlcyBkZXBlbmRpbmcgb24KKyAgICAgICAg
YnJva2VuIGJlaGF2aW9yIG9mIGN1cnJlbnQgY29kZSBnZW5lcmF0b3IgKG9uZSBzdWNoIGV4YW1w
bGUgaXMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKS4KKyAgICAgICAgQXMgYSB0ZW1wb3Jhcnkg
d29ya2Fyb3VuZCwgbmV3IGN1c3RvbSBoYW5kbGVycyBmb3Igc2VuZCgpIGFyZSBhZGRlZC4KKyAg
ICAgICAgKiB3ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViU29ja2V0Q2hhbm5lbDo6c2VuZCk6CisgICAgICAgICogd2Vic29ja2V0cy9XZWJTb2Nr
ZXRDaGFubmVsLmg6CisgICAgICAgICogd2Vic29ja2V0cy9Xb3JrZXJUaHJlYWRhYmxlV2ViU29j
a2V0Q2hhbm5lbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlV2ViU29j
a2V0Q2hhbm5lbDo6c2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlV2Vi
U29ja2V0Q2hhbm5lbDo6UGVlcjo6c2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJl
YWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6bWFpblRocmVhZFNlbmRCbG9iKToKKyAgICAgICAgQSBC
bG9iIGNhbiBiZSBkZXNlcmlhbGl6ZWQgZnJvbSB1cmwsIHR5cGUgYW5kIHNpemUuCisgICAgICAg
IChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6QnJpZGdlOjpzZW5k
KToKKyAgICAgICAgS1VSTCwgU3RyaW5nIGFuZCBsb25nIGxvbmcgKGNvcnJlc3BvbmRpbmcgdG8g
dXJsLCB0eXBlIGFuZCBzaXplLCByZXNwZWN0aXZlbHkpIGNhbiBiZSBwYXNzZWQKKyAgICAgICAg
c2FmZWx5IGFjcm9zcyB0aHJlYWRzLgorICAgICAgICAqIHdlYnNvY2tldHMvV29ya2VyVGhyZWFk
YWJsZVdlYlNvY2tldENoYW5uZWwuaDoKKwogMjAxMS0wOS0wMSAgVGFrYXNoaSBUb3lvc2hpbWEg
IDx0b3lvc2hpbUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW1dlYlNvY2tldF0gSW1wbGVtZW50
IFdlYlNvY2tldDo6Y2xvc2UoKSBjb2RlIGFuZCByZWFzb24gaGFuZGxpbmcuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYlNvY2tldEN1c3RvbS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYlNvY2tldEN1c3RvbS5jcHAKaW5kZXggNmIzNTk4
YjJkZmZhYWIzNzI4NjUxZjBiNWM2NjFkZTA2MTAyNmNmZi4uNGY5MmY0MDdiZTg1OTI5MmUyZTE4
ZGIyZjk1ZWM5ZjQ4ZWUyNWU4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNXZWJTb2NrZXRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTV2ViU29ja2V0Q3VzdG9tLmNwcApAQCAtMzYsOCArMzYsOSBAQAogI2luY2x1ZGUgIkpTV2Vi
U29ja2V0LmgiCiAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiS1VSTC5o
IgorI2luY2x1ZGUgIkpTQmxvYi5oIgogI2luY2x1ZGUgIkpTRXZlbnRMaXN0ZW5lci5oIgorI2lu
Y2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJXZWJTb2NrZXQuaCIKICNpbmNsdWRlICJXZWJTb2Nr
ZXRDaGFubmVsLmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgpAQCAtODgsNiArODksMzAg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1dlYlNvY2tldENvbnN0cnVjdG9yOjpj
b25zdHJ1Y3RKU1dlYlNvY2tldChFeGVjU3QKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKENS
RUFURV9ET01fV1JBUFBFUihleGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwgV2Vi
U29ja2V0LCB3ZWJTb2NrZXQuZ2V0KCkpKTsKIH0KIAorSlNWYWx1ZSBKU1dlYlNvY2tldDo6c2Vu
ZChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKCFleGVjLT5hcmd1bWVudENvdW50KCkpCisg
ICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVN5bnRheEVycm9yKGV4ZWMsICJO
b3QgZW5vdWdoIGFyZ3VtZW50cyIpKTsKKworICAgIEpTVmFsdWUgbWVzc2FnZSA9IGV4ZWMtPmFy
Z3VtZW50KDApOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGJvb2wgcmVzdWx0Owor
ICAgIGlmIChtZXNzYWdlLmluaGVyaXRzKCZKU0Jsb2I6OnNfaW5mbykpCisgICAgICAgIHJlc3Vs
dCA9IGltcGwoKS0+c2VuZCh0b0Jsb2IobWVzc2FnZSksIGVjKTsKKyAgICBlbHNlIHsKKyAgICAg
ICAgU3RyaW5nIHN0cmluZ01lc3NhZ2UgPSB1c3RyaW5nVG9TdHJpbmcobWVzc2FnZS50b1N0cmlu
ZyhleGVjKSk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICByZXN1bHQgPSBpbXBsKCktPnNlbmQoc3Ry
aW5nTWVzc2FnZSwgZWMpOworICAgIH0KKyAgICBpZiAoZWMpIHsKKyAgICAgICAgc2V0RE9NRXhj
ZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQor
CisgICAgcmV0dXJuIGpzQm9vbGVhbihyZXN1bHQpOworfQorCiBKU1ZhbHVlIEpTV2ViU29ja2V0
OjpjbG9zZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBpbXBs
ZW1lbnQgW0NsYW1wXSBmb3IgSURMIGJpbmRpbmcgY29kZSBnZW5lcmF0b3IsIGFuZApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViU29ja2V0Q3VzdG9t
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYlNvY2tldEN1c3Rv
bS5jcHAKaW5kZXggZDdkZmExMDlmNTY1YmFhYzJkNjFmZjFiY2JjYTRkZTI3MDJlZWQxNy4uZDIz
NzA0NzczODk4MjYxY2M1MDA0NjIzYmI2NTY4YmZlMjYxNGFiYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViU29ja2V0Q3VzdG9tLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJTb2NrZXRDdXN0b20uY3BwCkBA
IC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5o
IgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4QmxvYi5oIgogI2luY2x1ZGUg
IlY4UHJveHkuaCIKICNpbmNsdWRlICJWOFV0aWxpdGllcy5oIgogI2luY2x1ZGUgIldlYlNvY2tl
dC5oIgpAQCAtMTExLDYgKzExMiwzNCBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhXZWJTb2Nr
ZXQ6OmNvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncwogICAgIHJl
dHVybiBhcmdzLkhvbGRlcigpOwogfQogCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhXZWJTb2Nr
ZXQ6OnNlbmRDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIElOQ19T
VEFUUygiRE9NLldlYlNvY2tldC5zZW5kKCkiKTsKKworICAgIGlmICghYXJncy5MZW5ndGgoKSkK
KyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIk5vdCBlbm91Z2ggYXJndW1lbnRzIiwgVjhQcm94
eTo6U3ludGF4RXJyb3IpOworCisgICAgV2ViU29ja2V0KiB3ZWJTb2NrZXQgPSBWOFdlYlNvY2tl
dDo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG1l
c3NhZ2UgPSBhcmdzWzBdOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGJvb2wgcmVz
dWx0OworICAgIGlmIChWOEJsb2I6Okhhc0luc3RhbmNlKG1lc3NhZ2UpKSB7CisgICAgICAgIEJs
b2IqIGJsb2IgPSBWOEJsb2I6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3Qo
bWVzc2FnZSkpOworICAgICAgICBBU1NFUlQoYmxvYik7CisgICAgICAgIHJlc3VsdCA9IHdlYlNv
Y2tldC0+c2VuZChibG9iLCBlYyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdjg6OlRyeUNhdGNo
IHRyeUNhdGNoOworICAgICAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHN0cmluZ01lc3NhZ2Ug
PSBtZXNzYWdlLT5Ub1N0cmluZygpOworICAgICAgICBpZiAodHJ5Q2F0Y2guSGFzQ2F1Z2h0KCkp
CisgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcih0cnlDYXRjaC5FeGNlcHRpb24oKSk7Cisg
ICAgICAgIHJlc3VsdCA9IHdlYlNvY2tldC0+c2VuZCh0b1dlYkNvcmVTdHJpbmcobWVzc2FnZSks
IGVjKTsKKyAgICB9CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlYyk7
CisKKyAgICByZXR1cm4gdjhCb29sZWFuKHJlc3VsdCk7Cit9CisKIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBWOFdlYlNvY2tldDo6Y2xvc2VDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdz
KQogewogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaW1wbGVtZW50IFtDbGFtcF0gZm9yIElETCBi
aW5kaW5nIGNvZGUgZ2VuZXJhdG9yLCBhbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dl
YnNvY2tldHMvVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaCBiL1NvdXJjZS9XZWJDb3JlL3dl
YnNvY2tldHMvVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaAppbmRleCAwOWY4MWI1MDdhMTAw
MWQ2ZTdlYTU5MTcyMTE2ZWE5ZTlmZjdiZDk3Li44OGEzNTc1MWU5MzAxOThjYTgzM2FmOTUzZmFl
NzAzN2ZkNDVjZGQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1RocmVh
ZGFibGVXZWJTb2NrZXRDaGFubmVsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9U
aHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oCkBAIC0zOSw2ICszOSw3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorY2xhc3MgQmxvYjsKIGNsYXNzIEtVUkw7CiBjbGFzcyBTY3JpcHRFeGVj
dXRpb25Db250ZXh0OwogY2xhc3MgV2ViU29ja2V0Q2hhbm5lbENsaWVudDsKQEAgLTUzLDYgKzU0
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBjb25uZWN0KGNvbnN0IEtVUkwmLCBjb25z
dCBTdHJpbmcmIHByb3RvY29sKSA9IDA7CiAgICAgdmlydHVhbCBTdHJpbmcgc3VicHJvdG9jb2wo
KSA9IDA7IC8vIFdpbGwgYmUgYXZhaWxhYmxlIGFmdGVyIGRpZENvbm5lY3QoKSBjYWxsYmFjayBp
cyBpbnZva2VkLgogICAgIHZpcnR1YWwgYm9vbCBzZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkg
PSAwOworICAgIHZpcnR1YWwgYm9vbCBzZW5kKGNvbnN0IEJsb2ImIGJpbmFyeURhdGEpID0gMDsK
ICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgYnVmZmVyZWRBbW91bnQoKSBjb25zdCA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIGNsb3NlKGludCBjb2RlLCBjb25zdCBTdHJpbmcmIHJlYXNvbikgPSAw
OwogICAgIC8vIExvZyB0aGUgcmVhc29uIHRleHQgYW5kIGNsb3NlIHRoZSBjb25uZWN0aW9uLiBX
aWxsIGNhbGwgZGlkQ2xvc2UoKS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tl
dHMvV2ViU29ja2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmNw
cAppbmRleCA4OGYyZWVkZDhmYjI0MGFiYzZhMWUxOGMzNDhkZjFhNTlmMGU5ZGJjLi5lNzcxYjc5
MzJiMzE4MmQ1YjIyMDhlM2RiMjQ4Mjc0ZDBiZTI3OTAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd2Vic29j
a2V0cy9XZWJTb2NrZXQuY3BwCkBAIC0yNjUsNiArMjY1LDI0IEBAIGJvb2wgV2ViU29ja2V0Ojpz
ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgcmV0dXJu
IG1fY2hhbm5lbC0+c2VuZChtZXNzYWdlKTsKIH0KIAorYm9vbCBXZWJTb2NrZXQ6OnNlbmQoQmxv
YiogYmluYXJ5RGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgTE9HKE5ldHdvcmssICJX
ZWJTb2NrZXQgJXAgc2VuZCBibG9iICVzIiwgdGhpcywgYmluYXJ5RGF0YS0+dXJsKCkuc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7CisgICAgQVNTRVJUKGJpbmFyeURhdGEpOworICAgIGlmIChtX3Vz
ZUhpeGllNzZQcm90b2NvbCkKKyAgICAgICAgcmV0dXJuIHNlbmQoIltvYmplY3QgQmxvYl0iLCBl
Yyk7CisgICAgaWYgKG1fc3RhdGUgPT0gQ09OTkVDVElORykgeworICAgICAgICBlYyA9IElOVkFM
SURfU1RBVEVfRVJSOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChtX3N0
YXRlID09IENMT1NJTkcgfHwgbV9zdGF0ZSA9PSBDTE9TRUQpIHsKKyAgICAgICAgbV9idWZmZXJl
ZEFtb3VudEFmdGVyQ2xvc2UgKz0gYmluYXJ5RGF0YS0+c2l6ZSgpICsgZ2V0RnJhbWluZ092ZXJo
ZWFkKGJpbmFyeURhdGEtPnNpemUoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgQVNTRVJUKG1fY2hhbm5lbCk7CisgICAgcmV0dXJuIG1fY2hhbm5lbC0+c2VuZCgqYmluYXJ5
RGF0YSk7Cit9CisKIHZvaWQgV2ViU29ja2V0OjpjbG9zZShpbnQgY29kZSwgY29uc3QgU3RyaW5n
JiByZWFzb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmIChjb2RlID09IFdlYlNvY2tl
dENoYW5uZWw6OkNsb3NlRXZlbnRDb2RlTm90U3BlY2lmaWVkKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuaCBiL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tl
dHMvV2ViU29ja2V0LmgKaW5kZXggMDRjMjdjMzVjZmQ0MDI2MzY5MWI1ZmNjOTc2MzI1NTc5YTU1
ZTE5My4uM2NkOWRjNjFmMWM0MTNiOGU1ZmFkNmRkODdjYjA0MGQ0MzQ0YWI2MyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5oCkBAIC00Niw2ICs0Niw3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorY2xhc3MgQmxvYjsKIGNsYXNzIFRocmVhZGFibGVXZWJTb2NrZXRDaGFu
bmVsOwogCiBjbGFzcyBXZWJTb2NrZXQgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJTb2NrZXQ+LCBw
dWJsaWMgRXZlbnRUYXJnZXQsIHB1YmxpYyBBY3RpdmVET01PYmplY3QsIHB1YmxpYyBXZWJTb2Nr
ZXRDaGFubmVsQ2xpZW50IHsKQEAgLTY3LDYgKzY4LDcgQEAgcHVibGljOgogICAgIHZvaWQgY29u
bmVjdChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHByb3RvY29scywg
RXhjZXB0aW9uQ29kZSYpOwogCiAgICAgYm9vbCBzZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwg
RXhjZXB0aW9uQ29kZSYpOworICAgIGJvb2wgc2VuZChCbG9iKiBiaW5hcnlEYXRhLCBFeGNlcHRp
b25Db2RlJik7CiAKICAgICB2b2lkIGNsb3NlKGludCBjb2RlLCBjb25zdCBTdHJpbmcmIHJlYXNv
biwgRXhjZXB0aW9uQ29kZSYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJzb2Nr
ZXRzL1dlYlNvY2tldC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5p
ZGwKaW5kZXggOTM2ZTYwM2YzNjU3NjMwNGM0ZmI2OTVmMjFkYzhkMWJiOTIwODg0Mi4uMGRjMjNl
N2Y3YTI4MWI4OWQwNDlhM2UwZDEzMTI5MTQ4Y2RmOWI4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYnNv
Y2tldHMvV2ViU29ja2V0LmlkbApAQCAtNjMsNyArNjMsMTUgQEAgbW9kdWxlIHdlYnNvY2tldHMg
ewogICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsU3RyaW5nVG89VW5kZWZpbmVkXSBET01T
dHJpbmcgYmluYXJ5VHlwZQogICAgICAgICAgICAgc2V0dGVyIHJhaXNlcyhET01FeGNlcHRpb24p
OwogCi0gICAgICAgIFtSZXF1aXJlc0FsbEFyZ3VtZW50c10gYm9vbGVhbiBzZW5kKGluIERPTVN0
cmluZyBkYXRhKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgLy8gRklYTUU6IFVzZSBv
dmVybG9hZGluZyBwcm92aWRlZCBieSBvdXIgSURMIGNvZGUgZ2VuZXJhdG9yLgorICAgICAgICAv
LyBBY2NvcmRpbmcgdG8gV2ViIElETCBzcGVjaWZpY2F0aW9uLCBvdmVybG9hZGVkIGZ1bmN0aW9u
IHdpdGggRE9NU3RyaW5nIGFyZ3VtZW50CisgICAgICAgIC8vIHNob3VsZCBhY2NlcHQgYW55dGhp
bmcgdGhhdCBjYW4gYmUgY29udmVydGVkIHRvIGEgc3RyaW5nIChpbmNsdWRpbmcgbnVtYmVycywK
KyAgICAgICAgLy8gYm9vbGVhbnMsIG51bGwsIHVuZGVmaW5lZCBhbmQgb2JqZWN0cyBleGNlcHQg
QmxvYikuIEN1cnJlbnQgY29kZSBnZW5lcmF0b3IgZG9lcworICAgICAgICAvLyBub3QgaGFuZGxl
IHRoaXMgcnVsZSBjb3JyZWN0bHkuCisgICAgICAgIC8vIFtSZXF1aXJlc0FsbEFyZ3VtZW50c10g
Ym9vbGVhbiBzZW5kKGluIEJsb2IgZGF0YSkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAg
IC8vIFtSZXF1aXJlc0FsbEFyZ3VtZW50c10gYm9vbGVhbiBzZW5kKGluIERPTVN0cmluZyBkYXRh
KSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgW0N1c3RvbV0gYm9vbGVhbiBzZW5kKGlu
IERPTVN0cmluZyBkYXRhKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKwogICAgICAgICAvLyBGSVhN
RTogSW1wbGVtZW50IGFuZCBhcHBseSBbQ2xhbXBdIGF0dHJpYnV0ZSBpbnN0ZWFkIG9mIFtDdXN0
b21dLgogICAgICAgICBbQ3VzdG9tXSB2b2lkIGNsb3NlKGluIFtPcHRpb25hbF0gdW5zaWduZWQg
c2hvcnQgY29kZSwgaW4gW09wdGlvbmFsXSBET01TdHJpbmcgcmVhc29uKSByYWlzZXMoRE9NRXhj
ZXB0aW9uKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2Nr
ZXRDaGFubmVsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5l
bC5jcHAKaW5kZXggMjAwN2U2ZGI4Mzg1ZmE2ZjM2NmRhYmIyNGYyMTc3NWRhMzRkZThlZS4uYWU1
YzFhYzhkYzlkNTMzOTQzNTg1ZjFkZDU0ODdlNmIyZDJkOGQ1OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuY3BwCkBAIC0xNzAsNiArMTcwLDE0IEBA
IGJvb2wgV2ViU29ja2V0Q2hhbm5lbDo6c2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgV2ViU29ja2V0Q2hhbm5lbDo6c2VuZChjb25zdCBCbG9i
JiBiaW5hcnlEYXRhKQoreworICAgIExPRyhOZXR3b3JrLCAiV2ViU29ja2V0Q2hhbm5lbCAlcCBz
ZW5kIGJsb2IgJXMiLCB0aGlzLCBiaW5hcnlEYXRhLnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOworICAgIEFTU0VSVCghbV91c2VIaXhpZTc2UHJvdG9jb2wpOworICAgIGVucXVldWVCbG9i
RnJhbWUoT3BDb2RlQmluYXJ5LCBiaW5hcnlEYXRhKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwog
dW5zaWduZWQgbG9uZyBXZWJTb2NrZXRDaGFubmVsOjpidWZmZXJlZEFtb3VudCgpIGNvbnN0CiB7
CiAgICAgTE9HKE5ldHdvcmssICJXZWJTb2NrZXRDaGFubmVsICVwIGJ1ZmZlcmVkQW1vdW50Iiwg
dGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldENo
YW5uZWwuaCBiL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5oCmlu
ZGV4IDk3MDMxNjIzY2MyNjZlNmRhYWRlNzI1MWJkZTExNTc2MTIzYjY1NDkuLjFlZjBhOGY1ZmU4
ZjhlZDJkMmE4OTk1MTI2M2E0NjFjMjk2ZDNjYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYnNv
Y2tldHMvV2ViU29ja2V0Q2hhbm5lbC5oCkBAIC02Niw2ICs2Niw3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgY29ubmVjdChjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiBwcm90b2NvbCk7
CiAgICAgdmlydHVhbCBTdHJpbmcgc3VicHJvdG9jb2woKTsKICAgICB2aXJ0dWFsIGJvb2wgc2Vu
ZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOworICAgIHZpcnR1YWwgYm9vbCBzZW5kKGNvbnN0IEJs
b2ImIGJpbmFyeURhdGEpOwogICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBidWZmZXJlZEFtb3Vu
dCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZShpbnQgY29kZSwgY29uc3QgU3RyaW5n
JiByZWFzb24pOyAvLyBTdGFydCBjbG9zaW5nIGhhbmRzaGFrZS4KICAgICB2aXJ0dWFsIHZvaWQg
ZmFpbChjb25zdCBTdHJpbmcmIHJlYXNvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93
ZWJzb2NrZXRzL1dvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3dlYnNvY2tldHMvV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwCmlu
ZGV4IDQ0OTg4ZjY1NjJiMTI0MjFhMGY0MDA3MDRlYmMwNzYwZWJiMDI0ZGUuLjYwNDY0NWFkNjY0
ZjdmZjBhNDIyNTlhMTUwYTQ5Zjg1MjdjYjM5YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3dlYnNvY2tldHMvV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwu
Y3BwCkBAIC0zNCw2ICszNCw3IEBACiAKICNpbmNsdWRlICJXb3JrZXJUaHJlYWRhYmxlV2ViU29j
a2V0Q2hhbm5lbC5oIgogCisjaW5jbHVkZSAiQmxvYi5oIgogI2luY2x1ZGUgIkNyb3NzVGhyZWFk
VGFzay5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5oIgpAQCAtODcsNiArODgsMTMgQEAgYm9vbCBXb3JrZXJUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbDo6c2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiAgICAgcmV0dXJu
IG1fYnJpZGdlLT5zZW5kKG1lc3NhZ2UpOwogfQogCitib29sIFdvcmtlclRocmVhZGFibGVXZWJT
b2NrZXRDaGFubmVsOjpzZW5kKGNvbnN0IEJsb2ImIGJpbmFyeURhdGEpCit7CisgICAgaWYgKCFt
X2JyaWRnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX2JyaWRnZS0+c2Vu
ZChiaW5hcnlEYXRhKTsKK30KKwogdW5zaWduZWQgbG9uZyBXb3JrZXJUaHJlYWRhYmxlV2ViU29j
a2V0Q2hhbm5lbDo6YnVmZmVyZWRBbW91bnQoKSBjb25zdAogewogICAgIGlmICghbV9icmlkZ2Up
CkBAIC0xNzIsNiArMTgwLDE1IEBAIHZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5u
ZWw6OlBlZXI6OnNlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogICAgIG1fbG9hZGVyUHJveHku
cG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KGNyZWF0ZUNhbGxiYWNrVGFzaygmd29ya2Vy
Q29udGV4dERpZFNlbmQsIG1fd29ya2VyQ2xpZW50V3JhcHBlciwgc2VudCksIG1fdGFza01vZGUp
OwogfQogCit2b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpQZWVyOjpzZW5k
KGNvbnN0IEJsb2ImIGJpbmFyeURhdGEpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
KyAgICBpZiAoIW1fbWFpbldlYlNvY2tldENoYW5uZWwgfHwgIW1fd29ya2VyQ2xpZW50V3JhcHBl
cikKKyAgICAgICAgcmV0dXJuOworICAgIGJvb2wgc2VudCA9IG1fbWFpbldlYlNvY2tldENoYW5u
ZWwtPnNlbmQoYmluYXJ5RGF0YSk7CisgICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza0Zvck1vZGVU
b1dvcmtlckNvbnRleHQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZ3b3JrZXJDb250ZXh0RGlkU2VuZCwg
bV93b3JrZXJDbGllbnRXcmFwcGVyLCBzZW50KSwgbV90YXNrTW9kZSk7Cit9CisKIHN0YXRpYyB2
b2lkIHdvcmtlckNvbnRleHREaWRHZXRCdWZmZXJlZEFtb3VudChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50
V3JhcHBlcj4gd29ya2VyQ2xpZW50V3JhcHBlciwgdW5zaWduZWQgbG9uZyBidWZmZXJlZEFtb3Vu
dCkKIHsKICAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQsIGNvbnRleHQtPmlzV29ya2VyQ29udGV4
dCgpKTsKQEAgLTM1OCw2ICszNzUsMTYgQEAgdm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbDo6bWFpblRocmVhZFNlbmQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY28KICAgICBw
ZWVyLT5zZW5kKG1lc3NhZ2UpOwogfQogCit2b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRD
aGFubmVsOjptYWluVGhyZWFkU2VuZEJsb2IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgUGVlciogcGVlciwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHR5cGUsIGxvbmcg
bG9uZyBzaXplKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUX1VO
VVNFRChjb250ZXh0LCBjb250ZXh0LT5pc0RvY3VtZW50KCkpOworICAgIEFTU0VSVChwZWVyKTsK
KworICAgIFJlZlB0cjxCbG9iPiBibG9iID0gQmxvYjo6Y3JlYXRlKHVybCwgdHlwZSwgc2l6ZSk7
CisgICAgcGVlci0+c2VuZCgqYmxvYik7Cit9CisKIGJvb2wgV29ya2VyVGhyZWFkYWJsZVdlYlNv
Y2tldENoYW5uZWw6OkJyaWRnZTo6c2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAg
aWYgKCFtX3dvcmtlckNsaWVudFdyYXBwZXIpCkBAIC0zNzEsNiArMzk4LDE5IEBAIGJvb2wgV29y
a2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OkJyaWRnZTo6c2VuZChjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpCiAgICAgcmV0dXJuIGNsaWVudFdyYXBwZXIgJiYgY2xpZW50V3JhcHBlci0+c2Vu
dCgpOwogfQogCitib29sIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpCcmlkZ2U6
OnNlbmQoY29uc3QgQmxvYiYgYmluYXJ5RGF0YSkKK3sKKyAgICBpZiAoIW1fd29ya2VyQ2xpZW50
V3JhcHBlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEFTU0VSVChtX3BlZXIpOworICAg
IHNldE1ldGhvZE5vdENvbXBsZXRlZCgpOworICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tUb0xv
YWRlcihjcmVhdGVDYWxsYmFja1Rhc2soJldvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVs
OjptYWluVGhyZWFkU2VuZEJsb2IsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MobV9wZWVyKSwgYmlu
YXJ5RGF0YS51cmwoKSwgYmluYXJ5RGF0YS50eXBlKCksIGJpbmFyeURhdGEuc2l6ZSgpKSk7Cisg
ICAgUmVmUHRyPEJyaWRnZT4gcHJvdGVjdCh0aGlzKTsKKyAgICB3YWl0Rm9yTWV0aG9kQ29tcGxl
dGlvbigpOworICAgIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlciogY2xp
ZW50V3JhcHBlciA9IG1fd29ya2VyQ2xpZW50V3JhcHBlci5nZXQoKTsKKyAgICByZXR1cm4gY2xp
ZW50V3JhcHBlciAmJiBjbGllbnRXcmFwcGVyLT5zZW50KCk7Cit9CisKIHZvaWQgV29ya2VyVGhy
ZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6Om1haW5UaHJlYWRCdWZmZXJlZEFtb3VudChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQZWVyKiBwZWVyKQogewogICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dvcmtl
clRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmggYi9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRz
L1dvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmgKaW5kZXggYThkMTMzZDNjZGY4MWU3
MmE4N2RiNThhNjg1ZmUxYTEyMmE0YjMxYy4uNWEwODBjMDNmMjhiMzc1YjQ3Zjg2NTExOGM0YzBi
NTg2OTZjODljMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9Xb3JrZXJU
aHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tl
dHMvV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaApAQCAtNjQsNiArNjQsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNvbm5lY3QoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmlu
ZyYgcHJvdG9jb2wpOwogICAgIHZpcnR1YWwgU3RyaW5nIHN1YnByb3RvY29sKCk7CiAgICAgdmly
dHVhbCBib29sIHNlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKyAgICB2aXJ0dWFsIGJvb2wg
c2VuZChjb25zdCBCbG9iJiBiaW5hcnlEYXRhKTsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcg
YnVmZmVyZWRBbW91bnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoaW50IGNvZGUs
IGNvbnN0IFN0cmluZyYgcmVhc29uKTsKICAgICB2aXJ0dWFsIHZvaWQgZmFpbChjb25zdCBTdHJp
bmcmIHJlYXNvbik7CkBAIC05Myw2ICs5NCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wgdXNl
SGl4aWU3NlByb3RvY29sKCk7CiAgICAgICAgIHZvaWQgY29ubmVjdChjb25zdCBLVVJMJiwgY29u
c3QgU3RyaW5nJiBwcm90b2NvbCk7CiAgICAgICAgIHZvaWQgc2VuZChjb25zdCBTdHJpbmcmIG1l
c3NhZ2UpOworICAgICAgICB2b2lkIHNlbmQoY29uc3QgQmxvYiYgYmluYXJ5RGF0YSk7CiAgICAg
ICAgIHZvaWQgYnVmZmVyZWRBbW91bnQoKTsKICAgICAgICAgdm9pZCBjbG9zZShpbnQgY29kZSwg
Y29uc3QgU3RyaW5nJiByZWFzb24pOwogICAgICAgICB2b2lkIGZhaWwoY29uc3QgU3RyaW5nJiBy
ZWFzb24pOwpAQCAtMTI1LDYgKzEyNyw3IEBAIHByaXZhdGU6CiAgICAgICAgIH5CcmlkZ2UoKTsK
ICAgICAgICAgdm9pZCBjb25uZWN0KGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHByb3RvY29s
KTsKICAgICAgICAgYm9vbCBzZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisgICAgICAgIGJv
b2wgc2VuZChjb25zdCBCbG9iJiBiaW5hcnlEYXRhKTsKICAgICAgICAgdW5zaWduZWQgbG9uZyBi
dWZmZXJlZEFtb3VudCgpOwogICAgICAgICB2b2lkIGNsb3NlKGludCBjb2RlLCBjb25zdCBTdHJp
bmcmIHJlYXNvbik7CiAgICAgICAgIHZvaWQgZmFpbChjb25zdCBTdHJpbmcmIHJlYXNvbik7CkBA
IC0xNjAsNiArMTYzLDcgQEAgcHJpdmF0ZToKIAogICAgIHN0YXRpYyB2b2lkIG1haW5UaHJlYWRD
b25uZWN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQZWVyKiwgY29uc3QgS1VSTCYsIGNvbnN0
IFN0cmluZyYgcHJvdG9jb2wpOwogICAgIHN0YXRpYyB2b2lkIG1haW5UaHJlYWRTZW5kKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQZWVyKiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKyAgICBz
dGF0aWMgdm9pZCBtYWluVGhyZWFkU2VuZEJsb2IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBl
ZXIqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiB0eXBlLCBsb25nIGxvbmcgc2l6ZSk7CiAg
ICAgc3RhdGljIHZvaWQgbWFpblRocmVhZEJ1ZmZlcmVkQW1vdW50KFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQZWVyKik7CiAgICAgc3RhdGljIHZvaWQgbWFpblRocmVhZENsb3NlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQZWVyKiwgaW50IGNvZGUsIGNvbnN0IFN0cmluZyYgcmVhc29uKTsK
ICAgICBzdGF0aWMgdm9pZCBtYWluVGhyZWFkRmFpbChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
UGVlciosIGNvbnN0IFN0cmluZyYgcmVhc29uKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106107</attachid>
            <date>2011-09-02 02:23:25 -0700</date>
            <delta_ts>2011-09-02 02:26:21 -0700</delta_ts>
            <desc>Patch v4</desc>
            <filename>bug-67465-20110902182324.patch</filename>
            <type>text/plain</type>
            <size>51176</size>
            <attacher name="Yuta Kitamura">yutak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTQzODcKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA0NTMwZTE1N2QzY2VkNzU0ZmFjMzlh
ZDU4OTVkOWZmN2VmOTU5OWE1Li5iYjM1ODNlNGEwNWQxODI4ZjlhNmIwNGJmNzJiYjFjYzk4NTMw
ODhlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsNDQgQEAKKzIwMTEtMDktMDIgIFl1dGEgS2l0YW11cmEgIDx5
dXRha0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViU29ja2V0OiBTZW5kIEJsb2IgYXMgV2Vi
U29ja2V0IGJpbmFyeSBtZXNzYWdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD02NzQ2NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGl4aWU3Ni9zZW5kLWVt
cHR5LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy93ZWJzb2NrZXQv
dGVzdHMvaGl4aWU3Ni9zZW5kLWVtcHR5Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVz
dHMvd2Vic29ja2V0L3Rlc3RzL2hpeGllNzYvc2VuZC1vYmplY3QtZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oaXhpZTc2L3NlbmQtb2Jq
ZWN0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5
YmkvYnVmZmVyZWRBbW91bnQtYWZ0ZXItY2xvc2UtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGh0
dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5YmkvYnVmZmVyZWRBbW91bnQtYWZ0ZXItY2xvc2Uu
aHRtbDoKKyAgICAgICAgVXBkYXRlZC4gQWRkZWQgdGVzdHMgdG8gc2VuZCBCbG9icy4KKyAgICAg
ICAgKiBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtYmxvYi1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2Vu
ZC1ibG9iLmh0bWw6CisgICAgICAgIEFkZGVkLiBTZW5kIHRocmVlIEJsb2JzIGVhY2ggb2Ygd2hp
Y2ggY29udGFpbnMgYSBzbWFsbCBiaW5hcnkgbWVzc2FnZS4KKyAgICAgICAgKiBodHRwL3Rlc3Rz
L3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtYmxvYl93c2gucHk6CisgICAgICAgIEFkZGVkLiBy
ZWNlaXZlX21lc3NhZ2UoKSByZXR1cm5zIGEgdW5pY29kZSB2YWx1ZSBpZiB0aGUgcmVjZWl2ZWQg
bWVzc2FnZSB3YXMgdGV4dCwgb3IKKyAgICAgICAgYSBzdHIgdmFsdWUgaWYgdGhlIG1lc3NhZ2Ug
d2FzIGJpbmFyeS4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3Nl
bmQtZW1wdHktZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3dlYnNv
Y2tldC90ZXN0cy9oeWJpL3NlbmQtZW1wdHkuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90
ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWZpbGUtYmxvYi1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1maWxl
LWJsb2ItZmFpbC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvd2Vi
c29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1maWxlLWJsb2ItZmFpbC5odG1sOgorICAgICAgICBBZGRl
ZC4gSWYgd2UgZGVsZXRlIGEgZmlsZSBiZWZvcmUgcmVhZGluZyBpdCwgRmlsZVJlYWRlckxvYWRl
ciByZWxpYWJseSBmYWlscy4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9o
eWJpL3NlbmQtZmlsZS1ibG9iLmh0bWw6CisgICAgICAgIEFkZGVkLiBDcmVhdGUgYSBGaWxlIGFu
ZCB0cnkgdG8gc2VuZCBpdCBhcyBhIEJsb2IuCisgICAgICAgICogaHR0cC90ZXN0cy93ZWJzb2Nr
ZXQvdGVzdHMvaHliaS9zZW5kLWZpbGUtYmxvYl93c2gucHk6IEFkZGVkLgorICAgICAgICAqIGh0
dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvd29ya2Vycy9yZXNvdXJjZXMvc2VuZC1ibG9i
LmpzOgorICAgICAgICBBZGRlZC4gU2FtZSBhcyBzZW5kLWJsb2IuaHRtbCBhYm92ZS4KKyAgICAg
ICAgKiBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3dvcmtlcnMvcmVzb3VyY2VzL3Nl
bmQtYmxvYl93c2gucHk6CisgICAgICAgIEFkZGVkLiBTYW1lIGFzIHNlbmQtYmxvYl93c2gucHkg
YWJvdmUuCisgICAgICAgICogaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS93b3JrZXJz
L3NlbmQtYmxvYi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvd2Vi
c29ja2V0L3Rlc3RzL2h5Ymkvd29ya2Vycy9zZW5kLWJsb2IuaHRtbDogQWRkZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3RrL1NraXBwZWQ6CisgICAgICAgIHNlbmQtZmlsZS1ibG9iLmh0bWwgYW5k
IHNlbmQtZmlsZS1ibG9iLWZhaWwuaHRtbCBkZXBlbmQgb24gYXZhaWxhYmlsaXR5IG9mIEZpbGUg
QVBJLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9Ta2lwcGVkOiBEaXR0by4KKyAgICAgICAgKiBw
bGF0Zm9ybS9xdC9Ta2lwcGVkOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vU2tpcHBl
ZDogRGl0dG8uCisKIDIwMTEtMDktMDEgIFRha2FzaGkgVG95b3NoaW1hICA8dG95b3NoaW1AY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFtXZWJTb2NrZXRdIEltcGxlbWVudCBXZWJTb2NrZXQ6OmNs
b3NlKCkgY29kZSBhbmQgcmVhc29uIGhhbmRsaW5nLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGl4aWU3Ni9zZW5kLWVtcHR5LWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2hpeGllNzYvc2VuZC1l
bXB0eS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGM3MGYxZjllMGFjYjE5ZWE1NWRjZTYwMTE3
OGE1NzI0YmJiNDVkZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMv
d2Vic29ja2V0L3Rlc3RzL2hpeGllNzYvc2VuZC1lbXB0eS1leHBlY3RlZC50eHQKQEAgLTAsMCAr
MSwxMiBAQAorV2ViU29ja2V0OiBDYWxsaW5nIHNlbmQoKSB3aXRob3V0IGFyZ3VtZW50cyBzaG91
bGQgcmFpc2UgU3ludGF4RXJyb3IuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmll
cyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworUEFT
UyB3cy5zZW5kKCkgdGhyZXcgZXhjZXB0aW9uIFN5bnRheEVycm9yOiBOb3QgZW5vdWdoIGFyZ3Vt
ZW50cy4KK1BBU1MgY2xvc2VFdmVudC53YXNDbGVhbiBpcyB0cnVlCitQQVNTIHJlY2VpdmVkTWVz
c2FnZXMubGVuZ3RoIGlzIDEKK1BBU1MgcmVjZWl2ZWRNZXNzYWdlc1swXSBpcyAiR29vZGJ5ZSIK
K1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oaXhpZTc2L3Nl
bmQtZW1wdHkuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2hp
eGllNzYvc2VuZC1lbXB0eS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZjNjM3NjM5NzM5MzYwNzBkNjgxYzUz
ZTg3ZmRhMTczZjEwNjZiMmMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3dlYnNvY2tldC90ZXN0cy9oaXhpZTc2L3NlbmQtZW1wdHkuaHRtbApAQCAtMCwwICsxLDQ3
IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hl
ZXQiIGhyZWY9Ii4uLy4uLy4uLy4uL2pzLXRlc3QtcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3Nz
Ij4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi8uLi9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48
L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJX
ZWJTb2NrZXQ6IENhbGxpbmcgc2VuZCgpIHdpdGhvdXQgYXJndW1lbnRzIHNob3VsZCByYWlzZSBT
eW50YXhFcnJvci4iKTsKKword2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworCit2YXIgd3Mg
PSBuZXcgV2ViU29ja2V0KCJ3czovLzEyNy4wLjAuMTo4ODgwL3dlYnNvY2tldC90ZXN0cy9oaXhp
ZTc2L2VjaG8iKTsKKwordmFyIGNsb3NlRXZlbnQ7Cit2YXIgcmVjZWl2ZWRNZXNzYWdlcyA9IFtd
OwordmFyIGV4cGVjdGVkTWVzc2FnZXMgPSBbIkdvb2RieWUiXTsKKword3Mub25vcGVuID0gZnVu
Y3Rpb24oKQoreworICAgIHNob3VsZFRocm93KCJ3cy5zZW5kKCkiKTsKKyAgICB3cy5zZW5kKCJH
b29kYnllIik7Cit9OworCit3cy5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkKK3sKKyAgICBy
ZWNlaXZlZE1lc3NhZ2VzLnB1c2goZXZlbnQuZGF0YSk7Cit9OworCit3cy5vbmNsb3NlID0gZnVu
Y3Rpb24oZXZlbnQpCit7CisgICAgY2xvc2VFdmVudCA9IGV2ZW50OworICAgIHNob3VsZEJlVHJ1
ZSgiY2xvc2VFdmVudC53YXNDbGVhbiIpOworCisgICAgc2hvdWxkRXZhbHVhdGVUbygicmVjZWl2
ZWRNZXNzYWdlcy5sZW5ndGgiLCBleHBlY3RlZE1lc3NhZ2VzLmxlbmd0aCk7CisgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBleHBlY3RlZE1lc3NhZ2VzLmxlbmd0aDsgKytpKQorICAgICAgICBzaG91
bGRCZUVxdWFsVG9TdHJpbmcoInJlY2VpdmVkTWVzc2FnZXNbIiArIGkgKyAiXSIsIGV4cGVjdGVk
TWVzc2FnZXNbaV0pOworICAgIGZpbmlzaEpTVGVzdCgpOworfTsKKwordmFyIHN1Y2Nlc3NmdWxs
eVBhcnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi8uLi9qcy10
ZXN0LXJlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGl4
aWU3Ni9zZW5kLW9iamVjdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dl
YnNvY2tldC90ZXN0cy9oaXhpZTc2L3NlbmQtb2JqZWN0LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5hYzliMmNhZDJmMTllYTYyZmZlMDU0NWFmYjdlNzkyYjNjODg4OTUyCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGl4aWU3Ni9zZW5k
LW9iamVjdC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxNCBAQAorV2ViU29ja2V0OiBzZW5kKG9i
amVjdCkgc2hvdWxkIGJlIGludGVycHJldGVkIGFzIHNlbmQob2JqZWN0LnRvU3RyaW5nKCkpLgor
CitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBm
b2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1BBU1MgY2xvc2VFdmVudC53YXNDbGVhbiBp
cyB0cnVlCitQQVNTIHJlY2VpdmVkTWVzc2FnZXMubGVuZ3RoIGlzIDQKK1BBU1MgcmVjZWl2ZWRN
ZXNzYWdlc1swXSBpcyAiW29iamVjdCBPYmplY3RdIgorUEFTUyByZWNlaXZlZE1lc3NhZ2VzWzFd
IGlzICJbb2JqZWN0IEFycmF5QnVmZmVyXSIKK1BBU1MgcmVjZWl2ZWRNZXNzYWdlc1syXSBpcyAi
W29iamVjdCBCbG9iXSIKK1BBU1MgcmVjZWl2ZWRNZXNzYWdlc1szXSBpcyAiR29vZGJ5ZSIKK1BB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oaXhpZTc2L3NlbmQt
b2JqZWN0Lmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oaXhp
ZTc2L3NlbmQtb2JqZWN0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2EzMTcxMzdmMGM0YTJhNmI0YjA3MTZl
N2QzNDIzMjkzMDRmOTk1NgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvd2Vic29ja2V0L3Rlc3RzL2hpeGllNzYvc2VuZC1vYmplY3QuaHRtbApAQCAtMCwwICsxLDU1
IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hl
ZXQiIGhyZWY9Ii4uLy4uLy4uLy4uL2pzLXRlc3QtcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3Nz
Ij4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi8uLi9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48
L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJX
ZWJTb2NrZXQ6IHNlbmQob2JqZWN0KSBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgYXMgc2VuZChvYmpl
Y3QudG9TdHJpbmcoKSkuIik7CisKK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKworZnVu
Y3Rpb24gY3JlYXRlRW1wdHlCbG9iKCkKK3sKKyAgICB2YXIgYnVpbGRlciA9IG5ldyBXZWJLaXRC
bG9iQnVpbGRlcigpOworICAgIHJldHVybiBidWlsZGVyLmdldEJsb2IoKTsKK30KKwordmFyIHdz
ID0gbmV3IFdlYlNvY2tldCgid3M6Ly8xMjcuMC4wLjE6ODg4MC93ZWJzb2NrZXQvdGVzdHMvaGl4
aWU3Ni9lY2hvIik7CisKK3ZhciBjbG9zZUV2ZW50OwordmFyIHJlY2VpdmVkTWVzc2FnZXMgPSBb
XTsKK3ZhciBleHBlY3RlZE1lc3NhZ2VzID0gWyJbb2JqZWN0IE9iamVjdF0iLCAiW29iamVjdCBB
cnJheUJ1ZmZlcl0iLCAiW29iamVjdCBCbG9iXSIsICJHb29kYnllIl07CisKK3dzLm9ub3BlbiA9
IGZ1bmN0aW9uKCkKK3sKKyAgICB3cy5zZW5kKHt9KTsKKyAgICB3cy5zZW5kKG5ldyBBcnJheUJ1
ZmZlcigpKTsKKyAgICB3cy5zZW5kKGNyZWF0ZUVtcHR5QmxvYigpKTsKKyAgICB3cy5zZW5kKCJH
b29kYnllIik7Cit9OworCit3cy5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkKK3sKKyAgICBy
ZWNlaXZlZE1lc3NhZ2VzLnB1c2goZXZlbnQuZGF0YSk7Cit9OworCit3cy5vbmNsb3NlID0gZnVu
Y3Rpb24oZXZlbnQpCit7CisgICAgY2xvc2VFdmVudCA9IGV2ZW50OworICAgIHNob3VsZEJlVHJ1
ZSgiY2xvc2VFdmVudC53YXNDbGVhbiIpOworCisgICAgc2hvdWxkRXZhbHVhdGVUbygicmVjZWl2
ZWRNZXNzYWdlcy5sZW5ndGgiLCBleHBlY3RlZE1lc3NhZ2VzLmxlbmd0aCk7CisgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBleHBlY3RlZE1lc3NhZ2VzLmxlbmd0aDsgKytpKQorICAgICAgICBzaG91
bGRCZUVxdWFsVG9TdHJpbmcoInJlY2VpdmVkTWVzc2FnZXNbIiArIGkgKyAiXSIsIGV4cGVjdGVk
TWVzc2FnZXNbaV0pOworICAgIGZpbmlzaEpTVGVzdCgpOworfTsKKwordmFyIHN1Y2Nlc3NmdWxs
eVBhcnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi8uLi9qcy10
ZXN0LXJlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHli
aS9idWZmZXJlZEFtb3VudC1hZnRlci1jbG9zZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL2J1ZmZlcmVkQW1vdW50LWFmdGVyLWNsb3Nl
LWV4cGVjdGVkLnR4dAppbmRleCBlNzI5ODA3MDM1OGFkNTgyMjM2NDE4MzU3YzdkM2ZmZmMwNDgz
NGRmLi43YzZkNTVlYjY0ZGVlMzliODFlMjAxZDZjMThiZjUzZWE1N2I5NTliIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL2J1ZmZlcmVkQW1v
dW50LWFmdGVyLWNsb3NlLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3dlYnNvY2tldC90ZXN0cy9oeWJpL2J1ZmZlcmVkQW1vdW50LWFmdGVyLWNsb3NlLWV4cGVjdGVk
LnR4dApAQCAtNiw2ICs2LDcgQEAgQ29ubmVjdGVkLgogQ2xvc2VkLgogUEFTUyB3cy5yZWFkeVN0
YXRlIGlzIDMKIFBBU1Mgd3MuYnVmZmVyZWRBbW91bnQgaXMgMAorVGVzdGluZyBzZW5kKHN0cmlu
ZykuLi4KIFBBU1Mgd3Muc2VuZChtZXNzYWdlVG9TZW5kKSBpcyBmYWxzZQogUEFTUyBidWZmZXJl
ZEFtb3VudERpZmZlcmVuY2UgaXMgMjcKIFBBU1Mgd3Muc2VuZChtZXNzYWdlVG9TZW5kKSBpcyBm
YWxzZQpAQCAtMjAsNiArMjEsMTkgQEAgUEFTUyB3cy5zZW5kKG1lc3NhZ2VUb1NlbmQpIGlzIGZh
bHNlCiBQQVNTIGJ1ZmZlcmVkQW1vdW50RGlmZmVyZW5jZSBpcyA2NTU0MwogUEFTUyB3cy5zZW5k
KG1lc3NhZ2VUb1NlbmQpIGlzIGZhbHNlCiBQQVNTIGJ1ZmZlcmVkQW1vdW50RGlmZmVyZW5jZSBp
cyA2NTU1MAorVGVzdGluZyBzZW5kKEJsb2IpLi4uCitQQVNTIHdzLnNlbmQobWVzc2FnZVRvU2Vu
ZCkgaXMgZmFsc2UKK1BBU1MgYnVmZmVyZWRBbW91bnREaWZmZXJlbmNlIGlzIDYKK1BBU1Mgd3Mu
c2VuZChtZXNzYWdlVG9TZW5kKSBpcyBmYWxzZQorUEFTUyBidWZmZXJlZEFtb3VudERpZmZlcmVu
Y2UgaXMgNworUEFTUyB3cy5zZW5kKG1lc3NhZ2VUb1NlbmQpIGlzIGZhbHNlCitQQVNTIGJ1ZmZl
cmVkQW1vdW50RGlmZmVyZW5jZSBpcyAxMzEKK1BBU1Mgd3Muc2VuZChtZXNzYWdlVG9TZW5kKSBp
cyBmYWxzZQorUEFTUyBidWZmZXJlZEFtb3VudERpZmZlcmVuY2UgaXMgMTM0CitQQVNTIHdzLnNl
bmQobWVzc2FnZVRvU2VuZCkgaXMgZmFsc2UKK1BBU1MgYnVmZmVyZWRBbW91bnREaWZmZXJlbmNl
IGlzIDY1NTQzCitQQVNTIHdzLnNlbmQobWVzc2FnZVRvU2VuZCkgaXMgZmFsc2UKK1BBU1MgYnVm
ZmVyZWRBbW91bnREaWZmZXJlbmNlIGlzIDY1NTUwCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvd2Vic29ja2V0L3Rlc3RzL2h5YmkvYnVmZmVyZWRBbW91bnQtYWZ0ZXItY2xvc2UuaHRtbCBi
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5YmkvYnVmZmVyZWRBbW91
bnQtYWZ0ZXItY2xvc2UuaHRtbAppbmRleCAxNmE2YTRiNzE3N2U4ZWY3ZDc5ODlmMDU5MjMxMGIy
NDhjZjg5MzllLi5jNmIyNjA0MmU1OWQ4ZjA0MmE4YjYzMTZlNTc1ODkxMjg4NjE0ODY0IDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL2J1ZmZl
cmVkQW1vdW50LWFmdGVyLWNsb3NlLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93
ZWJzb2NrZXQvdGVzdHMvaHliaS9idWZmZXJlZEFtb3VudC1hZnRlci1jbG9zZS5odG1sCkBAIC0y
Miw2ICsyMiwxMyBAQCBmdW5jdGlvbiBjcmVhdGVTdHJpbmdXaXRoTGVuZ3RoKGxlbmd0aCkKICAg
ICByZXR1cm4gc3RyaW5nLnN1YnN0cmluZygwLCBsZW5ndGgpOwogfQogCitmdW5jdGlvbiBjcmVh
dGVCbG9iV2l0aExlbmd0aChsZW5ndGgpCit7CisgICAgdmFyIGJ1aWxkZXIgPSBuZXcgV2ViS2l0
QmxvYkJ1aWxkZXIoKTsKKyAgICBidWlsZGVyLmFwcGVuZChuZXcgQXJyYXlCdWZmZXIobGVuZ3Ro
KSk7CisgICAgcmV0dXJuIGJ1aWxkZXIuZ2V0QmxvYigpOworfQorCiB2YXIgd3MgPSBuZXcgV2Vi
U29ja2V0KCJ3czovL2xvY2FsaG9zdDo4ODgwL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NpbXBsZSIp
OwogCiB3cy5vbm9wZW4gPSBmdW5jdGlvbigpCkBAIC0zNyw2ICs0NCw3IEBAIHdzLm9uY2xvc2Ug
PSBmdW5jdGlvbigpCiAgICAgc2hvdWxkQmUoIndzLmJ1ZmZlcmVkQW1vdW50IiwgIjAiKTsKIAog
ICAgIHZhciBiYXNlT3ZlcmhlYWQgPSAyICsgNDsgLy8gQmFzZSBoZWFkZXIgc2l6ZSBhbmQgbWFz
a2luZyBrZXkgc2l6ZS4KKyAgICBkZWJ1ZygiVGVzdGluZyBzZW5kKHN0cmluZykuLi4iKTsKICAg
ICB0ZXN0QnVmZmVyZWRBbW91bnQoJ3NlbmQgdG8gY2xvc2VkIHNvY2tldCcsIDIxICsgYmFzZU92
ZXJoZWFkKTsKICAgICB0ZXN0QnVmZmVyZWRBbW91bnQoJycsIGJhc2VPdmVyaGVhZCk7CiAgICAg
dGVzdEJ1ZmZlcmVkQW1vdW50KCdhJywgMSArIGJhc2VPdmVyaGVhZCk7CkBAIC00NSw2ICs1Mywx
NCBAQCB3cy5vbmNsb3NlID0gZnVuY3Rpb24oKQogICAgIHRlc3RCdWZmZXJlZEFtb3VudChjcmVh
dGVTdHJpbmdXaXRoTGVuZ3RoKDB4RkZGRiksIDB4RkZGRiArIGJhc2VPdmVyaGVhZCArIDIpOwog
ICAgIHRlc3RCdWZmZXJlZEFtb3VudChjcmVhdGVTdHJpbmdXaXRoTGVuZ3RoKDB4MTAwMDApLCAw
eDEwMDAwICsgYmFzZU92ZXJoZWFkICsgOCk7IC8vIFdpdGggNjQtYml0IGV4dGVuZGVkIHBheWxv
YWQgbGVuZ3RoIGZpZWxkLgogCisgICAgZGVidWcoIlRlc3Rpbmcgc2VuZChCbG9iKS4uLiIpOwor
ICAgIHRlc3RCdWZmZXJlZEFtb3VudChjcmVhdGVCbG9iV2l0aExlbmd0aCgwKSwgYmFzZU92ZXJo
ZWFkKTsKKyAgICB0ZXN0QnVmZmVyZWRBbW91bnQoY3JlYXRlQmxvYldpdGhMZW5ndGgoMSksIDEg
KyBiYXNlT3ZlcmhlYWQpOworICAgIHRlc3RCdWZmZXJlZEFtb3VudChjcmVhdGVCbG9iV2l0aExl
bmd0aCgxMjUpLCAxMjUgKyBiYXNlT3ZlcmhlYWQpOworICAgIHRlc3RCdWZmZXJlZEFtb3VudChj
cmVhdGVCbG9iV2l0aExlbmd0aCgxMjYpLCAxMjYgKyBiYXNlT3ZlcmhlYWQgKyAyKTsKKyAgICB0
ZXN0QnVmZmVyZWRBbW91bnQoY3JlYXRlQmxvYldpdGhMZW5ndGgoMHhGRkZGKSwgMHhGRkZGICsg
YmFzZU92ZXJoZWFkICsgMik7CisgICAgdGVzdEJ1ZmZlcmVkQW1vdW50KGNyZWF0ZUJsb2JXaXRo
TGVuZ3RoKDB4MTAwMDApLCAweDEwMDAwICsgYmFzZU92ZXJoZWFkICsgOCk7CisKICAgICBmaW5p
c2hKU1Rlc3QoKTsKIH07CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vi
c29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1ibG9iLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2h0
dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1ibG9iLWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5mZGY0OGQwNWYzZmQ3MjBlMGJhNWFhNjc5YzI2MmU0ZGRiMjMxYzIzCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9z
ZW5kLWJsb2ItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTIgQEAKK1dlYlNvY2tldDogU2VuZCBC
bG9icy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNz
YWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitQQVNTIFBBU1M6IE1lc3NhZ2Ug
IzAuCitQQVNTIFBBU1M6IE1lc3NhZ2UgIzEuCitQQVNTIFBBU1M6IE1lc3NhZ2UgIzIuCitQQVNT
IGNsb3NlRXZlbnQud2FzQ2xlYW4gaXMgdHJ1ZQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1ibG9iLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtYmxvYi5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVh
YjkzNDZkNzQ4M2E2NGE5MmFhYmY3OTFlZGI5YzlkMDM3NWY5OTIKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtYmxvYi5o
dG1sCkBAIC0wLDAgKzEsNzYgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxs
aW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vLi4vanMtdGVzdC1yZXNvdXJjZXMv
anMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uLy4uL2pzLXRlc3QtcmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBp
ZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0
IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CitkZXNjcmlwdGlvbigiV2ViU29ja2V0OiBTZW5kIEJs
b2JzLiIpOworCit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CitpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLm92ZXJyaWRlUHJlZmVy
ZW5jZSgiV2ViS2l0SGl4aWU3NldlYlNvY2tldFByb3RvY29sRW5hYmxlZCIsIDApOworCitmdW5j
dGlvbiBzdGFydHNXaXRoKHRhcmdldCwgcHJlZml4KQoreworICAgIHJldHVybiB0YXJnZXQuaW5k
ZXhPZihwcmVmaXgpID09PSAwOworfQorCitmdW5jdGlvbiBjcmVhdGVCbG9iQ29udGFpbmluZ0hl
bGxvV29ybGQoKQoreworICAgIHZhciBidWlsZGVyID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7
CisgICAgYnVpbGRlci5hcHBlbmQoIkhlbGxvLCB3b3JsZCEiKTsKKyAgICByZXR1cm4gYnVpbGRl
ci5nZXRCbG9iKCk7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZUVtcHR5QmxvYigpCit7CisgICAgdmFy
IGJ1aWxkZXIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKKyAgICByZXR1cm4gYnVpbGRlci5n
ZXRCbG9iKCk7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZUJsb2JDb250YWluaW5nQWxsRGlzdGluY3RC
eXRlcygpCit7CisgICAgdmFyIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoMjU2KTsKKyAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IDI1NjsgKytpKQorICAgICAgICBhcnJheVtpXSA9IGk7CisgICAgdmFy
IGJ1aWxkZXIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKKyAgICBidWlsZGVyLmFwcGVuZChh
cnJheS5idWZmZXIpOworICAgIHJldHVybiBidWlsZGVyLmdldEJsb2IoKTsKK30KKwordmFyIHVy
bCA9ICJ3czovLzEyNy4wLjAuMTo4ODgwL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtYmxvYiI7
Cit2YXIgd3MgPSBuZXcgV2ViU29ja2V0KHVybCk7Cit2YXIgY2xvc2VFdmVudDsKKword3Mub25v
cGVuID0gZnVuY3Rpb24oKQoreworICAgIHdzLnNlbmQoY3JlYXRlQmxvYkNvbnRhaW5pbmdIZWxs
b1dvcmxkKCkpOworICAgIHdzLnNlbmQoY3JlYXRlRW1wdHlCbG9iKCkpOworICAgIHdzLnNlbmQo
Y3JlYXRlQmxvYkNvbnRhaW5pbmdBbGxEaXN0aW5jdEJ5dGVzKCkpOworfTsKKword3Mub25tZXNz
YWdlID0gZnVuY3Rpb24oZXZlbnQpCit7CisgICAgdmFyIG1lc3NhZ2UgPSBldmVudC5kYXRhOwor
ICAgIGlmIChzdGFydHNXaXRoKG1lc3NhZ2UsICJQQVNTIikpCisgICAgICAgIHRlc3RQYXNzZWQo
bWVzc2FnZSk7CisgICAgZWxzZQorICAgICAgICB0ZXN0RmFpbGVkKG1lc3NhZ2UpOworfTsKKwor
d3Mub25jbG9zZSA9IGZ1bmN0aW9uKGV2ZW50KQoreworICAgIGNsb3NlRXZlbnQgPSBldmVudDsK
KyAgICBzaG91bGRCZVRydWUoImNsb3NlRXZlbnQud2FzQ2xlYW4iKTsKKyAgICBmaW5pc2hKU1Rl
c3QoKTsKK307CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vanMtdGVzdC1yZXNvdXJjZXMvanMtdGVzdC1wb3N0Lmpz
Ij48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0
dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1ibG9iX3dzaC5weSBiL0xheW91dFRl
c3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1ibG9iX3dzaC5weQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4wMjRlM2Y0ZDA3OTQ1YzkyY2FhYmRjMDM3ZWM1MDA4MjRhNDJhMWEyCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9z
ZW5kLWJsb2Jfd3NoLnB5CkBAIC0wLDAgKzEsMjEgQEAKK2Zyb20gbW9kX3B5d2Vic29ja2V0IGlt
cG9ydCBjb21tb24KK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBtc2d1dGlsCisKKworZGVm
IHdlYl9zb2NrZXRfZG9fZXh0cmFfaGFuZHNoYWtlKHJlcXVlc3QpOgorICAgIHBhc3MgIyBBbHdh
eXMgYWNjZXB0LgorCisKK2RlZiB3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEocmVxdWVzdCk6Cisg
ICAgZXhwZWN0ZWRfbWVzc2FnZXMgPSBbJ0hlbGxvLCB3b3JsZCEnLCAnJywgYWxsX2Rpc3RpbmN0
X2J5dGVzKCldCisKKyAgICBmb3IgdGVzdF9udW1iZXIsIGV4cGVjdGVkX21lc3NhZ2UgaW4gZW51
bWVyYXRlKGV4cGVjdGVkX21lc3NhZ2VzKToKKyAgICAgICAgbWVzc2FnZSA9IG1zZ3V0aWwucmVj
ZWl2ZV9tZXNzYWdlKHJlcXVlc3QpCisgICAgICAgIGlmIHR5cGUobWVzc2FnZSkgPT0gc3RyIGFu
ZCBtZXNzYWdlID09IGV4cGVjdGVkX21lc3NhZ2U6CisgICAgICAgICAgICBtc2d1dGlsLnNlbmRf
bWVzc2FnZShyZXF1ZXN0LCAnUEFTUzogTWVzc2FnZSAjJWQuJyAlIHRlc3RfbnVtYmVyKQorICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgbXNndXRpbC5zZW5kX21lc3NhZ2UocmVxdWVzdCwgJ0ZB
SUw6IE1lc3NhZ2UgIyVkOiBSZWNlaXZlZCB1bmV4cGVjdGVkIG1lc3NhZ2U6ICVyJyAlICh0ZXN0
X251bWJlciwgbWVzc2FnZSkpCisKKworZGVmIGFsbF9kaXN0aW5jdF9ieXRlcygpOgorICAgIHJl
dHVybiAnJy5qb2luKFtjaHIoaSkgZm9yIGkgaW4geHJhbmdlKDI1NildKQpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWVtcHR5LWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkv
c2VuZC1lbXB0eS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGM3MGYxZjllMGFjYjE5ZWE1NWRj
ZTYwMTE3OGE1NzI0YmJiNDVkZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1lbXB0eS1leHBlY3RlZC50eHQKQEAgLTAs
MCArMSwxMiBAQAorV2ViU29ja2V0OiBDYWxsaW5nIHNlbmQoKSB3aXRob3V0IGFyZ3VtZW50cyBz
aG91bGQgcmFpc2UgU3ludGF4RXJyb3IuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwor
UEFTUyB3cy5zZW5kKCkgdGhyZXcgZXhjZXB0aW9uIFN5bnRheEVycm9yOiBOb3QgZW5vdWdoIGFy
Z3VtZW50cy4KK1BBU1MgY2xvc2VFdmVudC53YXNDbGVhbiBpcyB0cnVlCitQQVNTIHJlY2VpdmVk
TWVzc2FnZXMubGVuZ3RoIGlzIDEKK1BBU1MgcmVjZWl2ZWRNZXNzYWdlc1swXSBpcyAiR29vZGJ5
ZSIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3Nl
bmQtZW1wdHkuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5
Ymkvc2VuZC1lbXB0eS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM4Yzg5OTY0OTY1NjRiOTg3NmJkMWEyN2U3
ZTJiOGEzODM0NTdiOTcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtZW1wdHkuaHRtbApAQCAtMCwwICsxLDQ5IEBACis8
IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhy
ZWY9Ii4uLy4uLy4uLy4uL2pzLXRlc3QtcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi8uLi8uLi9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4K
KzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJXZWJTb2Nr
ZXQ6IENhbGxpbmcgc2VuZCgpIHdpdGhvdXQgYXJndW1lbnRzIHNob3VsZCByYWlzZSBTeW50YXhF
cnJvci4iKTsKKword2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworaWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5vdmVycmlkZVByZWZl
cmVuY2UoIldlYktpdEhpeGllNzZXZWJTb2NrZXRQcm90b2NvbEVuYWJsZWQiLCAwKTsKKwordmFy
IHdzID0gbmV3IFdlYlNvY2tldCgid3M6Ly8xMjcuMC4wLjE6ODg4MC93ZWJzb2NrZXQvdGVzdHMv
aHliaS9lY2hvIik7CisKK3ZhciBjbG9zZUV2ZW50OwordmFyIHJlY2VpdmVkTWVzc2FnZXMgPSBb
XTsKK3ZhciBleHBlY3RlZE1lc3NhZ2VzID0gWyJHb29kYnllIl07CisKK3dzLm9ub3BlbiA9IGZ1
bmN0aW9uKCkKK3sKKyAgICBzaG91bGRUaHJvdygid3Muc2VuZCgpIik7CisgICAgd3Muc2VuZCgi
R29vZGJ5ZSIpOworfTsKKword3Mub25tZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpCit7CisgICAg
cmVjZWl2ZWRNZXNzYWdlcy5wdXNoKGV2ZW50LmRhdGEpOworfTsKKword3Mub25jbG9zZSA9IGZ1
bmN0aW9uKGV2ZW50KQoreworICAgIGNsb3NlRXZlbnQgPSBldmVudDsKKyAgICBzaG91bGRCZVRy
dWUoImNsb3NlRXZlbnQud2FzQ2xlYW4iKTsKKworICAgIHNob3VsZEV2YWx1YXRlVG8oInJlY2Vp
dmVkTWVzc2FnZXMubGVuZ3RoIiwgZXhwZWN0ZWRNZXNzYWdlcy5sZW5ndGgpOworICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgZXhwZWN0ZWRNZXNzYWdlcy5sZW5ndGg7ICsraSkKKyAgICAgICAgc2hv
dWxkQmVFcXVhbFRvU3RyaW5nKCJyZWNlaXZlZE1lc3NhZ2VzWyIgKyBpICsgIl0iLCBleHBlY3Rl
ZE1lc3NhZ2VzW2ldKTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK307CisKK3ZhciBzdWNjZXNzZnVs
bHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vanMt
dGVzdC1yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5
Ymkvc2VuZC1maWxlLWJsb2ItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93
ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWZpbGUtYmxvYi1leHBlY3RlZC50eHQKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNTE2NDljZTk4NGJlMTZmN2YxYjc4NTVmZWFiNTliZDgwNzQxZGVmMgotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1m
aWxlLWJsb2ItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTYgQEAKK1dlYlNvY2tldDogU2VuZCBh
IEZpbGUuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVz
c2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworR290IEZpbGVTeXN0ZW0gb2Jq
ZWN0LgorRmlsZSBjcmVhdGVkLgorUEFTUyBmaWxlRW50cnkuaXNGaWxlIGlzIHRydWUKK1dyb3Rl
IHRvIGZpbGUuCitHb3QgRmlsZSBvYmplY3QuCitQQVNTIFBBU1M6IE1lc3NhZ2UgIzAuCitQQVNT
IGNsb3NlRXZlbnQud2FzQ2xlYW4gaXMgdHJ1ZQorRGVsZXRpbmcgdGhlIGZpbGUuCitQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWZpbGUtYmxv
Yi1mYWlsLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rl
c3RzL2h5Ymkvc2VuZC1maWxlLWJsb2ItZmFpbC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWQ3
MThmOTAwNjlkNTRiZDRiZmYzOWU1ZjE2MTAxOGEzOGVjNWQ5OQotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1maWxlLWJs
b2ItZmFpbC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxNiBAQAorQ09OU09MRSBNRVNTQUdFOiBs
aW5lIDA6IEZhaWxlZCB0byBsb2FkIEJsb2I6IGVycm9yIGNvZGUgPSAxCitXZWJTb2NrZXQgc2hv
dWxkIGZhaWwgdGhlIGNvbm5lY3Rpb24gaWYgaXQgaGFzIGZhaWxlZCB0byByZWFkIGEgQmxvYi4K
KworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitHb3QgRmlsZVN5c3RlbSBvYmplY3QuCitG
aWxlIGNyZWF0ZWQuCitQQVNTIGZpbGVFbnRyeS5pc0ZpbGUgaXMgdHJ1ZQorV3JvdGUgdG8gZmls
ZS4KK0dvdCBGaWxlIG9iamVjdC4KK0ZpbGUgZGVsZXRlZC4KK1BBU1MgY2xvc2VFdmVudC53YXND
bGVhbiBpcyBmYWxzZQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rl
c3RzL2h5Ymkvc2VuZC1maWxlLWJsb2ItZmFpbC5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWZpbGUtYmxvYi1mYWlsLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uOTI2MjZkOGYxZTNhYzcwOTVlOTNmODZiNDhlZTczYTEyNDU2ZTYzMQotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1m
aWxlLWJsb2ItZmFpbC5odG1sCkBAIC0wLDAgKzEsMTI2IEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uLy4uL2pz
LXRlc3QtcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi8u
Li8uLi9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUi
PjwvZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorZGVzY3JpcHRpb24oIldl
YlNvY2tldCBzaG91bGQgZmFpbCB0aGUgY29ubmVjdGlvbiBpZiBpdCBoYXMgZmFpbGVkIHRvIHJl
YWQgYSBCbG9iLiIpOworCit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CitpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLm92ZXJyaWRl
UHJlZmVyZW5jZSgiV2ViS2l0SGl4aWU3NldlYlNvY2tldFByb3RvY29sRW5hYmxlZCIsIDApOwor
CitmdW5jdGlvbiBzdGFydHNXaXRoKHRhcmdldCwgcHJlZml4KQoreworICAgIHJldHVybiB0YXJn
ZXQuaW5kZXhPZihwcmVmaXgpID09PSAwOworfQorCit2YXIgZmlsZVN5c3RlbVNpemUgPSAxMDI0
OwordmFyIGZpbGVOYW1lID0gIndlYnNvY2tldC1zZW5kLWZpbGUtYmxvYi1mYWlsLnR4dCI7Cit2
YXIgbWVzc2FnZVRvV3JpdGUgPSAiVGhpcyBtZXNzYWdlIHNob3VsZG4ndCBiZSBzZW50LiI7CisK
K2Z1bmN0aW9uIHJ1blRlc3QoKQoreworICAgIGlmICghd2luZG93LndlYmtpdFJlcXVlc3RGaWxl
U3lzdGVtKSB7CisgICAgICAgIHRlc3RGYWlsZWQoIndpbmRvdy53ZWJraXRSZXF1ZXN0RmlsZVN5
c3RlbSBpcyBub3QgYXZhaWxhYmxlLiIpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIHdlYmtpdFJlcXVlc3RGaWxlU3lzdGVtKFRFTVBPUkFS
WSwgZmlsZVN5c3RlbVNpemUsIGRpZEdldEZpbGVTeXN0ZW0sIGRpZEZhaWwpOworfQorCitmdW5j
dGlvbiBkaWRHZXRGaWxlU3lzdGVtKGZpbGVTeXN0ZW0pCit7CisgICAgZGVidWcoIkdvdCBGaWxl
U3lzdGVtIG9iamVjdC4iKTsKKyAgICBmaWxlU3lzdGVtLnJvb3QuZ2V0RmlsZShmaWxlTmFtZSwg
e2NyZWF0ZTogdHJ1ZX0sIGRpZENyZWF0ZUZpbGUsIGRpZEZhaWwpOworfQorCit2YXIgZmlsZUVu
dHJ5OworCitmdW5jdGlvbiBkaWRDcmVhdGVGaWxlKGVudHJ5KQoreworICAgIGRlYnVnKCJGaWxl
IGNyZWF0ZWQuIik7CisgICAgZmlsZUVudHJ5ID0gZW50cnk7CisgICAgc2hvdWxkQmVUcnVlKCJm
aWxlRW50cnkuaXNGaWxlIik7CisgICAgZmlsZUVudHJ5LmNyZWF0ZVdyaXRlcihkaWRHZXRGaWxl
V3JpdGVyLCBkaWRGYWlsKTsKK30KKworZnVuY3Rpb24gZGlkR2V0RmlsZVdyaXRlcih3cml0ZXIp
Cit7CisgICAgd3JpdGVyLnRydW5jYXRlKDApOworICAgIHdyaXRlci5vbmVycm9yID0gZnVuY3Rp
b24oKQorICAgIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiRmlsZVdyaXRlciBvcGVyYXRpb24gZmFp
bGVkLiIpOworICAgICAgICBlbmRUZXN0KCk7CisgICAgfTsKKyAgICB3cml0ZXIub253cml0ZSA9
IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBidWlsZGVyID0gbmV3IFdlYktpdEJsb2JC
dWlsZGVyKCk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKG1lc3NhZ2VUb1dyaXRlKTsKKyAgICAg
ICAgd3JpdGVyLndyaXRlKGJ1aWxkZXIuZ2V0QmxvYigpKTsKKyAgICAgICAgd3JpdGVyLm9ud3Jp
dGUgPSBkaWRXcml0ZUZpbGU7CisgICAgfTsKK30KKworZnVuY3Rpb24gZGlkV3JpdGVGaWxlKCkK
K3sKKyAgICBkZWJ1ZygiV3JvdGUgdG8gZmlsZS4iKTsKKyAgICBmaWxlRW50cnkuZmlsZShkaWRH
ZXRGaWxlLCBkaWRGYWlsKTsKK30KKwordmFyIGZpbGVPYmplY3Q7CisKK2Z1bmN0aW9uIGRpZEdl
dEZpbGUoZmlsZSkKK3sKKyAgICBkZWJ1ZygiR290IEZpbGUgb2JqZWN0LiIpOworICAgIGZpbGVP
YmplY3QgPSBmaWxlOworCisgICAgLy8gRGVsZXRlIHRoZSBmaWxlIG9iamVjdCBiZWZvcmUgaXQg
aXMgcmVhZC4gVGhpcyBzaG91bGQgY2F1c2UgdGhlIHN1YnNlcXVlbnQgcmVhZCBvcGVyYXRpb24K
KyAgICAvLyB0byBmYWlsIHJlbGlhYmx5LgorICAgIGZpbGVFbnRyeS5yZW1vdmUoZGlkUmVtb3Zl
RmlsZSwgZGlkRmFpbCk7Cit9CisKK2Z1bmN0aW9uIGRpZFJlbW92ZUZpbGUoKQoreworICAgIGRl
YnVnKCJGaWxlIGRlbGV0ZWQuIik7CisgICAgZmlsZUVudHJ5ID0gbnVsbDsgLy8gVG8gcHJldmVu
dCB0aGUgZmlsZSBmcm9tIGdldHRpbmcgZGVsZXRlZCBhZ2Fpbi4KKyAgICB2YXIgd3MgPSBuZXcg
V2ViU29ja2V0KCJ3czovLzEyNy4wLjAuMTo4ODgwL3dlYnNvY2tldC90ZXN0cy9oeWJpL2VjaG8i
KTsKKyAgICB3cy5vbm9wZW4gPSBmdW5jdGlvbigpCisgICAgeworICAgICAgICB3cy5zZW5kKGZp
bGVPYmplY3QpOyAvLyBUaGlzIG9wZXJhdGlvbiBzaG91bGQgZmFpbCBhbmQgdGhlIGNvbm5lY3Rp
b24gc2hvdWxkIGJlIGFib3J0ZWQuCisgICAgfTsKKyAgICB3cy5vbmNsb3NlID0gZnVuY3Rpb24o
ZXZlbnQpCisgICAgeworICAgICAgICBjbG9zZUV2ZW50ID0gZXZlbnQ7CisgICAgICAgIHNob3Vs
ZEJlRmFsc2UoImNsb3NlRXZlbnQud2FzQ2xlYW4iKTsKKyAgICAgICAgZW5kVGVzdCgpOworICAg
IH07Cit9CisKK2Z1bmN0aW9uIGRpZEZhaWwoZmlsZUVycm9yKQoreworICAgIHRlc3RGYWlsZWQo
IkZpbGVTeXN0ZW0gQVBJIG9wZXJhdGlvbiBmYWlsZWQ6IGVycm9yIGNvZGUgPSAiICsgZmlsZUVy
cm9yLmNvZGUpOworICAgIGVuZFRlc3QoKTsKK30KKworZnVuY3Rpb24gZW5kVGVzdCgpCit7Cisg
ICAgaWYgKGZpbGVFbnRyeSkgeworICAgICAgICBkZWJ1ZygiRGVsZXRpbmcgdGhlIGZpbGUuIik7
CisgICAgICAgIGZpbGVFbnRyeS5yZW1vdmUoZmluaXNoSlNUZXN0LCBmaW5pc2hKU1Rlc3QpOwor
ICAgIH0gZWxzZQorICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKK30KKworcnVuVGVzdCgpOworCit2
YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4u
Ly4uLy4uLy4uL2pzLXRlc3QtcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNv
Y2tldC90ZXN0cy9oeWJpL3NlbmQtZmlsZS1ibG9iLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtZmlsZS1ibG9iLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MDY0Y2I2NzAzNjRhMWE2Y2QyOTVjYzBiYjQ1NDRjZTc4NTMzNTA3YwotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1maWxl
LWJsb2IuaHRtbApAQCAtMCwwICsxLDEyMyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxo
ZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi8uLi9qcy10ZXN0LXJl
c291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vanMt
dGVzdC1yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+
Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4K
KzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KK2Rlc2NyaXB0aW9uKCJXZWJTb2NrZXQ6
IFNlbmQgYSBGaWxlLiIpOworCit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CitpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLm92ZXJy
aWRlUHJlZmVyZW5jZSgiV2ViS2l0SGl4aWU3NldlYlNvY2tldFByb3RvY29sRW5hYmxlZCIsIDAp
OworCitmdW5jdGlvbiBzdGFydHNXaXRoKHRhcmdldCwgcHJlZml4KQoreworICAgIHJldHVybiB0
YXJnZXQuaW5kZXhPZihwcmVmaXgpID09PSAwOworfQorCit2YXIgZmlsZVN5c3RlbVNpemUgPSAx
MDI0OwordmFyIGZpbGVOYW1lID0gIndlYnNvY2tldC1zZW5kLWZpbGUtYmxvYi50eHQiOwordmFy
IG1lc3NhZ2VUb1dyaXRlID0gIkhlbGxvLCB3b3JsZCEiOworCitmdW5jdGlvbiBydW5UZXN0KCkK
K3sKKyAgICBpZiAoIXdpbmRvdy53ZWJraXRSZXF1ZXN0RmlsZVN5c3RlbSkgeworICAgICAgICB0
ZXN0RmFpbGVkKCJ3aW5kb3cud2Via2l0UmVxdWVzdEZpbGVTeXN0ZW0gaXMgbm90IGF2YWlsYWJs
ZS4iKTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICB3ZWJraXRSZXF1ZXN0RmlsZVN5c3RlbShURU1QT1JBUlksIGZpbGVTeXN0ZW1TaXplLCBk
aWRHZXRGaWxlU3lzdGVtLCBkaWRGYWlsKTsKK30KKworZnVuY3Rpb24gZGlkR2V0RmlsZVN5c3Rl
bShmaWxlU3lzdGVtKQoreworICAgIGRlYnVnKCJHb3QgRmlsZVN5c3RlbSBvYmplY3QuIik7Cisg
ICAgZmlsZVN5c3RlbS5yb290LmdldEZpbGUoZmlsZU5hbWUsIHtjcmVhdGU6IHRydWV9LCBkaWRD
cmVhdGVGaWxlLCBkaWRGYWlsKTsKK30KKwordmFyIGZpbGVFbnRyeTsKKworZnVuY3Rpb24gZGlk
Q3JlYXRlRmlsZShlbnRyeSkKK3sKKyAgICBkZWJ1ZygiRmlsZSBjcmVhdGVkLiIpOworICAgIGZp
bGVFbnRyeSA9IGVudHJ5OworICAgIHNob3VsZEJlVHJ1ZSgiZmlsZUVudHJ5LmlzRmlsZSIpOwor
ICAgIGZpbGVFbnRyeS5jcmVhdGVXcml0ZXIoZGlkR2V0RmlsZVdyaXRlciwgZGlkRmFpbCk7Cit9
CisKK2Z1bmN0aW9uIGRpZEdldEZpbGVXcml0ZXIod3JpdGVyKQoreworICAgIHdyaXRlci50cnVu
Y2F0ZSgwKTsKKyAgICB3cml0ZXIub25lcnJvciA9IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAg
IHRlc3RGYWlsZWQoIkZpbGVXcml0ZXIgb3BlcmF0aW9uIGZhaWxlZC4iKTsKKyAgICAgICAgZW5k
VGVzdCgpOworICAgIH07CisgICAgd3JpdGVyLm9ud3JpdGUgPSBmdW5jdGlvbigpCisgICAgewor
ICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOworICAgICAgICBi
dWlsZGVyLmFwcGVuZChtZXNzYWdlVG9Xcml0ZSk7CisgICAgICAgIHdyaXRlci53cml0ZShidWls
ZGVyLmdldEJsb2IoKSk7CisgICAgICAgIHdyaXRlci5vbndyaXRlID0gZGlkV3JpdGVGaWxlOwor
ICAgIH07Cit9CisKK2Z1bmN0aW9uIGRpZFdyaXRlRmlsZSgpCit7CisgICAgZGVidWcoIldyb3Rl
IHRvIGZpbGUuIik7CisgICAgZmlsZUVudHJ5LmZpbGUoZGlkR2V0RmlsZSwgZGlkRmFpbCk7Cit9
CisKK3ZhciBjbG9zZUV2ZW50OworCitmdW5jdGlvbiBkaWRHZXRGaWxlKGZpbGUpCit7CisgICAg
ZGVidWcoIkdvdCBGaWxlIG9iamVjdC4iKTsKKyAgICB2YXIgd3MgPSBuZXcgV2ViU29ja2V0KCJ3
czovLzEyNy4wLjAuMTo4ODgwL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtZmlsZS1ibG9iIik7
CisgICAgd3Mub25vcGVuID0gZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgd3Muc2VuZChmaWxl
KTsKKyAgICB9OworICAgIHdzLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsKKyAg
ICAgICAgdmFyIG1lc3NhZ2UgPSBldmVudC5kYXRhOworICAgICAgICBpZiAoc3RhcnRzV2l0aCht
ZXNzYWdlLCAiUEFTUyIpKQorICAgICAgICAgICAgdGVzdFBhc3NlZChtZXNzYWdlKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgdGVzdEZhaWxlZChtZXNzYWdlKTsKKyAgICB9OworICAgIHdz
Lm9uY2xvc2UgPSBmdW5jdGlvbihldmVudCkKKyAgICB7CisgICAgICAgIGNsb3NlRXZlbnQgPSBl
dmVudDsKKyAgICAgICAgc2hvdWxkQmVUcnVlKCJjbG9zZUV2ZW50Lndhc0NsZWFuIik7CisgICAg
ICAgIGVuZFRlc3QoKTsKKyAgICB9OworfQorCitmdW5jdGlvbiBkaWRGYWlsKGZpbGVFcnJvcikK
K3sKKyAgICB0ZXN0RmFpbGVkKCJGaWxlU3lzdGVtIEFQSSBvcGVyYXRpb24gZmFpbGVkOiBlcnJv
ciBjb2RlID0gIiArIGZpbGVFcnJvci5jb2RlKTsKKyAgICBlbmRUZXN0KCk7Cit9CisKK2Z1bmN0
aW9uIGVuZFRlc3QoKQoreworICAgIGlmIChmaWxlRW50cnkpIHsKKyAgICAgICAgZGVidWcoIkRl
bGV0aW5nIHRoZSBmaWxlLiIpOworICAgICAgICBmaWxlRW50cnkucmVtb3ZlKGZpbmlzaEpTVGVz
dCwgZmluaXNoSlNUZXN0KTsKKyAgICB9IGVsc2UKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7Cit9
CisKK3J1blRlc3QoKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi8uLi9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LXBv
c3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWZpbGUtYmxvYl93c2gucHkg
Yi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtZmlsZS1i
bG9iX3dzaC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYWE0NDA0NzFhZjgzYWIyNjI4Njc1MWMzZTE4ODgyZjQ4
NGRiNzhjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2Nr
ZXQvdGVzdHMvaHliaS9zZW5kLWZpbGUtYmxvYl93c2gucHkKQEAgLTAsMCArMSwyMiBAQAorZnJv
bSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IGNvbW1vbgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1w
b3J0IG1zZ3V0aWwKKworCitkZWYgd2ViX3NvY2tldF9kb19leHRyYV9oYW5kc2hha2UocmVxdWVz
dCk6CisgICAgcGFzcyAjIEFsd2F5cyBhY2NlcHQuCisKKworZGVmIHdlYl9zb2NrZXRfdHJhbnNm
ZXJfZGF0YShyZXF1ZXN0KToKKyAgICBleHBlY3RlZF9tZXNzYWdlcyA9IFsnSGVsbG8sIHdvcmxk
ISddCisKKyAgICBmb3IgdGVzdF9udW1iZXIsIGV4cGVjdGVkX21lc3NhZ2UgaW4gZW51bWVyYXRl
KGV4cGVjdGVkX21lc3NhZ2VzKToKKyAgICAgICAgIyBGSVhNRTogVXNlIGJldHRlciBBUEkuCisg
ICAgICAgIG9wY29kZSwgcGF5bG9hZCwgZmluYWwsIHVudXNlZF9yZXNlcnZlZDEsIHVudXNlZF9y
ZXNlcnZlZDIsIHVudXNlZF9yZXNlcnZlZDMgPSByZXF1ZXN0LndzX3N0cmVhbS5fcmVjZWl2ZV9m
cmFtZSgpCisgICAgICAgIGlmIG9wY29kZSA9PSBjb21tb24uT1BDT0RFX0JJTkFSWSBhbmQgcGF5
bG9hZCA9PSBleHBlY3RlZF9tZXNzYWdlIGFuZCBmaW5hbDoKKyAgICAgICAgICAgIG1zZ3V0aWwu
c2VuZF9tZXNzYWdlKHJlcXVlc3QsICdQQVNTOiBNZXNzYWdlICMlZC4nICUgdGVzdF9udW1iZXIp
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtc2d1dGlsLnNlbmRfbWVzc2FnZShyZXF1ZXN0
LCAnRkFJTDogTWVzc2FnZSAjJWQ6IFJlY2VpdmVkIHVuZXhwZWN0ZWQgZnJhbWU6IG9wY29kZSA9
ICVyLCBwYXlsb2FkID0gJXIsIGZpbmFsID0gJXInICUgKHRlc3RfbnVtYmVyLCBvcGNvZGUsIHBh
eWxvYWQsIGZpbmFsKSkKKworCitkZWYgYWxsX2Rpc3RpbmN0X2J5dGVzKCk6CisgICAgcmV0dXJu
ICcnLmpvaW4oW2NocihpKSBmb3IgaSBpbiB4cmFuZ2UoMjU2KV0pCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3dvcmtlcnMvcmVzb3VyY2Vz
L3NlbmQtYmxvYi5qcyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5
Ymkvd29ya2Vycy9yZXNvdXJjZXMvc2VuZC1ibG9iLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNlYTA1MDNhMDk2
MDIzNTJmMzkzMTkwMjYzNzk5ODI1MTAzMTEzYmYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3dvcmtlcnMvcmVzb3VyY2VzL3Nl
bmQtYmxvYi5qcwpAQCAtMCwwICsxLDUxIEBACitmdW5jdGlvbiBzdGFydHNXaXRoKHRhcmdldCwg
cHJlZml4KQoreworICAgIHJldHVybiB0YXJnZXQuaW5kZXhPZihwcmVmaXgpID09PSAwOworfQor
CitmdW5jdGlvbiBjcmVhdGVCbG9iQ29udGFpbmluZ0hlbGxvV29ybGQoKQoreworICAgIHZhciBi
dWlsZGVyID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7CisgICAgYnVpbGRlci5hcHBlbmQoIkhl
bGxvLCB3b3JsZCEiKTsKKyAgICByZXR1cm4gYnVpbGRlci5nZXRCbG9iKCk7Cit9CisKK2Z1bmN0
aW9uIGNyZWF0ZUVtcHR5QmxvYigpCit7CisgICAgdmFyIGJ1aWxkZXIgPSBuZXcgV2ViS2l0Qmxv
YkJ1aWxkZXIoKTsKKyAgICByZXR1cm4gYnVpbGRlci5nZXRCbG9iKCk7Cit9CisKK2Z1bmN0aW9u
IGNyZWF0ZUJsb2JDb250YWluaW5nQWxsRGlzdGluY3RCeXRlcygpCit7CisgICAgdmFyIGFycmF5
ID0gbmV3IFVpbnQ4QXJyYXkoMjU2KTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI1NjsgKytp
KQorICAgICAgICBhcnJheVtpXSA9IGk7CisgICAgdmFyIGJ1aWxkZXIgPSBuZXcgV2ViS2l0Qmxv
YkJ1aWxkZXIoKTsKKyAgICBidWlsZGVyLmFwcGVuZChhcnJheS5idWZmZXIpOworICAgIHJldHVy
biBidWlsZGVyLmdldEJsb2IoKTsKK30KKwordmFyIHVybCA9ICJ3czovLzEyNy4wLjAuMTo4ODgw
L3dlYnNvY2tldC90ZXN0cy9oeWJpL3dvcmtlcnMvcmVzb3VyY2VzL3NlbmQtYmxvYiI7Cit2YXIg
d3MgPSBuZXcgV2ViU29ja2V0KHVybCk7CisKK3dzLm9ub3BlbiA9IGZ1bmN0aW9uKCkKK3sKKyAg
ICB3cy5zZW5kKGNyZWF0ZUJsb2JDb250YWluaW5nSGVsbG9Xb3JsZCgpKTsKKyAgICB3cy5zZW5k
KGNyZWF0ZUVtcHR5QmxvYigpKTsKKyAgICB3cy5zZW5kKGNyZWF0ZUJsb2JDb250YWluaW5nQWxs
RGlzdGluY3RCeXRlcygpKTsKK307CisKK3dzLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KQor
eworICAgIHBvc3RNZXNzYWdlKGV2ZW50LmRhdGEpOworfTsKKword3Mub25jbG9zZSA9IGZ1bmN0
aW9uKGNsb3NlRXZlbnQpCit7CisgICAgaWYgKGNsb3NlRXZlbnQud2FzQ2xlYW4gPT09IHRydWUp
CisgICAgICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBjbG9zZUV2ZW50Lndhc0NsZWFuIGlzIHRydWUu
Iik7CisgICAgZWxzZQorICAgICAgICBwb3N0TWVzc2FnZSgiRkFJTDogY2xvc2VFdmVudC53YXND
bGVhbiBzaG91bGQgYmUgdHJ1ZSwgYnV0IHdhczogIiArIGNsb3NlRXZlbnQud2FzQ2xlYW4pOwor
ICAgIHBvc3RNZXNzYWdlKCJET05FIik7Cit9OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS93b3JrZXJzL3Jlc291cmNlcy9zZW5kLWJsb2Jf
d3NoLnB5IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS93b3Jr
ZXJzL3Jlc291cmNlcy9zZW5kLWJsb2Jfd3NoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAyNGUzZjRkMDc5NDVj
OTJjYWFiZGMwMzdlYzUwMDgyNGE0MmExYTIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3dvcmtlcnMvcmVzb3VyY2VzL3NlbmQt
YmxvYl93c2gucHkKQEAgLTAsMCArMSwyMSBAQAorZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0
IGNvbW1vbgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IG1zZ3V0aWwKKworCitkZWYgd2Vi
X3NvY2tldF9kb19leHRyYV9oYW5kc2hha2UocmVxdWVzdCk6CisgICAgcGFzcyAjIEFsd2F5cyBh
Y2NlcHQuCisKKworZGVmIHdlYl9zb2NrZXRfdHJhbnNmZXJfZGF0YShyZXF1ZXN0KToKKyAgICBl
eHBlY3RlZF9tZXNzYWdlcyA9IFsnSGVsbG8sIHdvcmxkIScsICcnLCBhbGxfZGlzdGluY3RfYnl0
ZXMoKV0KKworICAgIGZvciB0ZXN0X251bWJlciwgZXhwZWN0ZWRfbWVzc2FnZSBpbiBlbnVtZXJh
dGUoZXhwZWN0ZWRfbWVzc2FnZXMpOgorICAgICAgICBtZXNzYWdlID0gbXNndXRpbC5yZWNlaXZl
X21lc3NhZ2UocmVxdWVzdCkKKyAgICAgICAgaWYgdHlwZShtZXNzYWdlKSA9PSBzdHIgYW5kIG1l
c3NhZ2UgPT0gZXhwZWN0ZWRfbWVzc2FnZToKKyAgICAgICAgICAgIG1zZ3V0aWwuc2VuZF9tZXNz
YWdlKHJlcXVlc3QsICdQQVNTOiBNZXNzYWdlICMlZC4nICUgdGVzdF9udW1iZXIpCisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICBtc2d1dGlsLnNlbmRfbWVzc2FnZShyZXF1ZXN0LCAnRkFJTDog
TWVzc2FnZSAjJWQ6IFJlY2VpdmVkIHVuZXhwZWN0ZWQgbWVzc2FnZTogJXInICUgKHRlc3RfbnVt
YmVyLCBtZXNzYWdlKSkKKworCitkZWYgYWxsX2Rpc3RpbmN0X2J5dGVzKCk6CisgICAgcmV0dXJu
ICcnLmpvaW4oW2NocihpKSBmb3IgaSBpbiB4cmFuZ2UoMjU2KV0pCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3dvcmtlcnMvc2VuZC1ibG9i
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5
Ymkvd29ya2Vycy9zZW5kLWJsb2ItZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYzM2JiN2UzOWZm
NTU1NmEzM2ExMTQ4ZjUxNDgwOWNlNTRjZjY5NjgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3dvcmtlcnMvc2VuZC1ibG9iLWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDEzIEBACitXZWJTb2NrZXQ6IFNlbmQgQmxvYnMgaW4gV2Vi
IFdvcmtlcnMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIg
bWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworUEFTUyBQQVNTOiBNZXNz
YWdlICMwLgorUEFTUyBQQVNTOiBNZXNzYWdlICMxLgorUEFTUyBQQVNTOiBNZXNzYWdlICMyLgor
UEFTUyBQQVNTOiBjbG9zZUV2ZW50Lndhc0NsZWFuIGlzIHRydWUuCitET05FCitQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS93b3JrZXJzL3NlbmQtYmxv
Yi5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS93b3Jr
ZXJzL3NlbmQtYmxvYi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE1NzQ2ZWIyN2Y0NzFiMjA0YWVlNjNhOWI1
MjE2MDUxMDhjYTQzYjgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3dlYnNvY2tldC90ZXN0cy9oeWJpL3dvcmtlcnMvc2VuZC1ibG9iLmh0bWwKQEAgLTAsMCArMSw0
MCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNo
ZWV0IiBocmVmPSIuLi8uLi8uLi8uLi8uLi9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LXN0eWxl
LmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vLi4vanMtdGVzdC1yZXNvdXJjZXMvanMt
dGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJkZXNjcmlw
dGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4
dC9qYXZhc2NyaXB0Ij4KK2Rlc2NyaXB0aW9uKCJXZWJTb2NrZXQ6IFNlbmQgQmxvYnMgaW4gV2Vi
IFdvcmtlcnMuIik7CisKK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK2lmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIub3ZlcnJpZGVQ
cmVmZXJlbmNlKCJXZWJLaXRIaXhpZTc2V2ViU29ja2V0UHJvdG9jb2xFbmFibGVkIiwgMCk7CisK
K2Z1bmN0aW9uIHN0YXJ0c1dpdGgoc3RyLCBwcmVmaXgpCit7CisgICAgcmV0dXJuIHN0ci5pbmRl
eE9mKHByZWZpeCkgPT0gMDsKK30KKwordmFyIHdvcmtlciA9IG5ldyBXb3JrZXIoInJlc291cmNl
cy9zZW5kLWJsb2IuanMiKTsKK3dvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZXZlbnQpCit7
CisgICAgdmFyIG1lc3NhZ2UgPSBldmVudC5kYXRhOworICAgIGlmIChzdGFydHNXaXRoKG1lc3Nh
Z2UsICJQQVNTIikpCisgICAgICAgIHRlc3RQYXNzZWQobWVzc2FnZSk7CisgICAgZWxzZSBpZiAo
c3RhcnRzV2l0aChtZXNzYWdlLCAiRkFJTCIpKQorICAgICAgICB0ZXN0RmFpbGVkKG1lc3NhZ2Up
CisgICAgZWxzZQorICAgICAgICBkZWJ1ZyhtZXNzYWdlKTsKKyAgICBpZiAobWVzc2FnZSA9PT0g
IkRPTkUiKQorICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKK307CisKK3ZhciBzdWNjZXNzZnVsbHlQ
YXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vLi4vanMt
dGVzdC1yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkIGIvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKaW5kZXggZTliNmYxYjAxMDAxNWI1ZDc5ZmQ1ZjY2
ZjY4OWRlODMzZWJhNTQ0Yi4uNzFlYjFiZDhlMmQyZjk1OTVhODU1Mjc1NTM4MWNhOWZhNGVkMWE4
MiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKKysrIGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKQEAgLTM2Niw2ICszNjYsOCBAQCBmYXN0L2Zp
bGVzeXN0ZW0KIGh0dHAvdGVzdHMvZmlsZXN5c3RlbQogaHR0cC90ZXN0cy9sb2NhbC9maWxlYXBp
CiBodHRwL3Rlc3RzL3NlY3VyaXR5L2ZpbGVzeXN0ZW0taWZyYW1lLWZyb20tcmVtb3RlLmh0bWwK
K2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1maWxlLWJsb2IuaHRtbAoraHR0
cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWZpbGUtYmxvYi1mYWlsLmh0bWwKIAog
IyBSZXF1aXJlcyBXZWJQIHN1cHBvcnQuCiBmYXN0L2ltYWdlcy93ZWJwLWltYWdlLWRlY29kaW5n
Lmh0bWwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkIGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQKaW5kZXggMTU2ZGJjY2FjZDc5NmU5YzNlMzJk
OTBmZWFlM2NkMWJiZjVjZjVmNS4uOTY5MzkxOTAxNTY5YjkxMDZmODQzYmNjNzUzZWYwMTk2MDA0
M2JhZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQKKysrIGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQKQEAgLTI3Nyw2ICsyNzcsOCBAQCBodHRw
L3Rlc3RzL21lZGlhL3ZpZGVvLWJ1ZmZlcmVkLmh0bWwKIGZhc3QvZmlsZXN5c3RlbQogaHR0cC90
ZXN0cy9maWxlc3lzdGVtCiBodHRwL3Rlc3RzL3NlY3VyaXR5L2ZpbGVzeXN0ZW0taWZyYW1lLWZy
b20tcmVtb3RlLmh0bWwKK2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1maWxl
LWJsb2IuaHRtbAoraHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWZpbGUtYmxv
Yi1mYWlsLmh0bWwKIAogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDYyMjMKICMgVGhlIFdlYktpdCBwbHVnaW4gaW1wbGVtZW50YXRpb24gZG9lcyBub3Qgc3VwcG9y
dCBpZnJhbWUgc2hpbXMuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lw
cGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZAppbmRleCAzNGE0Y2ZkMjI3NzA5
NGQ2OWZiYTFiMTIwN2Y3NTU3NTE3OTIyYmJjLi45YmNkY2QyYzg5YTkwNDEyMThlOGQwZjhiZjA2
NmMxYmYwYjYzZjMwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVk
CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQKQEAgLTk5LDYgKzk5LDggQEAg
c3ZnL3dlYmFyY2hpdmUKIGZhc3QvZmlsZXN5c3RlbQogaHR0cC90ZXN0cy9maWxlc3lzdGVtCiBo
dHRwL3Rlc3RzL3NlY3VyaXR5L2ZpbGVzeXN0ZW0taWZyYW1lLWZyb20tcmVtb3RlLmh0bWwKK2h0
dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1maWxlLWJsb2IuaHRtbAoraHR0cC90
ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWZpbGUtYmxvYi1mYWlsLmh0bWwKIAogIyBF
TkFCTEUoUVVPVEEpIGlzIGRpc2FibGVkLgogc3RvcmFnZS9zdG9yYWdlaW5mby1xdWVyeS11c2Fn
ZS5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZCBiL0xh
eW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCmluZGV4IDFlNGNjOGNhYTcwZDkxY2I4Njlj
YjI3MGIzMThjNjVjMzc2MDVlNjguLjNkM2I2NGY5MDc2NzUxYmNiNDBiZDdhZjUwM2U1ZjEzZDY4
ZDY4ZjUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCisrKyBi
L0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCkBAIC0xMjAyLDYgKzEyMDIsOCBAQCBm
YXN0L3BhcnNlci9wcmUtaHRtbDUtcGFyc2VyLXF1aXJrcy5odG1sCiBmYXN0L2ZpbGVzeXN0ZW0K
IGh0dHAvdGVzdHMvZmlsZXN5c3RlbQogaHR0cC90ZXN0cy9zZWN1cml0eS9maWxlc3lzdGVtLWlm
cmFtZS1mcm9tLXJlbW90ZS5odG1sCitodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3Nl
bmQtZmlsZS1ibG9iLmh0bWwKK2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1m
aWxlLWJsb2ItZmFpbC5odG1sCiAKICMgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om5vZGVzRnJvbVJl
Y3QgaXMgbm90IHN1cHBvcnRlZC4KIGZhc3QvZG9tL25vZGVzRnJvbVJlY3QtYmFzaWMuaHRtbApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCmluZGV4IGQyY2NlMjZiNDJiOGJmMzdhNTM0NWYyYThkNTU0ZTNmMDQ1MWQxNmYuLmQ5
ZDc5YzE4MDdjMmRlM2Q2OTQxYTc2NWQ4NmYxZDk3NTZmNmU0MGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NCBAQAorMjAxMS0wOS0wMiAgWXV0YSBLaXRhbXVyYSAgPHl1dGFrQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBXZWJTb2NrZXQ6IFNlbmQgQmxvYiBhcyBXZWJTb2NrZXQgYmluYXJ5IG1l
c3NhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3
NDY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVz
dHM6IGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2hpeGllNzYvc2VuZC1lbXB0eS5odG1sCisg
ICAgICAgICAgICAgICBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oaXhpZTc2L3NlbmQtb2Jq
ZWN0Lmh0bWwKKyAgICAgICAgICAgICAgIGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkv
c2VuZC1ibG9iLmh0bWwKKyAgICAgICAgICAgICAgIGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3Rz
L2h5Ymkvc2VuZC1lbXB0eS5odG1sCisgICAgICAgICAgICAgICBodHRwL3Rlc3RzL3dlYnNvY2tl
dC90ZXN0cy9oeWJpL3NlbmQtZmlsZS1ibG9iLWZhaWwuaHRtbAorICAgICAgICAgICAgICAgaHR0
cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWZpbGUtYmxvYi5odG1sCisgICAgICAg
ICAgICAgICBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3dvcmtlcnMvc2VuZC1ibG9i
Lmh0bWwKKyAgICAgICAgICAgICAgIGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5YmkvYnVm
ZmVyZWRBbW91bnQtYWZ0ZXItY2xvc2UuaHRtbCAodXBkYXRlZCkKKworICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTV2ViU29ja2V0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViU29j
a2V0OjpzZW5kKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhXZWJTb2NrZXRDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhXZWJTb2NrZXQ6OnNlbmRDYWxsYmFjayk6Cisg
ICAgICAgICogd2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oOgorICAgICAg
ICAqIHdlYnNvY2tldHMvV2ViU29ja2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tl
dDo6c2VuZCk6CisgICAgICAgICogd2Vic29ja2V0cy9XZWJTb2NrZXQuaDoKKyAgICAgICAgKiB3
ZWJzb2NrZXRzL1dlYlNvY2tldC5pZGw6CisgICAgICAgIEZpeGluZyBjb2RlIGdlbmVyYXRvciBk
aWQgbm90IHNvdW5kIGVhc3ksIGJlY2F1c2UgdGhlcmUgYXJlIHNvbWUgY2xhc3NlcyBkZXBlbmRp
bmcgb24KKyAgICAgICAgYnJva2VuIGJlaGF2aW9yIG9mIGN1cnJlbnQgY29kZSBnZW5lcmF0b3Ig
KG9uZSBzdWNoIGV4YW1wbGUgaXMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKS4KKyAgICAgICAg
QXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCwgbmV3IGN1c3RvbSBoYW5kbGVycyBmb3Igc2VuZCgp
IGFyZSBhZGRlZC4KKyAgICAgICAgKiB3ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Q2hhbm5lbDo6c2VuZCk6CisgICAgICAgICogd2Vi
c29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmg6CisgICAgICAgICogd2Vic29ja2V0cy9Xb3JrZXJU
aHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJU
aHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6c2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpXb3Jr
ZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6UGVlcjo6c2VuZCk6CisgICAgICAgIChXZWJD
b3JlOjpXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6bWFpblRocmVhZFNlbmRCbG9i
KToKKyAgICAgICAgQSBCbG9iIGNhbiBiZSBkZXNlcmlhbGl6ZWQgZnJvbSB1cmwsIHR5cGUgYW5k
IHNpemUuCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bDo6QnJpZGdlOjpzZW5kKToKKyAgICAgICAgS1VSTCwgU3RyaW5nIGFuZCBsb25nIGxvbmcgKGNv
cnJlc3BvbmRpbmcgdG8gdXJsLCB0eXBlIGFuZCBzaXplLCByZXNwZWN0aXZlbHkpIGNhbiBiZSBw
YXNzZWQKKyAgICAgICAgc2FmZWx5IGFjcm9zcyB0aHJlYWRzLgorICAgICAgICAqIHdlYnNvY2tl
dHMvV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaDoKKwogMjAxMS0wOS0wMSAgVGFr
YXNoaSBUb3lvc2hpbWEgIDx0b3lvc2hpbUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW1dlYlNv
Y2tldF0gSW1wbGVtZW50IFdlYlNvY2tldDo6Y2xvc2UoKSBjb2RlIGFuZCByZWFzb24gaGFuZGxp
bmcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYlNvY2tldEN1
c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYlNvY2tldEN1c3RvbS5j
cHAKaW5kZXggNmIzNTk4YjJkZmZhYWIzNzI4NjUxZjBiNWM2NjFkZTA2MTAyNmNmZi4uNGY5MmY0
MDdiZTg1OTI5MmUyZTE4ZGIyZjk1ZWM5ZjQ4ZWUyNWU4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q3VzdG9tLmNwcApAQCAtMzYsOCArMzYsOSBAQAog
I2luY2x1ZGUgIkpTV2ViU29ja2V0LmgiCiAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0j
aW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIkpTQmxvYi5oIgogI2luY2x1ZGUgIkpTRXZlbnRM
aXN0ZW5lci5oIgorI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJXZWJTb2NrZXQuaCIKICNp
bmNsdWRlICJXZWJTb2NrZXRDaGFubmVsLmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgpA
QCAtODgsNiArODksMzAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1dlYlNvY2tl
dENvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1dlYlNvY2tldChFeGVjU3QKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKENSRUFURV9ET01fV1JBUFBFUihleGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9i
YWxPYmplY3QoKSwgV2ViU29ja2V0LCB3ZWJTb2NrZXQuZ2V0KCkpKTsKIH0KIAorSlNWYWx1ZSBK
U1dlYlNvY2tldDo6c2VuZChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKCFleGVjLT5hcmd1
bWVudENvdW50KCkpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVN5bnRh
eEVycm9yKGV4ZWMsICJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpKTsKKworICAgIEpTVmFsdWUgbWVz
c2FnZSA9IGV4ZWMtPmFyZ3VtZW50KDApOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAg
IGJvb2wgcmVzdWx0OworICAgIGlmIChtZXNzYWdlLmluaGVyaXRzKCZKU0Jsb2I6OnNfaW5mbykp
CisgICAgICAgIHJlc3VsdCA9IGltcGwoKS0+c2VuZCh0b0Jsb2IobWVzc2FnZSksIGVjKTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgU3RyaW5nIHN0cmluZ01lc3NhZ2UgPSB1c3RyaW5nVG9TdHJpbmco
bWVzc2FnZS50b1N0cmluZyhleGVjKSk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICByZXN1bHQgPSBp
bXBsKCktPnNlbmQoc3RyaW5nTWVzc2FnZSwgZWMpOworICAgIH0KKyAgICBpZiAoZWMpIHsKKyAg
ICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CisgICAgfQorCisgICAgcmV0dXJuIGpzQm9vbGVhbihyZXN1bHQpOworfQorCiBKU1Zh
bHVlIEpTV2ViU29ja2V0OjpjbG9zZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBpbXBsZW1lbnQgW0NsYW1wXSBmb3IgSURMIGJpbmRpbmcgY29kZSBnZW5lcmF0
b3IsIGFuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
V2ViU29ja2V0Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OFdlYlNvY2tldEN1c3RvbS5jcHAKaW5kZXggZDdkZmExMDlmNTY1YmFhYzJkNjFmZjFiY2JjYTRk
ZTI3MDJlZWQxNy4uZDIzNzA0NzczODk4MjYxY2M1MDA0NjIzYmI2NTY4YmZlMjYxNGFiYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViU29ja2V0Q3Vz
dG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJTb2Nr
ZXRDdXN0b20uY3BwCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNs
dWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4Qmxv
Yi5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKICNpbmNsdWRlICJWOFV0aWxpdGllcy5oIgogI2lu
Y2x1ZGUgIldlYlNvY2tldC5oIgpAQCAtMTExLDYgKzExMiwzNCBAQCB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gVjhXZWJTb2NrZXQ6OmNvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50
cyYgYXJncwogICAgIHJldHVybiBhcmdzLkhvbGRlcigpOwogfQogCit2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gVjhXZWJTb2NrZXQ6OnNlbmRDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdz
KQoreworICAgIElOQ19TVEFUUygiRE9NLldlYlNvY2tldC5zZW5kKCkiKTsKKworICAgIGlmICgh
YXJncy5MZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIk5vdCBlbm91Z2ggYXJn
dW1lbnRzIiwgVjhQcm94eTo6U3ludGF4RXJyb3IpOworCisgICAgV2ViU29ja2V0KiB3ZWJTb2Nr
ZXQgPSBWOFdlYlNvY2tldDo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CisgICAgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IG1lc3NhZ2UgPSBhcmdzWzBdOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OworICAgIGJvb2wgcmVzdWx0OworICAgIGlmIChWOEJsb2I6Okhhc0luc3RhbmNlKG1lc3NhZ2Up
KSB7CisgICAgICAgIEJsb2IqIGJsb2IgPSBWOEJsb2I6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6
Ok9iamVjdD46OkNhc3QobWVzc2FnZSkpOworICAgICAgICBBU1NFUlQoYmxvYik7CisgICAgICAg
IHJlc3VsdCA9IHdlYlNvY2tldC0+c2VuZChibG9iLCBlYyk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgdjg6OlRyeUNhdGNoIHRyeUNhdGNoOworICAgICAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+
IHN0cmluZ01lc3NhZ2UgPSBtZXNzYWdlLT5Ub1N0cmluZygpOworICAgICAgICBpZiAodHJ5Q2F0
Y2guSGFzQ2F1Z2h0KCkpCisgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcih0cnlDYXRjaC5F
eGNlcHRpb24oKSk7CisgICAgICAgIHJlc3VsdCA9IHdlYlNvY2tldC0+c2VuZCh0b1dlYkNvcmVT
dHJpbmcobWVzc2FnZSksIGVjKTsKKyAgICB9CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcihlYyk7CisKKyAgICByZXR1cm4gdjhCb29sZWFuKHJlc3VsdCk7Cit9CisKIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBWOFdlYlNvY2tldDo6Y2xvc2VDYWxsYmFjayhjb25zdCB2ODo6
QXJndW1lbnRzJiBhcmdzKQogewogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaW1wbGVtZW50IFtD
bGFtcF0gZm9yIElETCBiaW5kaW5nIGNvZGUgZ2VuZXJhdG9yLCBhbmQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaCBiL1Nv
dXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaAppbmRl
eCAwOWY4MWI1MDdhMTAwMWQ2ZTdlYTU5MTcyMTE2ZWE5ZTlmZjdiZDk3Li5jYTBiMzcyYWQ5Y2Yy
YzAxMDdjYzg2NDgwMGEzN2U2YmQ0MjdmZjMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93
ZWJzb2NrZXRzL1RocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvd2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oCkBAIC0zOSw2ICszOSw3
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQmxvYjsKIGNsYXNzIEtVUkw7CiBj
bGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xhc3MgV2ViU29ja2V0Q2hhbm5lbENsaWVu
dDsKQEAgLTUzLDYgKzU0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBjb25uZWN0KGNv
bnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHByb3RvY29sKSA9IDA7CiAgICAgdmlydHVhbCBTdHJp
bmcgc3VicHJvdG9jb2woKSA9IDA7IC8vIFdpbGwgYmUgYXZhaWxhYmxlIGFmdGVyIGRpZENvbm5l
Y3QoKSBjYWxsYmFjayBpcyBpbnZva2VkLgogICAgIHZpcnR1YWwgYm9vbCBzZW5kKGNvbnN0IFN0
cmluZyYgbWVzc2FnZSkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBzZW5kKGNvbnN0IEJsb2ImKSA9
IDA7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGJ1ZmZlcmVkQW1vdW50KCkgY29uc3QgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZShpbnQgY29kZSwgY29uc3QgU3RyaW5nJiByZWFzb24p
ID0gMDsKICAgICAvLyBMb2cgdGhlIHJlYXNvbiB0ZXh0IGFuZCBjbG9zZSB0aGUgY29ubmVjdGlv
bi4gV2lsbCBjYWxsIGRpZENsb3NlKCkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJz
b2NrZXRzL1dlYlNvY2tldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tl
dC5jcHAKaW5kZXggODhmMmVlZGQ4ZmIyNDBhYmM2YTFlMThjMzQ4ZGYxYTU5ZjBlOWRiYy4uZTc3
MWI3OTMyYjMxODJkNWIyMjA4ZTNkYjI0ODI3NGQwYmUyNzkwMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dl
YnNvY2tldHMvV2ViU29ja2V0LmNwcApAQCAtMjY1LDYgKzI2NSwyNCBAQCBib29sIFdlYlNvY2tl
dDo6c2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIHJl
dHVybiBtX2NoYW5uZWwtPnNlbmQobWVzc2FnZSk7CiB9CiAKK2Jvb2wgV2ViU29ja2V0OjpzZW5k
KEJsb2IqIGJpbmFyeURhdGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIExPRyhOZXR3b3Jr
LCAiV2ViU29ja2V0ICVwIHNlbmQgYmxvYiAlcyIsIHRoaXMsIGJpbmFyeURhdGEtPnVybCgpLnN0
cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIEFTU0VSVChiaW5hcnlEYXRhKTsKKyAgICBpZiAo
bV91c2VIaXhpZTc2UHJvdG9jb2wpCisgICAgICAgIHJldHVybiBzZW5kKCJbb2JqZWN0IEJsb2Jd
IiwgZWMpOworICAgIGlmIChtX3N0YXRlID09IENPTk5FQ1RJTkcpIHsKKyAgICAgICAgZWMgPSBJ
TlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAo
bV9zdGF0ZSA9PSBDTE9TSU5HIHx8IG1fc3RhdGUgPT0gQ0xPU0VEKSB7CisgICAgICAgIG1fYnVm
ZmVyZWRBbW91bnRBZnRlckNsb3NlICs9IGJpbmFyeURhdGEtPnNpemUoKSArIGdldEZyYW1pbmdP
dmVyaGVhZChiaW5hcnlEYXRhLT5zaXplKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIEFTU0VSVChtX2NoYW5uZWwpOworICAgIHJldHVybiBtX2NoYW5uZWwtPnNlbmQoKmJp
bmFyeURhdGEpOworfQorCiB2b2lkIFdlYlNvY2tldDo6Y2xvc2UoaW50IGNvZGUsIGNvbnN0IFN0
cmluZyYgcmVhc29uLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoY29kZSA9PSBXZWJT
b2NrZXRDaGFubmVsOjpDbG9zZUV2ZW50Q29kZU5vdFNwZWNpZmllZCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmggYi9Tb3VyY2UvV2ViQ29yZS93ZWJz
b2NrZXRzL1dlYlNvY2tldC5oCmluZGV4IDA0YzI3YzM1Y2ZkNDAyNjM2OTFiNWZjYzk3NjMyNTU3
OWE1NWUxOTMuLjNjZDlkYzYxZjFjNDEzYjhlNWZhZDZkZDg3Y2IwNDBkNDM0NGFiNjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuaApAQCAtNDYsNiArNDYsNyBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEJsb2I7CiBjbGFzcyBUaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbDsKIAogY2xhc3MgV2ViU29ja2V0IDogcHVibGljIFJlZkNvdW50ZWQ8V2ViU29ja2V0
PiwgcHVibGljIEV2ZW50VGFyZ2V0LCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0LCBwdWJsaWMgV2Vi
U29ja2V0Q2hhbm5lbENsaWVudCB7CkBAIC02Nyw2ICs2OCw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IGNvbm5lY3QoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwcm90b2Nv
bHMsIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIGJvb2wgc2VuZChjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBib29sIHNlbmQoQmxvYiogYmluYXJ5RGF0YSwgRXhj
ZXB0aW9uQ29kZSYpOwogCiAgICAgdm9pZCBjbG9zZShpbnQgY29kZSwgY29uc3QgU3RyaW5nJiBy
ZWFzb24sIEV4Y2VwdGlvbkNvZGUmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2Vi
c29ja2V0cy9XZWJTb2NrZXQuaWRsIGIvU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2Nr
ZXQuaWRsCmluZGV4IDkzNmU2MDNmMzY1NzYzMDRjNGZiNjk1ZjIxZGM4ZDFiYjkyMDg4NDIuLjBk
YzIzZTdmN2EyODFiODlkMDQ5YTNlMGQxMzEyOTE0OGNkZjliODUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS93
ZWJzb2NrZXRzL1dlYlNvY2tldC5pZGwKQEAgLTYzLDcgKzYzLDE1IEBAIG1vZHVsZSB3ZWJzb2Nr
ZXRzIHsKICAgICAgICAgYXR0cmlidXRlIFtDb252ZXJ0TnVsbFN0cmluZ1RvPVVuZGVmaW5lZF0g
RE9NU3RyaW5nIGJpbmFyeVR5cGUKICAgICAgICAgICAgIHNldHRlciByYWlzZXMoRE9NRXhjZXB0
aW9uKTsKIAotICAgICAgICBbUmVxdWlyZXNBbGxBcmd1bWVudHNdIGJvb2xlYW4gc2VuZChpbiBE
T01TdHJpbmcgZGF0YSkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIC8vIEZJWE1FOiBV
c2Ugb3ZlcmxvYWRpbmcgcHJvdmlkZWQgYnkgb3VyIElETCBjb2RlIGdlbmVyYXRvci4KKyAgICAg
ICAgLy8gQWNjb3JkaW5nIHRvIFdlYiBJREwgc3BlY2lmaWNhdGlvbiwgb3ZlcmxvYWRlZCBmdW5j
dGlvbiB3aXRoIERPTVN0cmluZyBhcmd1bWVudAorICAgICAgICAvLyBzaG91bGQgYWNjZXB0IGFu
eXRoaW5nIHRoYXQgY2FuIGJlIGNvbnZlcnRlZCB0byBhIHN0cmluZyAoaW5jbHVkaW5nIG51bWJl
cnMsCisgICAgICAgIC8vIGJvb2xlYW5zLCBudWxsLCB1bmRlZmluZWQgYW5kIG9iamVjdHMgZXhj
ZXB0IEJsb2IpLiBDdXJyZW50IGNvZGUgZ2VuZXJhdG9yIGRvZXMKKyAgICAgICAgLy8gbm90IGhh
bmRsZSB0aGlzIHJ1bGUgY29ycmVjdGx5LgorICAgICAgICAvLyBbUmVxdWlyZXNBbGxBcmd1bWVu
dHNdIGJvb2xlYW4gc2VuZChpbiBCbG9iIGRhdGEpIHJhaXNlcyhET01FeGNlcHRpb24pOworICAg
ICAgICAvLyBbUmVxdWlyZXNBbGxBcmd1bWVudHNdIGJvb2xlYW4gc2VuZChpbiBET01TdHJpbmcg
ZGF0YSkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIFtDdXN0b21dIGJvb2xlYW4gc2Vu
ZChpbiBET01TdHJpbmcgZGF0YSkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisKICAgICAgICAgLy8g
RklYTUU6IEltcGxlbWVudCBhbmQgYXBwbHkgW0NsYW1wXSBhdHRyaWJ1dGUgaW5zdGVhZCBvZiBb
Q3VzdG9tXS4KICAgICAgICAgW0N1c3RvbV0gdm9pZCBjbG9zZShpbiBbT3B0aW9uYWxdIHVuc2ln
bmVkIHNob3J0IGNvZGUsIGluIFtPcHRpb25hbF0gRE9NU3RyaW5nIHJlYXNvbikgcmFpc2VzKERP
TUV4Y2VwdGlvbik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV2Vi
U29ja2V0Q2hhbm5lbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldENo
YW5uZWwuY3BwCmluZGV4IDIwMDdlNmRiODM4NWZhNmYzNjZkYWJiMjRmMjE3NzVkYTM0ZGU4ZWUu
LmFlNWMxYWM4ZGM5ZDUzMzk0MzU4NWYxZGQ1NDg3ZTZiMmQyZDhkNTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmNwcApAQCAtMTcwLDYgKzE3MCwx
NCBAQCBib29sIFdlYlNvY2tldENoYW5uZWw6OnNlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQog
ICAgIHJldHVybiB0cnVlOwogfQogCitib29sIFdlYlNvY2tldENoYW5uZWw6OnNlbmQoY29uc3Qg
QmxvYiYgYmluYXJ5RGF0YSkKK3sKKyAgICBMT0coTmV0d29yaywgIldlYlNvY2tldENoYW5uZWwg
JXAgc2VuZCBibG9iICVzIiwgdGhpcywgYmluYXJ5RGF0YS51cmwoKS5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpKTsKKyAgICBBU1NFUlQoIW1fdXNlSGl4aWU3NlByb3RvY29sKTsKKyAgICBlbnF1ZXVl
QmxvYkZyYW1lKE9wQ29kZUJpbmFyeSwgYmluYXJ5RGF0YSk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKIHVuc2lnbmVkIGxvbmcgV2ViU29ja2V0Q2hhbm5lbDo6YnVmZmVyZWRBbW91bnQoKSBjb25z
dAogewogICAgIExPRyhOZXR3b3JrLCAiV2ViU29ja2V0Q2hhbm5lbCAlcCBidWZmZXJlZEFtb3Vu
dCIsIHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2Nr
ZXRDaGFubmVsLmggYi9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwu
aAppbmRleCA5NzAzMTYyM2NjMjY2ZTZkYWFkZTcyNTFiZGUxMTU3NjEyM2I2NTQ5Li4zZTg5ZTg1
Yzk4ZTExMDZhMzNiN2I1M2M0NTk3MTRmOTMzODM0ODdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93
ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuaApAQCAtNjYsNiArNjYsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIGNvbm5lY3QoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgcHJvdG9j
b2wpOwogICAgIHZpcnR1YWwgU3RyaW5nIHN1YnByb3RvY29sKCk7CiAgICAgdmlydHVhbCBib29s
IHNlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2VuZChjb25z
dCBCbG9iJik7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGJ1ZmZlcmVkQW1vdW50KCkgY29u
c3Q7CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlKGludCBjb2RlLCBjb25zdCBTdHJpbmcmIHJlYXNv
bik7IC8vIFN0YXJ0IGNsb3NpbmcgaGFuZHNoYWtlLgogICAgIHZpcnR1YWwgdm9pZCBmYWlsKGNv
bnN0IFN0cmluZyYgcmVhc29uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tl
dHMvV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwIGIvU291cmNlL1dlYkNvcmUv
d2Vic29ja2V0cy9Xb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAKaW5kZXggNDQ5
ODhmNjU2MmIxMjQyMWEwZjQwMDcwNGViYzA3NjBlYmIwMjRkZS4uNjA0NjQ1YWQ2NjRmN2ZmMGE0
MjI1OWExNTBhNDlmODUyN2NiMzljMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2Vic29j
a2V0cy9Xb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvd2Vic29ja2V0cy9Xb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAKQEAg
LTM0LDYgKzM0LDcgQEAKIAogI2luY2x1ZGUgIldvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFu
bmVsLmgiCiAKKyNpbmNsdWRlICJCbG9iLmgiCiAjaW5jbHVkZSAiQ3Jvc3NUaHJlYWRUYXNrLmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25D
b250ZXh0LmgiCkBAIC04Nyw2ICs4OCwxMyBAQCBib29sIFdvcmtlclRocmVhZGFibGVXZWJTb2Nr
ZXRDaGFubmVsOjpzZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKICAgICByZXR1cm4gbV9icmlk
Z2UtPnNlbmQobWVzc2FnZSk7CiB9CiAKK2Jvb2wgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENo
YW5uZWw6OnNlbmQoY29uc3QgQmxvYiYgYmluYXJ5RGF0YSkKK3sKKyAgICBpZiAoIW1fYnJpZGdl
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1fYnJpZGdlLT5zZW5kKGJpbmFy
eURhdGEpOworfQorCiB1bnNpZ25lZCBsb25nIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFu
bmVsOjpidWZmZXJlZEFtb3VudCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2JyaWRnZSkKQEAgLTE3
Miw2ICsxODAsMTUgQEAgdm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6UGVl
cjo6c2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiAgICAgbV9sb2FkZXJQcm94eS5wb3N0VGFz
a0Zvck1vZGVUb1dvcmtlckNvbnRleHQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZ3b3JrZXJDb250ZXh0
RGlkU2VuZCwgbV93b3JrZXJDbGllbnRXcmFwcGVyLCBzZW50KSwgbV90YXNrTW9kZSk7CiB9CiAK
K3ZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OlBlZXI6OnNlbmQoY29uc3Qg
QmxvYiYgYmluYXJ5RGF0YSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGlm
ICghbV9tYWluV2ViU29ja2V0Q2hhbm5lbCB8fCAhbV93b3JrZXJDbGllbnRXcmFwcGVyKQorICAg
ICAgICByZXR1cm47CisgICAgYm9vbCBzZW50ID0gbV9tYWluV2ViU29ja2V0Q2hhbm5lbC0+c2Vu
ZChiaW5hcnlEYXRhKTsKKyAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2Vy
Q29udGV4dChjcmVhdGVDYWxsYmFja1Rhc2soJndvcmtlckNvbnRleHREaWRTZW5kLCBtX3dvcmtl
ckNsaWVudFdyYXBwZXIsIHNlbnQpLCBtX3Rhc2tNb2RlKTsKK30KKwogc3RhdGljIHZvaWQgd29y
a2VyQ29udGV4dERpZEdldEJ1ZmZlcmVkQW1vdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIFBhc3NSZWZQdHI8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVy
PiB3b3JrZXJDbGllbnRXcmFwcGVyLCB1bnNpZ25lZCBsb25nIGJ1ZmZlcmVkQW1vdW50KQogewog
ICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwgY29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpOwpA
QCAtMzU4LDYgKzM3NSwxNiBAQCB2b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVs
OjptYWluVGhyZWFkU2VuZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjbwogICAgIHBlZXItPnNl
bmQobWVzc2FnZSk7CiB9CiAKK3ZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6
Om1haW5UaHJlYWRTZW5kQmxvYihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQZWVy
KiBwZWVyLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdHlwZSwgbG9uZyBsb25nIHNp
emUpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlRfVU5VU0VEKGNv
bnRleHQsIGNvbnRleHQtPmlzRG9jdW1lbnQoKSk7CisgICAgQVNTRVJUKHBlZXIpOworCisgICAg
UmVmUHRyPEJsb2I+IGJsb2IgPSBCbG9iOjpjcmVhdGUodXJsLCB0eXBlLCBzaXplKTsKKyAgICBw
ZWVyLT5zZW5kKCpibG9iKTsKK30KKwogYm9vbCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hh
bm5lbDo6QnJpZGdlOjpzZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKICAgICBpZiAoIW1f
d29ya2VyQ2xpZW50V3JhcHBlcikKQEAgLTM3MSw2ICszOTgsMTkgQEAgYm9vbCBXb3JrZXJUaHJl
YWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6QnJpZGdlOjpzZW5kKGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSkKICAgICByZXR1cm4gY2xpZW50V3JhcHBlciAmJiBjbGllbnRXcmFwcGVyLT5zZW50KCk7CiB9
CiAKK2Jvb2wgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OkJyaWRnZTo6c2VuZChj
b25zdCBCbG9iJiBiaW5hcnlEYXRhKQoreworICAgIGlmICghbV93b3JrZXJDbGllbnRXcmFwcGVy
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQVNTRVJUKG1fcGVlcik7CisgICAgc2V0TWV0
aG9kTm90Q29tcGxldGVkKCk7CisgICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza1RvTG9hZGVyKGNy
ZWF0ZUNhbGxiYWNrVGFzaygmV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6Om1haW5U
aHJlYWRTZW5kQmxvYiwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcyhtX3BlZXIpLCBiaW5hcnlEYXRh
LnVybCgpLCBiaW5hcnlEYXRhLnR5cGUoKSwgYmluYXJ5RGF0YS5zaXplKCkpKTsKKyAgICBSZWZQ
dHI8QnJpZGdlPiBwcm90ZWN0KHRoaXMpOworICAgIHdhaXRGb3JNZXRob2RDb21wbGV0aW9uKCk7
CisgICAgVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyKiBjbGllbnRXcmFw
cGVyID0gbV93b3JrZXJDbGllbnRXcmFwcGVyLmdldCgpOworICAgIHJldHVybiBjbGllbnRXcmFw
cGVyICYmIGNsaWVudFdyYXBwZXItPnNlbnQoKTsKK30KKwogdm9pZCBXb3JrZXJUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbDo6bWFpblRocmVhZEJ1ZmZlcmVkQW1vdW50KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIFBlZXIqIHBlZXIpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV29ya2VyVGhyZWFk
YWJsZVdlYlNvY2tldENoYW5uZWwuaCBiL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV29ya2Vy
VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaAppbmRleCBhOGQxMzNkM2NkZjgxZTcyYTg3ZGI1
OGE2ODVmZTFhMTIyYTRiMzFjLi43ZTJlYzFiY2RlYTYxOGIwNTI3OWMzZTg4ODQ5NGU1NjRmN2Qz
ODc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dvcmtlclRocmVhZGFi
bGVXZWJTb2NrZXRDaGFubmVsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9Xb3Jr
ZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oCkBAIC02NCw2ICs2NCw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgY29ubmVjdChjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiBwcm90
b2NvbCk7CiAgICAgdmlydHVhbCBTdHJpbmcgc3VicHJvdG9jb2woKTsKICAgICB2aXJ0dWFsIGJv
b2wgc2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOworICAgIHZpcnR1YWwgYm9vbCBzZW5kKGNv
bnN0IEJsb2ImKTsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgYnVmZmVyZWRBbW91bnQoKSBj
b25zdDsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoaW50IGNvZGUsIGNvbnN0IFN0cmluZyYgcmVh
c29uKTsKICAgICB2aXJ0dWFsIHZvaWQgZmFpbChjb25zdCBTdHJpbmcmIHJlYXNvbik7CkBAIC05
Myw2ICs5NCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wgdXNlSGl4aWU3NlByb3RvY29sKCk7
CiAgICAgICAgIHZvaWQgY29ubmVjdChjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiBwcm90b2Nv
bCk7CiAgICAgICAgIHZvaWQgc2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOworICAgICAgICB2
b2lkIHNlbmQoY29uc3QgQmxvYiYpOwogICAgICAgICB2b2lkIGJ1ZmZlcmVkQW1vdW50KCk7CiAg
ICAgICAgIHZvaWQgY2xvc2UoaW50IGNvZGUsIGNvbnN0IFN0cmluZyYgcmVhc29uKTsKICAgICAg
ICAgdm9pZCBmYWlsKGNvbnN0IFN0cmluZyYgcmVhc29uKTsKQEAgLTEyNSw2ICsxMjcsNyBAQCBw
cml2YXRlOgogICAgICAgICB+QnJpZGdlKCk7CiAgICAgICAgIHZvaWQgY29ubmVjdChjb25zdCBL
VVJMJiwgY29uc3QgU3RyaW5nJiBwcm90b2NvbCk7CiAgICAgICAgIGJvb2wgc2VuZChjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpOworICAgICAgICBib29sIHNlbmQoY29uc3QgQmxvYiYpOwogICAgICAg
ICB1bnNpZ25lZCBsb25nIGJ1ZmZlcmVkQW1vdW50KCk7CiAgICAgICAgIHZvaWQgY2xvc2UoaW50
IGNvZGUsIGNvbnN0IFN0cmluZyYgcmVhc29uKTsKICAgICAgICAgdm9pZCBmYWlsKGNvbnN0IFN0
cmluZyYgcmVhc29uKTsKQEAgLTE2MCw2ICsxNjMsNyBAQCBwcml2YXRlOgogCiAgICAgc3RhdGlj
IHZvaWQgbWFpblRocmVhZENvbm5lY3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBlZXIqLCBj
b25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiBwcm90b2NvbCk7CiAgICAgc3RhdGljIHZvaWQgbWFp
blRocmVhZFNlbmQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBlZXIqLCBjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpOworICAgIHN0YXRpYyB2b2lkIG1haW5UaHJlYWRTZW5kQmxvYihTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGVlciosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHR5cGUsIGxv
bmcgbG9uZyBzaXplKTsKICAgICBzdGF0aWMgdm9pZCBtYWluVGhyZWFkQnVmZmVyZWRBbW91bnQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBlZXIqKTsKICAgICBzdGF0aWMgdm9pZCBtYWluVGhy
ZWFkQ2xvc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBlZXIqLCBpbnQgY29kZSwgY29uc3Qg
U3RyaW5nJiByZWFzb24pOwogICAgIHN0YXRpYyB2b2lkIG1haW5UaHJlYWRGYWlsKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQZWVyKiwgY29uc3QgU3RyaW5nJiByZWFzb24pOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106108</attachid>
            <date>2011-09-02 02:26:28 -0700</date>
            <delta_ts>2011-09-02 03:35:51 -0700</delta_ts>
            <desc>Patch v5</desc>
            <filename>bug-67465-20110902182626.patch</filename>
            <type>text/plain</type>
            <size>51165</size>
            <attacher name="Yuta Kitamura">yutak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTQzODcKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA0NTMwZTE1N2QzY2VkNzU0ZmFjMzlh
ZDU4OTVkOWZmN2VmOTU5OWE1Li5iYjM1ODNlNGEwNWQxODI4ZjlhNmIwNGJmNzJiYjFjYzk4NTMw
ODhlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsNDQgQEAKKzIwMTEtMDktMDIgIFl1dGEgS2l0YW11cmEgIDx5
dXRha0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViU29ja2V0OiBTZW5kIEJsb2IgYXMgV2Vi
U29ja2V0IGJpbmFyeSBtZXNzYWdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD02NzQ2NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGl4aWU3Ni9zZW5kLWVt
cHR5LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy93ZWJzb2NrZXQv
dGVzdHMvaGl4aWU3Ni9zZW5kLWVtcHR5Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVz
dHMvd2Vic29ja2V0L3Rlc3RzL2hpeGllNzYvc2VuZC1vYmplY3QtZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oaXhpZTc2L3NlbmQtb2Jq
ZWN0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5
YmkvYnVmZmVyZWRBbW91bnQtYWZ0ZXItY2xvc2UtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGh0
dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5YmkvYnVmZmVyZWRBbW91bnQtYWZ0ZXItY2xvc2Uu
aHRtbDoKKyAgICAgICAgVXBkYXRlZC4gQWRkZWQgdGVzdHMgdG8gc2VuZCBCbG9icy4KKyAgICAg
ICAgKiBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtYmxvYi1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2Vu
ZC1ibG9iLmh0bWw6CisgICAgICAgIEFkZGVkLiBTZW5kIHRocmVlIEJsb2JzIGVhY2ggb2Ygd2hp
Y2ggY29udGFpbnMgYSBzbWFsbCBiaW5hcnkgbWVzc2FnZS4KKyAgICAgICAgKiBodHRwL3Rlc3Rz
L3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtYmxvYl93c2gucHk6CisgICAgICAgIEFkZGVkLiBy
ZWNlaXZlX21lc3NhZ2UoKSByZXR1cm5zIGEgdW5pY29kZSB2YWx1ZSBpZiB0aGUgcmVjZWl2ZWQg
bWVzc2FnZSB3YXMgdGV4dCwgb3IKKyAgICAgICAgYSBzdHIgdmFsdWUgaWYgdGhlIG1lc3NhZ2Ug
d2FzIGJpbmFyeS4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3Nl
bmQtZW1wdHktZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3dlYnNv
Y2tldC90ZXN0cy9oeWJpL3NlbmQtZW1wdHkuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90
ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWZpbGUtYmxvYi1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1maWxl
LWJsb2ItZmFpbC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvd2Vi
c29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1maWxlLWJsb2ItZmFpbC5odG1sOgorICAgICAgICBBZGRl
ZC4gSWYgd2UgZGVsZXRlIGEgZmlsZSBiZWZvcmUgcmVhZGluZyBpdCwgRmlsZVJlYWRlckxvYWRl
ciByZWxpYWJseSBmYWlscy4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9o
eWJpL3NlbmQtZmlsZS1ibG9iLmh0bWw6CisgICAgICAgIEFkZGVkLiBDcmVhdGUgYSBGaWxlIGFu
ZCB0cnkgdG8gc2VuZCBpdCBhcyBhIEJsb2IuCisgICAgICAgICogaHR0cC90ZXN0cy93ZWJzb2Nr
ZXQvdGVzdHMvaHliaS9zZW5kLWZpbGUtYmxvYl93c2gucHk6IEFkZGVkLgorICAgICAgICAqIGh0
dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvd29ya2Vycy9yZXNvdXJjZXMvc2VuZC1ibG9i
LmpzOgorICAgICAgICBBZGRlZC4gU2FtZSBhcyBzZW5kLWJsb2IuaHRtbCBhYm92ZS4KKyAgICAg
ICAgKiBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3dvcmtlcnMvcmVzb3VyY2VzL3Nl
bmQtYmxvYl93c2gucHk6CisgICAgICAgIEFkZGVkLiBTYW1lIGFzIHNlbmQtYmxvYl93c2gucHkg
YWJvdmUuCisgICAgICAgICogaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS93b3JrZXJz
L3NlbmQtYmxvYi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvd2Vi
c29ja2V0L3Rlc3RzL2h5Ymkvd29ya2Vycy9zZW5kLWJsb2IuaHRtbDogQWRkZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3RrL1NraXBwZWQ6CisgICAgICAgIHNlbmQtZmlsZS1ibG9iLmh0bWwgYW5k
IHNlbmQtZmlsZS1ibG9iLWZhaWwuaHRtbCBkZXBlbmQgb24gYXZhaWxhYmlsaXR5IG9mIEZpbGUg
QVBJLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9Ta2lwcGVkOiBEaXR0by4KKyAgICAgICAgKiBw
bGF0Zm9ybS9xdC9Ta2lwcGVkOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vU2tpcHBl
ZDogRGl0dG8uCisKIDIwMTEtMDktMDEgIFRha2FzaGkgVG95b3NoaW1hICA8dG95b3NoaW1AY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFtXZWJTb2NrZXRdIEltcGxlbWVudCBXZWJTb2NrZXQ6OmNs
b3NlKCkgY29kZSBhbmQgcmVhc29uIGhhbmRsaW5nLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGl4aWU3Ni9zZW5kLWVtcHR5LWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2hpeGllNzYvc2VuZC1l
bXB0eS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGM3MGYxZjllMGFjYjE5ZWE1NWRjZTYwMTE3
OGE1NzI0YmJiNDVkZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMv
d2Vic29ja2V0L3Rlc3RzL2hpeGllNzYvc2VuZC1lbXB0eS1leHBlY3RlZC50eHQKQEAgLTAsMCAr
MSwxMiBAQAorV2ViU29ja2V0OiBDYWxsaW5nIHNlbmQoKSB3aXRob3V0IGFyZ3VtZW50cyBzaG91
bGQgcmFpc2UgU3ludGF4RXJyb3IuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmll
cyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworUEFT
UyB3cy5zZW5kKCkgdGhyZXcgZXhjZXB0aW9uIFN5bnRheEVycm9yOiBOb3QgZW5vdWdoIGFyZ3Vt
ZW50cy4KK1BBU1MgY2xvc2VFdmVudC53YXNDbGVhbiBpcyB0cnVlCitQQVNTIHJlY2VpdmVkTWVz
c2FnZXMubGVuZ3RoIGlzIDEKK1BBU1MgcmVjZWl2ZWRNZXNzYWdlc1swXSBpcyAiR29vZGJ5ZSIK
K1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oaXhpZTc2L3Nl
bmQtZW1wdHkuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2hp
eGllNzYvc2VuZC1lbXB0eS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZjNjM3NjM5NzM5MzYwNzBkNjgxYzUz
ZTg3ZmRhMTczZjEwNjZiMmMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3dlYnNvY2tldC90ZXN0cy9oaXhpZTc2L3NlbmQtZW1wdHkuaHRtbApAQCAtMCwwICsxLDQ3
IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hl
ZXQiIGhyZWY9Ii4uLy4uLy4uLy4uL2pzLXRlc3QtcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3Nz
Ij4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi8uLi9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48
L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJX
ZWJTb2NrZXQ6IENhbGxpbmcgc2VuZCgpIHdpdGhvdXQgYXJndW1lbnRzIHNob3VsZCByYWlzZSBT
eW50YXhFcnJvci4iKTsKKword2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworCit2YXIgd3Mg
PSBuZXcgV2ViU29ja2V0KCJ3czovLzEyNy4wLjAuMTo4ODgwL3dlYnNvY2tldC90ZXN0cy9oaXhp
ZTc2L2VjaG8iKTsKKwordmFyIGNsb3NlRXZlbnQ7Cit2YXIgcmVjZWl2ZWRNZXNzYWdlcyA9IFtd
OwordmFyIGV4cGVjdGVkTWVzc2FnZXMgPSBbIkdvb2RieWUiXTsKKword3Mub25vcGVuID0gZnVu
Y3Rpb24oKQoreworICAgIHNob3VsZFRocm93KCJ3cy5zZW5kKCkiKTsKKyAgICB3cy5zZW5kKCJH
b29kYnllIik7Cit9OworCit3cy5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkKK3sKKyAgICBy
ZWNlaXZlZE1lc3NhZ2VzLnB1c2goZXZlbnQuZGF0YSk7Cit9OworCit3cy5vbmNsb3NlID0gZnVu
Y3Rpb24oZXZlbnQpCit7CisgICAgY2xvc2VFdmVudCA9IGV2ZW50OworICAgIHNob3VsZEJlVHJ1
ZSgiY2xvc2VFdmVudC53YXNDbGVhbiIpOworCisgICAgc2hvdWxkRXZhbHVhdGVUbygicmVjZWl2
ZWRNZXNzYWdlcy5sZW5ndGgiLCBleHBlY3RlZE1lc3NhZ2VzLmxlbmd0aCk7CisgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBleHBlY3RlZE1lc3NhZ2VzLmxlbmd0aDsgKytpKQorICAgICAgICBzaG91
bGRCZUVxdWFsVG9TdHJpbmcoInJlY2VpdmVkTWVzc2FnZXNbIiArIGkgKyAiXSIsIGV4cGVjdGVk
TWVzc2FnZXNbaV0pOworICAgIGZpbmlzaEpTVGVzdCgpOworfTsKKwordmFyIHN1Y2Nlc3NmdWxs
eVBhcnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi8uLi9qcy10
ZXN0LXJlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGl4
aWU3Ni9zZW5kLW9iamVjdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dl
YnNvY2tldC90ZXN0cy9oaXhpZTc2L3NlbmQtb2JqZWN0LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5hYzliMmNhZDJmMTllYTYyZmZlMDU0NWFmYjdlNzkyYjNjODg4OTUyCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGl4aWU3Ni9zZW5k
LW9iamVjdC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxNCBAQAorV2ViU29ja2V0OiBzZW5kKG9i
amVjdCkgc2hvdWxkIGJlIGludGVycHJldGVkIGFzIHNlbmQob2JqZWN0LnRvU3RyaW5nKCkpLgor
CitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBm
b2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1BBU1MgY2xvc2VFdmVudC53YXNDbGVhbiBp
cyB0cnVlCitQQVNTIHJlY2VpdmVkTWVzc2FnZXMubGVuZ3RoIGlzIDQKK1BBU1MgcmVjZWl2ZWRN
ZXNzYWdlc1swXSBpcyAiW29iamVjdCBPYmplY3RdIgorUEFTUyByZWNlaXZlZE1lc3NhZ2VzWzFd
IGlzICJbb2JqZWN0IEFycmF5QnVmZmVyXSIKK1BBU1MgcmVjZWl2ZWRNZXNzYWdlc1syXSBpcyAi
W29iamVjdCBCbG9iXSIKK1BBU1MgcmVjZWl2ZWRNZXNzYWdlc1szXSBpcyAiR29vZGJ5ZSIKK1BB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oaXhpZTc2L3NlbmQt
b2JqZWN0Lmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oaXhp
ZTc2L3NlbmQtb2JqZWN0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2EzMTcxMzdmMGM0YTJhNmI0YjA3MTZl
N2QzNDIzMjkzMDRmOTk1NgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvd2Vic29ja2V0L3Rlc3RzL2hpeGllNzYvc2VuZC1vYmplY3QuaHRtbApAQCAtMCwwICsxLDU1
IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hl
ZXQiIGhyZWY9Ii4uLy4uLy4uLy4uL2pzLXRlc3QtcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3Nz
Ij4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi8uLi9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48
L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJX
ZWJTb2NrZXQ6IHNlbmQob2JqZWN0KSBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgYXMgc2VuZChvYmpl
Y3QudG9TdHJpbmcoKSkuIik7CisKK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKworZnVu
Y3Rpb24gY3JlYXRlRW1wdHlCbG9iKCkKK3sKKyAgICB2YXIgYnVpbGRlciA9IG5ldyBXZWJLaXRC
bG9iQnVpbGRlcigpOworICAgIHJldHVybiBidWlsZGVyLmdldEJsb2IoKTsKK30KKwordmFyIHdz
ID0gbmV3IFdlYlNvY2tldCgid3M6Ly8xMjcuMC4wLjE6ODg4MC93ZWJzb2NrZXQvdGVzdHMvaGl4
aWU3Ni9lY2hvIik7CisKK3ZhciBjbG9zZUV2ZW50OwordmFyIHJlY2VpdmVkTWVzc2FnZXMgPSBb
XTsKK3ZhciBleHBlY3RlZE1lc3NhZ2VzID0gWyJbb2JqZWN0IE9iamVjdF0iLCAiW29iamVjdCBB
cnJheUJ1ZmZlcl0iLCAiW29iamVjdCBCbG9iXSIsICJHb29kYnllIl07CisKK3dzLm9ub3BlbiA9
IGZ1bmN0aW9uKCkKK3sKKyAgICB3cy5zZW5kKHt9KTsKKyAgICB3cy5zZW5kKG5ldyBBcnJheUJ1
ZmZlcigpKTsKKyAgICB3cy5zZW5kKGNyZWF0ZUVtcHR5QmxvYigpKTsKKyAgICB3cy5zZW5kKCJH
b29kYnllIik7Cit9OworCit3cy5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkKK3sKKyAgICBy
ZWNlaXZlZE1lc3NhZ2VzLnB1c2goZXZlbnQuZGF0YSk7Cit9OworCit3cy5vbmNsb3NlID0gZnVu
Y3Rpb24oZXZlbnQpCit7CisgICAgY2xvc2VFdmVudCA9IGV2ZW50OworICAgIHNob3VsZEJlVHJ1
ZSgiY2xvc2VFdmVudC53YXNDbGVhbiIpOworCisgICAgc2hvdWxkRXZhbHVhdGVUbygicmVjZWl2
ZWRNZXNzYWdlcy5sZW5ndGgiLCBleHBlY3RlZE1lc3NhZ2VzLmxlbmd0aCk7CisgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBleHBlY3RlZE1lc3NhZ2VzLmxlbmd0aDsgKytpKQorICAgICAgICBzaG91
bGRCZUVxdWFsVG9TdHJpbmcoInJlY2VpdmVkTWVzc2FnZXNbIiArIGkgKyAiXSIsIGV4cGVjdGVk
TWVzc2FnZXNbaV0pOworICAgIGZpbmlzaEpTVGVzdCgpOworfTsKKwordmFyIHN1Y2Nlc3NmdWxs
eVBhcnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi8uLi9qcy10
ZXN0LXJlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHli
aS9idWZmZXJlZEFtb3VudC1hZnRlci1jbG9zZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL2J1ZmZlcmVkQW1vdW50LWFmdGVyLWNsb3Nl
LWV4cGVjdGVkLnR4dAppbmRleCBlNzI5ODA3MDM1OGFkNTgyMjM2NDE4MzU3YzdkM2ZmZmMwNDgz
NGRmLi43YzZkNTVlYjY0ZGVlMzliODFlMjAxZDZjMThiZjUzZWE1N2I5NTliIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL2J1ZmZlcmVkQW1v
dW50LWFmdGVyLWNsb3NlLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3dlYnNvY2tldC90ZXN0cy9oeWJpL2J1ZmZlcmVkQW1vdW50LWFmdGVyLWNsb3NlLWV4cGVjdGVk
LnR4dApAQCAtNiw2ICs2LDcgQEAgQ29ubmVjdGVkLgogQ2xvc2VkLgogUEFTUyB3cy5yZWFkeVN0
YXRlIGlzIDMKIFBBU1Mgd3MuYnVmZmVyZWRBbW91bnQgaXMgMAorVGVzdGluZyBzZW5kKHN0cmlu
ZykuLi4KIFBBU1Mgd3Muc2VuZChtZXNzYWdlVG9TZW5kKSBpcyBmYWxzZQogUEFTUyBidWZmZXJl
ZEFtb3VudERpZmZlcmVuY2UgaXMgMjcKIFBBU1Mgd3Muc2VuZChtZXNzYWdlVG9TZW5kKSBpcyBm
YWxzZQpAQCAtMjAsNiArMjEsMTkgQEAgUEFTUyB3cy5zZW5kKG1lc3NhZ2VUb1NlbmQpIGlzIGZh
bHNlCiBQQVNTIGJ1ZmZlcmVkQW1vdW50RGlmZmVyZW5jZSBpcyA2NTU0MwogUEFTUyB3cy5zZW5k
KG1lc3NhZ2VUb1NlbmQpIGlzIGZhbHNlCiBQQVNTIGJ1ZmZlcmVkQW1vdW50RGlmZmVyZW5jZSBp
cyA2NTU1MAorVGVzdGluZyBzZW5kKEJsb2IpLi4uCitQQVNTIHdzLnNlbmQobWVzc2FnZVRvU2Vu
ZCkgaXMgZmFsc2UKK1BBU1MgYnVmZmVyZWRBbW91bnREaWZmZXJlbmNlIGlzIDYKK1BBU1Mgd3Mu
c2VuZChtZXNzYWdlVG9TZW5kKSBpcyBmYWxzZQorUEFTUyBidWZmZXJlZEFtb3VudERpZmZlcmVu
Y2UgaXMgNworUEFTUyB3cy5zZW5kKG1lc3NhZ2VUb1NlbmQpIGlzIGZhbHNlCitQQVNTIGJ1ZmZl
cmVkQW1vdW50RGlmZmVyZW5jZSBpcyAxMzEKK1BBU1Mgd3Muc2VuZChtZXNzYWdlVG9TZW5kKSBp
cyBmYWxzZQorUEFTUyBidWZmZXJlZEFtb3VudERpZmZlcmVuY2UgaXMgMTM0CitQQVNTIHdzLnNl
bmQobWVzc2FnZVRvU2VuZCkgaXMgZmFsc2UKK1BBU1MgYnVmZmVyZWRBbW91bnREaWZmZXJlbmNl
IGlzIDY1NTQzCitQQVNTIHdzLnNlbmQobWVzc2FnZVRvU2VuZCkgaXMgZmFsc2UKK1BBU1MgYnVm
ZmVyZWRBbW91bnREaWZmZXJlbmNlIGlzIDY1NTUwCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvd2Vic29ja2V0L3Rlc3RzL2h5YmkvYnVmZmVyZWRBbW91bnQtYWZ0ZXItY2xvc2UuaHRtbCBi
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5YmkvYnVmZmVyZWRBbW91
bnQtYWZ0ZXItY2xvc2UuaHRtbAppbmRleCAxNmE2YTRiNzE3N2U4ZWY3ZDc5ODlmMDU5MjMxMGIy
NDhjZjg5MzllLi5jNmIyNjA0MmU1OWQ4ZjA0MmE4YjYzMTZlNTc1ODkxMjg4NjE0ODY0IDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL2J1ZmZl
cmVkQW1vdW50LWFmdGVyLWNsb3NlLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93
ZWJzb2NrZXQvdGVzdHMvaHliaS9idWZmZXJlZEFtb3VudC1hZnRlci1jbG9zZS5odG1sCkBAIC0y
Miw2ICsyMiwxMyBAQCBmdW5jdGlvbiBjcmVhdGVTdHJpbmdXaXRoTGVuZ3RoKGxlbmd0aCkKICAg
ICByZXR1cm4gc3RyaW5nLnN1YnN0cmluZygwLCBsZW5ndGgpOwogfQogCitmdW5jdGlvbiBjcmVh
dGVCbG9iV2l0aExlbmd0aChsZW5ndGgpCit7CisgICAgdmFyIGJ1aWxkZXIgPSBuZXcgV2ViS2l0
QmxvYkJ1aWxkZXIoKTsKKyAgICBidWlsZGVyLmFwcGVuZChuZXcgQXJyYXlCdWZmZXIobGVuZ3Ro
KSk7CisgICAgcmV0dXJuIGJ1aWxkZXIuZ2V0QmxvYigpOworfQorCiB2YXIgd3MgPSBuZXcgV2Vi
U29ja2V0KCJ3czovL2xvY2FsaG9zdDo4ODgwL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NpbXBsZSIp
OwogCiB3cy5vbm9wZW4gPSBmdW5jdGlvbigpCkBAIC0zNyw2ICs0NCw3IEBAIHdzLm9uY2xvc2Ug
PSBmdW5jdGlvbigpCiAgICAgc2hvdWxkQmUoIndzLmJ1ZmZlcmVkQW1vdW50IiwgIjAiKTsKIAog
ICAgIHZhciBiYXNlT3ZlcmhlYWQgPSAyICsgNDsgLy8gQmFzZSBoZWFkZXIgc2l6ZSBhbmQgbWFz
a2luZyBrZXkgc2l6ZS4KKyAgICBkZWJ1ZygiVGVzdGluZyBzZW5kKHN0cmluZykuLi4iKTsKICAg
ICB0ZXN0QnVmZmVyZWRBbW91bnQoJ3NlbmQgdG8gY2xvc2VkIHNvY2tldCcsIDIxICsgYmFzZU92
ZXJoZWFkKTsKICAgICB0ZXN0QnVmZmVyZWRBbW91bnQoJycsIGJhc2VPdmVyaGVhZCk7CiAgICAg
dGVzdEJ1ZmZlcmVkQW1vdW50KCdhJywgMSArIGJhc2VPdmVyaGVhZCk7CkBAIC00NSw2ICs1Mywx
NCBAQCB3cy5vbmNsb3NlID0gZnVuY3Rpb24oKQogICAgIHRlc3RCdWZmZXJlZEFtb3VudChjcmVh
dGVTdHJpbmdXaXRoTGVuZ3RoKDB4RkZGRiksIDB4RkZGRiArIGJhc2VPdmVyaGVhZCArIDIpOwog
ICAgIHRlc3RCdWZmZXJlZEFtb3VudChjcmVhdGVTdHJpbmdXaXRoTGVuZ3RoKDB4MTAwMDApLCAw
eDEwMDAwICsgYmFzZU92ZXJoZWFkICsgOCk7IC8vIFdpdGggNjQtYml0IGV4dGVuZGVkIHBheWxv
YWQgbGVuZ3RoIGZpZWxkLgogCisgICAgZGVidWcoIlRlc3Rpbmcgc2VuZChCbG9iKS4uLiIpOwor
ICAgIHRlc3RCdWZmZXJlZEFtb3VudChjcmVhdGVCbG9iV2l0aExlbmd0aCgwKSwgYmFzZU92ZXJo
ZWFkKTsKKyAgICB0ZXN0QnVmZmVyZWRBbW91bnQoY3JlYXRlQmxvYldpdGhMZW5ndGgoMSksIDEg
KyBiYXNlT3ZlcmhlYWQpOworICAgIHRlc3RCdWZmZXJlZEFtb3VudChjcmVhdGVCbG9iV2l0aExl
bmd0aCgxMjUpLCAxMjUgKyBiYXNlT3ZlcmhlYWQpOworICAgIHRlc3RCdWZmZXJlZEFtb3VudChj
cmVhdGVCbG9iV2l0aExlbmd0aCgxMjYpLCAxMjYgKyBiYXNlT3ZlcmhlYWQgKyAyKTsKKyAgICB0
ZXN0QnVmZmVyZWRBbW91bnQoY3JlYXRlQmxvYldpdGhMZW5ndGgoMHhGRkZGKSwgMHhGRkZGICsg
YmFzZU92ZXJoZWFkICsgMik7CisgICAgdGVzdEJ1ZmZlcmVkQW1vdW50KGNyZWF0ZUJsb2JXaXRo
TGVuZ3RoKDB4MTAwMDApLCAweDEwMDAwICsgYmFzZU92ZXJoZWFkICsgOCk7CisKICAgICBmaW5p
c2hKU1Rlc3QoKTsKIH07CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vi
c29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1ibG9iLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2h0
dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1ibG9iLWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5mZGY0OGQwNWYzZmQ3MjBlMGJhNWFhNjc5YzI2MmU0ZGRiMjMxYzIzCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9z
ZW5kLWJsb2ItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTIgQEAKK1dlYlNvY2tldDogU2VuZCBC
bG9icy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNz
YWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitQQVNTIFBBU1M6IE1lc3NhZ2Ug
IzAuCitQQVNTIFBBU1M6IE1lc3NhZ2UgIzEuCitQQVNTIFBBU1M6IE1lc3NhZ2UgIzIuCitQQVNT
IGNsb3NlRXZlbnQud2FzQ2xlYW4gaXMgdHJ1ZQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1ibG9iLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtYmxvYi5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVh
YjkzNDZkNzQ4M2E2NGE5MmFhYmY3OTFlZGI5YzlkMDM3NWY5OTIKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtYmxvYi5o
dG1sCkBAIC0wLDAgKzEsNzYgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxs
aW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vLi4vanMtdGVzdC1yZXNvdXJjZXMv
anMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uLy4uL2pzLXRlc3QtcmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBp
ZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0
IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CitkZXNjcmlwdGlvbigiV2ViU29ja2V0OiBTZW5kIEJs
b2JzLiIpOworCit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CitpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLm92ZXJyaWRlUHJlZmVy
ZW5jZSgiV2ViS2l0SGl4aWU3NldlYlNvY2tldFByb3RvY29sRW5hYmxlZCIsIDApOworCitmdW5j
dGlvbiBzdGFydHNXaXRoKHRhcmdldCwgcHJlZml4KQoreworICAgIHJldHVybiB0YXJnZXQuaW5k
ZXhPZihwcmVmaXgpID09PSAwOworfQorCitmdW5jdGlvbiBjcmVhdGVCbG9iQ29udGFpbmluZ0hl
bGxvV29ybGQoKQoreworICAgIHZhciBidWlsZGVyID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7
CisgICAgYnVpbGRlci5hcHBlbmQoIkhlbGxvLCB3b3JsZCEiKTsKKyAgICByZXR1cm4gYnVpbGRl
ci5nZXRCbG9iKCk7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZUVtcHR5QmxvYigpCit7CisgICAgdmFy
IGJ1aWxkZXIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKKyAgICByZXR1cm4gYnVpbGRlci5n
ZXRCbG9iKCk7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZUJsb2JDb250YWluaW5nQWxsRGlzdGluY3RC
eXRlcygpCit7CisgICAgdmFyIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoMjU2KTsKKyAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IDI1NjsgKytpKQorICAgICAgICBhcnJheVtpXSA9IGk7CisgICAgdmFy
IGJ1aWxkZXIgPSBuZXcgV2ViS2l0QmxvYkJ1aWxkZXIoKTsKKyAgICBidWlsZGVyLmFwcGVuZChh
cnJheS5idWZmZXIpOworICAgIHJldHVybiBidWlsZGVyLmdldEJsb2IoKTsKK30KKwordmFyIHVy
bCA9ICJ3czovLzEyNy4wLjAuMTo4ODgwL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtYmxvYiI7
Cit2YXIgd3MgPSBuZXcgV2ViU29ja2V0KHVybCk7Cit2YXIgY2xvc2VFdmVudDsKKword3Mub25v
cGVuID0gZnVuY3Rpb24oKQoreworICAgIHdzLnNlbmQoY3JlYXRlQmxvYkNvbnRhaW5pbmdIZWxs
b1dvcmxkKCkpOworICAgIHdzLnNlbmQoY3JlYXRlRW1wdHlCbG9iKCkpOworICAgIHdzLnNlbmQo
Y3JlYXRlQmxvYkNvbnRhaW5pbmdBbGxEaXN0aW5jdEJ5dGVzKCkpOworfTsKKword3Mub25tZXNz
YWdlID0gZnVuY3Rpb24oZXZlbnQpCit7CisgICAgdmFyIG1lc3NhZ2UgPSBldmVudC5kYXRhOwor
ICAgIGlmIChzdGFydHNXaXRoKG1lc3NhZ2UsICJQQVNTIikpCisgICAgICAgIHRlc3RQYXNzZWQo
bWVzc2FnZSk7CisgICAgZWxzZQorICAgICAgICB0ZXN0RmFpbGVkKG1lc3NhZ2UpOworfTsKKwor
d3Mub25jbG9zZSA9IGZ1bmN0aW9uKGV2ZW50KQoreworICAgIGNsb3NlRXZlbnQgPSBldmVudDsK
KyAgICBzaG91bGRCZVRydWUoImNsb3NlRXZlbnQud2FzQ2xlYW4iKTsKKyAgICBmaW5pc2hKU1Rl
c3QoKTsKK307CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vanMtdGVzdC1yZXNvdXJjZXMvanMtdGVzdC1wb3N0Lmpz
Ij48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0
dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1ibG9iX3dzaC5weSBiL0xheW91dFRl
c3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1ibG9iX3dzaC5weQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4wMjRlM2Y0ZDA3OTQ1YzkyY2FhYmRjMDM3ZWM1MDA4MjRhNDJhMWEyCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9z
ZW5kLWJsb2Jfd3NoLnB5CkBAIC0wLDAgKzEsMjEgQEAKK2Zyb20gbW9kX3B5d2Vic29ja2V0IGlt
cG9ydCBjb21tb24KK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBtc2d1dGlsCisKKworZGVm
IHdlYl9zb2NrZXRfZG9fZXh0cmFfaGFuZHNoYWtlKHJlcXVlc3QpOgorICAgIHBhc3MgIyBBbHdh
eXMgYWNjZXB0LgorCisKK2RlZiB3ZWJfc29ja2V0X3RyYW5zZmVyX2RhdGEocmVxdWVzdCk6Cisg
ICAgZXhwZWN0ZWRfbWVzc2FnZXMgPSBbJ0hlbGxvLCB3b3JsZCEnLCAnJywgYWxsX2Rpc3RpbmN0
X2J5dGVzKCldCisKKyAgICBmb3IgdGVzdF9udW1iZXIsIGV4cGVjdGVkX21lc3NhZ2UgaW4gZW51
bWVyYXRlKGV4cGVjdGVkX21lc3NhZ2VzKToKKyAgICAgICAgbWVzc2FnZSA9IG1zZ3V0aWwucmVj
ZWl2ZV9tZXNzYWdlKHJlcXVlc3QpCisgICAgICAgIGlmIHR5cGUobWVzc2FnZSkgPT0gc3RyIGFu
ZCBtZXNzYWdlID09IGV4cGVjdGVkX21lc3NhZ2U6CisgICAgICAgICAgICBtc2d1dGlsLnNlbmRf
bWVzc2FnZShyZXF1ZXN0LCAnUEFTUzogTWVzc2FnZSAjJWQuJyAlIHRlc3RfbnVtYmVyKQorICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgbXNndXRpbC5zZW5kX21lc3NhZ2UocmVxdWVzdCwgJ0ZB
SUw6IE1lc3NhZ2UgIyVkOiBSZWNlaXZlZCB1bmV4cGVjdGVkIG1lc3NhZ2U6ICVyJyAlICh0ZXN0
X251bWJlciwgbWVzc2FnZSkpCisKKworZGVmIGFsbF9kaXN0aW5jdF9ieXRlcygpOgorICAgIHJl
dHVybiAnJy5qb2luKFtjaHIoaSkgZm9yIGkgaW4geHJhbmdlKDI1NildKQpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWVtcHR5LWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkv
c2VuZC1lbXB0eS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGM3MGYxZjllMGFjYjE5ZWE1NWRj
ZTYwMTE3OGE1NzI0YmJiNDVkZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1lbXB0eS1leHBlY3RlZC50eHQKQEAgLTAs
MCArMSwxMiBAQAorV2ViU29ja2V0OiBDYWxsaW5nIHNlbmQoKSB3aXRob3V0IGFyZ3VtZW50cyBz
aG91bGQgcmFpc2UgU3ludGF4RXJyb3IuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwor
UEFTUyB3cy5zZW5kKCkgdGhyZXcgZXhjZXB0aW9uIFN5bnRheEVycm9yOiBOb3QgZW5vdWdoIGFy
Z3VtZW50cy4KK1BBU1MgY2xvc2VFdmVudC53YXNDbGVhbiBpcyB0cnVlCitQQVNTIHJlY2VpdmVk
TWVzc2FnZXMubGVuZ3RoIGlzIDEKK1BBU1MgcmVjZWl2ZWRNZXNzYWdlc1swXSBpcyAiR29vZGJ5
ZSIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3Nl
bmQtZW1wdHkuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5
Ymkvc2VuZC1lbXB0eS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM4Yzg5OTY0OTY1NjRiOTg3NmJkMWEyN2U3
ZTJiOGEzODM0NTdiOTcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtZW1wdHkuaHRtbApAQCAtMCwwICsxLDQ5IEBACis8
IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhy
ZWY9Ii4uLy4uLy4uLy4uL2pzLXRlc3QtcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi8uLi8uLi9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4K
KzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJXZWJTb2Nr
ZXQ6IENhbGxpbmcgc2VuZCgpIHdpdGhvdXQgYXJndW1lbnRzIHNob3VsZCByYWlzZSBTeW50YXhF
cnJvci4iKTsKKword2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworaWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5vdmVycmlkZVByZWZl
cmVuY2UoIldlYktpdEhpeGllNzZXZWJTb2NrZXRQcm90b2NvbEVuYWJsZWQiLCAwKTsKKwordmFy
IHdzID0gbmV3IFdlYlNvY2tldCgid3M6Ly8xMjcuMC4wLjE6ODg4MC93ZWJzb2NrZXQvdGVzdHMv
aHliaS9lY2hvIik7CisKK3ZhciBjbG9zZUV2ZW50OwordmFyIHJlY2VpdmVkTWVzc2FnZXMgPSBb
XTsKK3ZhciBleHBlY3RlZE1lc3NhZ2VzID0gWyJHb29kYnllIl07CisKK3dzLm9ub3BlbiA9IGZ1
bmN0aW9uKCkKK3sKKyAgICBzaG91bGRUaHJvdygid3Muc2VuZCgpIik7CisgICAgd3Muc2VuZCgi
R29vZGJ5ZSIpOworfTsKKword3Mub25tZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpCit7CisgICAg
cmVjZWl2ZWRNZXNzYWdlcy5wdXNoKGV2ZW50LmRhdGEpOworfTsKKword3Mub25jbG9zZSA9IGZ1
bmN0aW9uKGV2ZW50KQoreworICAgIGNsb3NlRXZlbnQgPSBldmVudDsKKyAgICBzaG91bGRCZVRy
dWUoImNsb3NlRXZlbnQud2FzQ2xlYW4iKTsKKworICAgIHNob3VsZEV2YWx1YXRlVG8oInJlY2Vp
dmVkTWVzc2FnZXMubGVuZ3RoIiwgZXhwZWN0ZWRNZXNzYWdlcy5sZW5ndGgpOworICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgZXhwZWN0ZWRNZXNzYWdlcy5sZW5ndGg7ICsraSkKKyAgICAgICAgc2hv
dWxkQmVFcXVhbFRvU3RyaW5nKCJyZWNlaXZlZE1lc3NhZ2VzWyIgKyBpICsgIl0iLCBleHBlY3Rl
ZE1lc3NhZ2VzW2ldKTsKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK307CisKK3ZhciBzdWNjZXNzZnVs
bHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vanMt
dGVzdC1yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5
Ymkvc2VuZC1maWxlLWJsb2ItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93
ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWZpbGUtYmxvYi1leHBlY3RlZC50eHQKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNTE2NDljZTk4NGJlMTZmN2YxYjc4NTVmZWFiNTliZDgwNzQxZGVmMgotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1m
aWxlLWJsb2ItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTYgQEAKK1dlYlNvY2tldDogU2VuZCBh
IEZpbGUuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVz
c2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworR290IEZpbGVTeXN0ZW0gb2Jq
ZWN0LgorRmlsZSBjcmVhdGVkLgorUEFTUyBmaWxlRW50cnkuaXNGaWxlIGlzIHRydWUKK1dyb3Rl
IHRvIGZpbGUuCitHb3QgRmlsZSBvYmplY3QuCitQQVNTIFBBU1M6IE1lc3NhZ2UgIzAuCitQQVNT
IGNsb3NlRXZlbnQud2FzQ2xlYW4gaXMgdHJ1ZQorRGVsZXRpbmcgdGhlIGZpbGUuCitQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWZpbGUtYmxv
Yi1mYWlsLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rl
c3RzL2h5Ymkvc2VuZC1maWxlLWJsb2ItZmFpbC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWQ3
MThmOTAwNjlkNTRiZDRiZmYzOWU1ZjE2MTAxOGEzOGVjNWQ5OQotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1maWxlLWJs
b2ItZmFpbC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxNiBAQAorQ09OU09MRSBNRVNTQUdFOiBs
aW5lIDA6IEZhaWxlZCB0byBsb2FkIEJsb2I6IGVycm9yIGNvZGUgPSAxCitXZWJTb2NrZXQgc2hv
dWxkIGZhaWwgdGhlIGNvbm5lY3Rpb24gaWYgaXQgaGFzIGZhaWxlZCB0byByZWFkIGEgQmxvYi4K
KworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitHb3QgRmlsZVN5c3RlbSBvYmplY3QuCitG
aWxlIGNyZWF0ZWQuCitQQVNTIGZpbGVFbnRyeS5pc0ZpbGUgaXMgdHJ1ZQorV3JvdGUgdG8gZmls
ZS4KK0dvdCBGaWxlIG9iamVjdC4KK0ZpbGUgZGVsZXRlZC4KK1BBU1MgY2xvc2VFdmVudC53YXND
bGVhbiBpcyBmYWxzZQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rl
c3RzL2h5Ymkvc2VuZC1maWxlLWJsb2ItZmFpbC5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWZpbGUtYmxvYi1mYWlsLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uOTI2MjZkOGYxZTNhYzcwOTVlOTNmODZiNDhlZTczYTEyNDU2ZTYzMQotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1m
aWxlLWJsb2ItZmFpbC5odG1sCkBAIC0wLDAgKzEsMTI2IEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uLy4uL2pz
LXRlc3QtcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi8u
Li8uLi9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUi
PjwvZGl2PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorZGVzY3JpcHRpb24oIldl
YlNvY2tldCBzaG91bGQgZmFpbCB0aGUgY29ubmVjdGlvbiBpZiBpdCBoYXMgZmFpbGVkIHRvIHJl
YWQgYSBCbG9iLiIpOworCit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CitpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLm92ZXJyaWRl
UHJlZmVyZW5jZSgiV2ViS2l0SGl4aWU3NldlYlNvY2tldFByb3RvY29sRW5hYmxlZCIsIDApOwor
CitmdW5jdGlvbiBzdGFydHNXaXRoKHRhcmdldCwgcHJlZml4KQoreworICAgIHJldHVybiB0YXJn
ZXQuaW5kZXhPZihwcmVmaXgpID09PSAwOworfQorCit2YXIgZmlsZVN5c3RlbVNpemUgPSAxMDI0
OwordmFyIGZpbGVOYW1lID0gIndlYnNvY2tldC1zZW5kLWZpbGUtYmxvYi1mYWlsLnR4dCI7Cit2
YXIgbWVzc2FnZVRvV3JpdGUgPSAiVGhpcyBtZXNzYWdlIHNob3VsZG4ndCBiZSBzZW50LiI7CisK
K2Z1bmN0aW9uIHJ1blRlc3QoKQoreworICAgIGlmICghd2luZG93LndlYmtpdFJlcXVlc3RGaWxl
U3lzdGVtKSB7CisgICAgICAgIHRlc3RGYWlsZWQoIndpbmRvdy53ZWJraXRSZXF1ZXN0RmlsZVN5
c3RlbSBpcyBub3QgYXZhaWxhYmxlLiIpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIHdlYmtpdFJlcXVlc3RGaWxlU3lzdGVtKFRFTVBPUkFS
WSwgZmlsZVN5c3RlbVNpemUsIGRpZEdldEZpbGVTeXN0ZW0sIGRpZEZhaWwpOworfQorCitmdW5j
dGlvbiBkaWRHZXRGaWxlU3lzdGVtKGZpbGVTeXN0ZW0pCit7CisgICAgZGVidWcoIkdvdCBGaWxl
U3lzdGVtIG9iamVjdC4iKTsKKyAgICBmaWxlU3lzdGVtLnJvb3QuZ2V0RmlsZShmaWxlTmFtZSwg
e2NyZWF0ZTogdHJ1ZX0sIGRpZENyZWF0ZUZpbGUsIGRpZEZhaWwpOworfQorCit2YXIgZmlsZUVu
dHJ5OworCitmdW5jdGlvbiBkaWRDcmVhdGVGaWxlKGVudHJ5KQoreworICAgIGRlYnVnKCJGaWxl
IGNyZWF0ZWQuIik7CisgICAgZmlsZUVudHJ5ID0gZW50cnk7CisgICAgc2hvdWxkQmVUcnVlKCJm
aWxlRW50cnkuaXNGaWxlIik7CisgICAgZmlsZUVudHJ5LmNyZWF0ZVdyaXRlcihkaWRHZXRGaWxl
V3JpdGVyLCBkaWRGYWlsKTsKK30KKworZnVuY3Rpb24gZGlkR2V0RmlsZVdyaXRlcih3cml0ZXIp
Cit7CisgICAgd3JpdGVyLnRydW5jYXRlKDApOworICAgIHdyaXRlci5vbmVycm9yID0gZnVuY3Rp
b24oKQorICAgIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiRmlsZVdyaXRlciBvcGVyYXRpb24gZmFp
bGVkLiIpOworICAgICAgICBlbmRUZXN0KCk7CisgICAgfTsKKyAgICB3cml0ZXIub253cml0ZSA9
IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBidWlsZGVyID0gbmV3IFdlYktpdEJsb2JC
dWlsZGVyKCk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKG1lc3NhZ2VUb1dyaXRlKTsKKyAgICAg
ICAgd3JpdGVyLndyaXRlKGJ1aWxkZXIuZ2V0QmxvYigpKTsKKyAgICAgICAgd3JpdGVyLm9ud3Jp
dGUgPSBkaWRXcml0ZUZpbGU7CisgICAgfTsKK30KKworZnVuY3Rpb24gZGlkV3JpdGVGaWxlKCkK
K3sKKyAgICBkZWJ1ZygiV3JvdGUgdG8gZmlsZS4iKTsKKyAgICBmaWxlRW50cnkuZmlsZShkaWRH
ZXRGaWxlLCBkaWRGYWlsKTsKK30KKwordmFyIGZpbGVPYmplY3Q7CisKK2Z1bmN0aW9uIGRpZEdl
dEZpbGUoZmlsZSkKK3sKKyAgICBkZWJ1ZygiR290IEZpbGUgb2JqZWN0LiIpOworICAgIGZpbGVP
YmplY3QgPSBmaWxlOworCisgICAgLy8gRGVsZXRlIHRoZSBmaWxlIG9iamVjdCBiZWZvcmUgaXQg
aXMgcmVhZC4gVGhpcyBzaG91bGQgY2F1c2UgdGhlIHN1YnNlcXVlbnQgcmVhZCBvcGVyYXRpb24K
KyAgICAvLyB0byBmYWlsIHJlbGlhYmx5LgorICAgIGZpbGVFbnRyeS5yZW1vdmUoZGlkUmVtb3Zl
RmlsZSwgZGlkRmFpbCk7Cit9CisKK2Z1bmN0aW9uIGRpZFJlbW92ZUZpbGUoKQoreworICAgIGRl
YnVnKCJGaWxlIGRlbGV0ZWQuIik7CisgICAgZmlsZUVudHJ5ID0gbnVsbDsgLy8gVG8gcHJldmVu
dCB0aGUgZmlsZSBmcm9tIGdldHRpbmcgZGVsZXRlZCBhZ2Fpbi4KKyAgICB2YXIgd3MgPSBuZXcg
V2ViU29ja2V0KCJ3czovLzEyNy4wLjAuMTo4ODgwL3dlYnNvY2tldC90ZXN0cy9oeWJpL2VjaG8i
KTsKKyAgICB3cy5vbm9wZW4gPSBmdW5jdGlvbigpCisgICAgeworICAgICAgICB3cy5zZW5kKGZp
bGVPYmplY3QpOyAvLyBUaGlzIG9wZXJhdGlvbiBzaG91bGQgZmFpbCBhbmQgdGhlIGNvbm5lY3Rp
b24gc2hvdWxkIGJlIGFib3J0ZWQuCisgICAgfTsKKyAgICB3cy5vbmNsb3NlID0gZnVuY3Rpb24o
ZXZlbnQpCisgICAgeworICAgICAgICBjbG9zZUV2ZW50ID0gZXZlbnQ7CisgICAgICAgIHNob3Vs
ZEJlRmFsc2UoImNsb3NlRXZlbnQud2FzQ2xlYW4iKTsKKyAgICAgICAgZW5kVGVzdCgpOworICAg
IH07Cit9CisKK2Z1bmN0aW9uIGRpZEZhaWwoZmlsZUVycm9yKQoreworICAgIHRlc3RGYWlsZWQo
IkZpbGVTeXN0ZW0gQVBJIG9wZXJhdGlvbiBmYWlsZWQ6IGVycm9yIGNvZGUgPSAiICsgZmlsZUVy
cm9yLmNvZGUpOworICAgIGVuZFRlc3QoKTsKK30KKworZnVuY3Rpb24gZW5kVGVzdCgpCit7Cisg
ICAgaWYgKGZpbGVFbnRyeSkgeworICAgICAgICBkZWJ1ZygiRGVsZXRpbmcgdGhlIGZpbGUuIik7
CisgICAgICAgIGZpbGVFbnRyeS5yZW1vdmUoZmluaXNoSlNUZXN0LCBmaW5pc2hKU1Rlc3QpOwor
ICAgIH0gZWxzZQorICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKK30KKworcnVuVGVzdCgpOworCit2
YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4u
Ly4uLy4uLy4uL2pzLXRlc3QtcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNv
Y2tldC90ZXN0cy9oeWJpL3NlbmQtZmlsZS1ibG9iLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtZmlsZS1ibG9iLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MDY0Y2I2NzAzNjRhMWE2Y2QyOTVjYzBiYjQ1NDRjZTc4NTMzNTA3YwotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1maWxl
LWJsb2IuaHRtbApAQCAtMCwwICsxLDEyMyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxo
ZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi8uLi9qcy10ZXN0LXJl
c291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vanMt
dGVzdC1yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+
Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4K
KzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KK2Rlc2NyaXB0aW9uKCJXZWJTb2NrZXQ6
IFNlbmQgYSBGaWxlLiIpOworCit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CitpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLm92ZXJy
aWRlUHJlZmVyZW5jZSgiV2ViS2l0SGl4aWU3NldlYlNvY2tldFByb3RvY29sRW5hYmxlZCIsIDAp
OworCitmdW5jdGlvbiBzdGFydHNXaXRoKHRhcmdldCwgcHJlZml4KQoreworICAgIHJldHVybiB0
YXJnZXQuaW5kZXhPZihwcmVmaXgpID09PSAwOworfQorCit2YXIgZmlsZVN5c3RlbVNpemUgPSAx
MDI0OwordmFyIGZpbGVOYW1lID0gIndlYnNvY2tldC1zZW5kLWZpbGUtYmxvYi50eHQiOwordmFy
IG1lc3NhZ2VUb1dyaXRlID0gIkhlbGxvLCB3b3JsZCEiOworCitmdW5jdGlvbiBydW5UZXN0KCkK
K3sKKyAgICBpZiAoIXdpbmRvdy53ZWJraXRSZXF1ZXN0RmlsZVN5c3RlbSkgeworICAgICAgICB0
ZXN0RmFpbGVkKCJ3aW5kb3cud2Via2l0UmVxdWVzdEZpbGVTeXN0ZW0gaXMgbm90IGF2YWlsYWJs
ZS4iKTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICB3ZWJraXRSZXF1ZXN0RmlsZVN5c3RlbShURU1QT1JBUlksIGZpbGVTeXN0ZW1TaXplLCBk
aWRHZXRGaWxlU3lzdGVtLCBkaWRGYWlsKTsKK30KKworZnVuY3Rpb24gZGlkR2V0RmlsZVN5c3Rl
bShmaWxlU3lzdGVtKQoreworICAgIGRlYnVnKCJHb3QgRmlsZVN5c3RlbSBvYmplY3QuIik7Cisg
ICAgZmlsZVN5c3RlbS5yb290LmdldEZpbGUoZmlsZU5hbWUsIHtjcmVhdGU6IHRydWV9LCBkaWRD
cmVhdGVGaWxlLCBkaWRGYWlsKTsKK30KKwordmFyIGZpbGVFbnRyeTsKKworZnVuY3Rpb24gZGlk
Q3JlYXRlRmlsZShlbnRyeSkKK3sKKyAgICBkZWJ1ZygiRmlsZSBjcmVhdGVkLiIpOworICAgIGZp
bGVFbnRyeSA9IGVudHJ5OworICAgIHNob3VsZEJlVHJ1ZSgiZmlsZUVudHJ5LmlzRmlsZSIpOwor
ICAgIGZpbGVFbnRyeS5jcmVhdGVXcml0ZXIoZGlkR2V0RmlsZVdyaXRlciwgZGlkRmFpbCk7Cit9
CisKK2Z1bmN0aW9uIGRpZEdldEZpbGVXcml0ZXIod3JpdGVyKQoreworICAgIHdyaXRlci50cnVu
Y2F0ZSgwKTsKKyAgICB3cml0ZXIub25lcnJvciA9IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAg
IHRlc3RGYWlsZWQoIkZpbGVXcml0ZXIgb3BlcmF0aW9uIGZhaWxlZC4iKTsKKyAgICAgICAgZW5k
VGVzdCgpOworICAgIH07CisgICAgd3JpdGVyLm9ud3JpdGUgPSBmdW5jdGlvbigpCisgICAgewor
ICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBXZWJLaXRCbG9iQnVpbGRlcigpOworICAgICAgICBi
dWlsZGVyLmFwcGVuZChtZXNzYWdlVG9Xcml0ZSk7CisgICAgICAgIHdyaXRlci53cml0ZShidWls
ZGVyLmdldEJsb2IoKSk7CisgICAgICAgIHdyaXRlci5vbndyaXRlID0gZGlkV3JpdGVGaWxlOwor
ICAgIH07Cit9CisKK2Z1bmN0aW9uIGRpZFdyaXRlRmlsZSgpCit7CisgICAgZGVidWcoIldyb3Rl
IHRvIGZpbGUuIik7CisgICAgZmlsZUVudHJ5LmZpbGUoZGlkR2V0RmlsZSwgZGlkRmFpbCk7Cit9
CisKK3ZhciBjbG9zZUV2ZW50OworCitmdW5jdGlvbiBkaWRHZXRGaWxlKGZpbGUpCit7CisgICAg
ZGVidWcoIkdvdCBGaWxlIG9iamVjdC4iKTsKKyAgICB2YXIgd3MgPSBuZXcgV2ViU29ja2V0KCJ3
czovLzEyNy4wLjAuMTo4ODgwL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtZmlsZS1ibG9iIik7
CisgICAgd3Mub25vcGVuID0gZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgd3Muc2VuZChmaWxl
KTsKKyAgICB9OworICAgIHdzLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsKKyAg
ICAgICAgdmFyIG1lc3NhZ2UgPSBldmVudC5kYXRhOworICAgICAgICBpZiAoc3RhcnRzV2l0aCht
ZXNzYWdlLCAiUEFTUyIpKQorICAgICAgICAgICAgdGVzdFBhc3NlZChtZXNzYWdlKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgdGVzdEZhaWxlZChtZXNzYWdlKTsKKyAgICB9OworICAgIHdz
Lm9uY2xvc2UgPSBmdW5jdGlvbihldmVudCkKKyAgICB7CisgICAgICAgIGNsb3NlRXZlbnQgPSBl
dmVudDsKKyAgICAgICAgc2hvdWxkQmVUcnVlKCJjbG9zZUV2ZW50Lndhc0NsZWFuIik7CisgICAg
ICAgIGVuZFRlc3QoKTsKKyAgICB9OworfQorCitmdW5jdGlvbiBkaWRGYWlsKGZpbGVFcnJvcikK
K3sKKyAgICB0ZXN0RmFpbGVkKCJGaWxlU3lzdGVtIEFQSSBvcGVyYXRpb24gZmFpbGVkOiBlcnJv
ciBjb2RlID0gIiArIGZpbGVFcnJvci5jb2RlKTsKKyAgICBlbmRUZXN0KCk7Cit9CisKK2Z1bmN0
aW9uIGVuZFRlc3QoKQoreworICAgIGlmIChmaWxlRW50cnkpIHsKKyAgICAgICAgZGVidWcoIkRl
bGV0aW5nIHRoZSBmaWxlLiIpOworICAgICAgICBmaWxlRW50cnkucmVtb3ZlKGZpbmlzaEpTVGVz
dCwgZmluaXNoSlNUZXN0KTsKKyAgICB9IGVsc2UKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7Cit9
CisKK3J1blRlc3QoKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi8uLi9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LXBv
c3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWZpbGUtYmxvYl93c2gucHkg
Yi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3NlbmQtZmlsZS1i
bG9iX3dzaC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYWE0NDA0NzFhZjgzYWIyNjI4Njc1MWMzZTE4ODgyZjQ4
NGRiNzhjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2Nr
ZXQvdGVzdHMvaHliaS9zZW5kLWZpbGUtYmxvYl93c2gucHkKQEAgLTAsMCArMSwyMiBAQAorZnJv
bSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IGNvbW1vbgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1w
b3J0IG1zZ3V0aWwKKworCitkZWYgd2ViX3NvY2tldF9kb19leHRyYV9oYW5kc2hha2UocmVxdWVz
dCk6CisgICAgcGFzcyAjIEFsd2F5cyBhY2NlcHQuCisKKworZGVmIHdlYl9zb2NrZXRfdHJhbnNm
ZXJfZGF0YShyZXF1ZXN0KToKKyAgICBleHBlY3RlZF9tZXNzYWdlcyA9IFsnSGVsbG8sIHdvcmxk
ISddCisKKyAgICBmb3IgdGVzdF9udW1iZXIsIGV4cGVjdGVkX21lc3NhZ2UgaW4gZW51bWVyYXRl
KGV4cGVjdGVkX21lc3NhZ2VzKToKKyAgICAgICAgIyBGSVhNRTogVXNlIGJldHRlciBBUEkuCisg
ICAgICAgIG9wY29kZSwgcGF5bG9hZCwgZmluYWwsIHVudXNlZF9yZXNlcnZlZDEsIHVudXNlZF9y
ZXNlcnZlZDIsIHVudXNlZF9yZXNlcnZlZDMgPSByZXF1ZXN0LndzX3N0cmVhbS5fcmVjZWl2ZV9m
cmFtZSgpCisgICAgICAgIGlmIG9wY29kZSA9PSBjb21tb24uT1BDT0RFX0JJTkFSWSBhbmQgcGF5
bG9hZCA9PSBleHBlY3RlZF9tZXNzYWdlIGFuZCBmaW5hbDoKKyAgICAgICAgICAgIG1zZ3V0aWwu
c2VuZF9tZXNzYWdlKHJlcXVlc3QsICdQQVNTOiBNZXNzYWdlICMlZC4nICUgdGVzdF9udW1iZXIp
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtc2d1dGlsLnNlbmRfbWVzc2FnZShyZXF1ZXN0
LCAnRkFJTDogTWVzc2FnZSAjJWQ6IFJlY2VpdmVkIHVuZXhwZWN0ZWQgZnJhbWU6IG9wY29kZSA9
ICVyLCBwYXlsb2FkID0gJXIsIGZpbmFsID0gJXInICUgKHRlc3RfbnVtYmVyLCBvcGNvZGUsIHBh
eWxvYWQsIGZpbmFsKSkKKworCitkZWYgYWxsX2Rpc3RpbmN0X2J5dGVzKCk6CisgICAgcmV0dXJu
ICcnLmpvaW4oW2NocihpKSBmb3IgaSBpbiB4cmFuZ2UoMjU2KV0pCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3dvcmtlcnMvcmVzb3VyY2Vz
L3NlbmQtYmxvYi5qcyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5
Ymkvd29ya2Vycy9yZXNvdXJjZXMvc2VuZC1ibG9iLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNlYTA1MDNhMDk2
MDIzNTJmMzkzMTkwMjYzNzk5ODI1MTAzMTEzYmYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3dvcmtlcnMvcmVzb3VyY2VzL3Nl
bmQtYmxvYi5qcwpAQCAtMCwwICsxLDUxIEBACitmdW5jdGlvbiBzdGFydHNXaXRoKHRhcmdldCwg
cHJlZml4KQoreworICAgIHJldHVybiB0YXJnZXQuaW5kZXhPZihwcmVmaXgpID09PSAwOworfQor
CitmdW5jdGlvbiBjcmVhdGVCbG9iQ29udGFpbmluZ0hlbGxvV29ybGQoKQoreworICAgIHZhciBi
dWlsZGVyID0gbmV3IFdlYktpdEJsb2JCdWlsZGVyKCk7CisgICAgYnVpbGRlci5hcHBlbmQoIkhl
bGxvLCB3b3JsZCEiKTsKKyAgICByZXR1cm4gYnVpbGRlci5nZXRCbG9iKCk7Cit9CisKK2Z1bmN0
aW9uIGNyZWF0ZUVtcHR5QmxvYigpCit7CisgICAgdmFyIGJ1aWxkZXIgPSBuZXcgV2ViS2l0Qmxv
YkJ1aWxkZXIoKTsKKyAgICByZXR1cm4gYnVpbGRlci5nZXRCbG9iKCk7Cit9CisKK2Z1bmN0aW9u
IGNyZWF0ZUJsb2JDb250YWluaW5nQWxsRGlzdGluY3RCeXRlcygpCit7CisgICAgdmFyIGFycmF5
ID0gbmV3IFVpbnQ4QXJyYXkoMjU2KTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI1NjsgKytp
KQorICAgICAgICBhcnJheVtpXSA9IGk7CisgICAgdmFyIGJ1aWxkZXIgPSBuZXcgV2ViS2l0Qmxv
YkJ1aWxkZXIoKTsKKyAgICBidWlsZGVyLmFwcGVuZChhcnJheS5idWZmZXIpOworICAgIHJldHVy
biBidWlsZGVyLmdldEJsb2IoKTsKK30KKwordmFyIHVybCA9ICJ3czovLzEyNy4wLjAuMTo4ODgw
L3dlYnNvY2tldC90ZXN0cy9oeWJpL3dvcmtlcnMvcmVzb3VyY2VzL3NlbmQtYmxvYiI7Cit2YXIg
d3MgPSBuZXcgV2ViU29ja2V0KHVybCk7CisKK3dzLm9ub3BlbiA9IGZ1bmN0aW9uKCkKK3sKKyAg
ICB3cy5zZW5kKGNyZWF0ZUJsb2JDb250YWluaW5nSGVsbG9Xb3JsZCgpKTsKKyAgICB3cy5zZW5k
KGNyZWF0ZUVtcHR5QmxvYigpKTsKKyAgICB3cy5zZW5kKGNyZWF0ZUJsb2JDb250YWluaW5nQWxs
RGlzdGluY3RCeXRlcygpKTsKK307CisKK3dzLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KQor
eworICAgIHBvc3RNZXNzYWdlKGV2ZW50LmRhdGEpOworfTsKKword3Mub25jbG9zZSA9IGZ1bmN0
aW9uKGNsb3NlRXZlbnQpCit7CisgICAgaWYgKGNsb3NlRXZlbnQud2FzQ2xlYW4gPT09IHRydWUp
CisgICAgICAgIHBvc3RNZXNzYWdlKCJQQVNTOiBjbG9zZUV2ZW50Lndhc0NsZWFuIGlzIHRydWUu
Iik7CisgICAgZWxzZQorICAgICAgICBwb3N0TWVzc2FnZSgiRkFJTDogY2xvc2VFdmVudC53YXND
bGVhbiBzaG91bGQgYmUgdHJ1ZSwgYnV0IHdhczogIiArIGNsb3NlRXZlbnQud2FzQ2xlYW4pOwor
ICAgIHBvc3RNZXNzYWdlKCJET05FIik7Cit9OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS93b3JrZXJzL3Jlc291cmNlcy9zZW5kLWJsb2Jf
d3NoLnB5IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS93b3Jr
ZXJzL3Jlc291cmNlcy9zZW5kLWJsb2Jfd3NoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAyNGUzZjRkMDc5NDVj
OTJjYWFiZGMwMzdlYzUwMDgyNGE0MmExYTIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3dvcmtlcnMvcmVzb3VyY2VzL3NlbmQt
YmxvYl93c2gucHkKQEAgLTAsMCArMSwyMSBAQAorZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0
IGNvbW1vbgorZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IG1zZ3V0aWwKKworCitkZWYgd2Vi
X3NvY2tldF9kb19leHRyYV9oYW5kc2hha2UocmVxdWVzdCk6CisgICAgcGFzcyAjIEFsd2F5cyBh
Y2NlcHQuCisKKworZGVmIHdlYl9zb2NrZXRfdHJhbnNmZXJfZGF0YShyZXF1ZXN0KToKKyAgICBl
eHBlY3RlZF9tZXNzYWdlcyA9IFsnSGVsbG8sIHdvcmxkIScsICcnLCBhbGxfZGlzdGluY3RfYnl0
ZXMoKV0KKworICAgIGZvciB0ZXN0X251bWJlciwgZXhwZWN0ZWRfbWVzc2FnZSBpbiBlbnVtZXJh
dGUoZXhwZWN0ZWRfbWVzc2FnZXMpOgorICAgICAgICBtZXNzYWdlID0gbXNndXRpbC5yZWNlaXZl
X21lc3NhZ2UocmVxdWVzdCkKKyAgICAgICAgaWYgdHlwZShtZXNzYWdlKSA9PSBzdHIgYW5kIG1l
c3NhZ2UgPT0gZXhwZWN0ZWRfbWVzc2FnZToKKyAgICAgICAgICAgIG1zZ3V0aWwuc2VuZF9tZXNz
YWdlKHJlcXVlc3QsICdQQVNTOiBNZXNzYWdlICMlZC4nICUgdGVzdF9udW1iZXIpCisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICBtc2d1dGlsLnNlbmRfbWVzc2FnZShyZXF1ZXN0LCAnRkFJTDog
TWVzc2FnZSAjJWQ6IFJlY2VpdmVkIHVuZXhwZWN0ZWQgbWVzc2FnZTogJXInICUgKHRlc3RfbnVt
YmVyLCBtZXNzYWdlKSkKKworCitkZWYgYWxsX2Rpc3RpbmN0X2J5dGVzKCk6CisgICAgcmV0dXJu
ICcnLmpvaW4oW2NocihpKSBmb3IgaSBpbiB4cmFuZ2UoMjU2KV0pCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3dvcmtlcnMvc2VuZC1ibG9i
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5
Ymkvd29ya2Vycy9zZW5kLWJsb2ItZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYzM2JiN2UzOWZm
NTU1NmEzM2ExMTQ4ZjUxNDgwOWNlNTRjZjY5NjgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3dvcmtlcnMvc2VuZC1ibG9iLWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDEzIEBACitXZWJTb2NrZXQ6IFNlbmQgQmxvYnMgaW4gV2Vi
IFdvcmtlcnMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIg
bWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworUEFTUyBQQVNTOiBNZXNz
YWdlICMwLgorUEFTUyBQQVNTOiBNZXNzYWdlICMxLgorUEFTUyBQQVNTOiBNZXNzYWdlICMyLgor
UEFTUyBQQVNTOiBjbG9zZUV2ZW50Lndhc0NsZWFuIGlzIHRydWUuCitET05FCitQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS93b3JrZXJzL3NlbmQtYmxv
Yi5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS93b3Jr
ZXJzL3NlbmQtYmxvYi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE1NzQ2ZWIyN2Y0NzFiMjA0YWVlNjNhOWI1
MjE2MDUxMDhjYTQzYjgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3dlYnNvY2tldC90ZXN0cy9oeWJpL3dvcmtlcnMvc2VuZC1ibG9iLmh0bWwKQEAgLTAsMCArMSw0
MCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNo
ZWV0IiBocmVmPSIuLi8uLi8uLi8uLi8uLi9qcy10ZXN0LXJlc291cmNlcy9qcy10ZXN0LXN0eWxl
LmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vLi4vanMtdGVzdC1yZXNvdXJjZXMvanMt
dGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJkZXNjcmlw
dGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgdHlwZT0idGV4
dC9qYXZhc2NyaXB0Ij4KK2Rlc2NyaXB0aW9uKCJXZWJTb2NrZXQ6IFNlbmQgQmxvYnMgaW4gV2Vi
IFdvcmtlcnMuIik7CisKK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK2lmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIub3ZlcnJpZGVQ
cmVmZXJlbmNlKCJXZWJLaXRIaXhpZTc2V2ViU29ja2V0UHJvdG9jb2xFbmFibGVkIiwgMCk7CisK
K2Z1bmN0aW9uIHN0YXJ0c1dpdGgoc3RyLCBwcmVmaXgpCit7CisgICAgcmV0dXJuIHN0ci5pbmRl
eE9mKHByZWZpeCkgPT0gMDsKK30KKwordmFyIHdvcmtlciA9IG5ldyBXb3JrZXIoInJlc291cmNl
cy9zZW5kLWJsb2IuanMiKTsKK3dvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZXZlbnQpCit7
CisgICAgdmFyIG1lc3NhZ2UgPSBldmVudC5kYXRhOworICAgIGlmIChzdGFydHNXaXRoKG1lc3Nh
Z2UsICJQQVNTIikpCisgICAgICAgIHRlc3RQYXNzZWQobWVzc2FnZSk7CisgICAgZWxzZSBpZiAo
c3RhcnRzV2l0aChtZXNzYWdlLCAiRkFJTCIpKQorICAgICAgICB0ZXN0RmFpbGVkKG1lc3NhZ2Up
CisgICAgZWxzZQorICAgICAgICBkZWJ1ZyhtZXNzYWdlKTsKKyAgICBpZiAobWVzc2FnZSA9PT0g
IkRPTkUiKQorICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKK307CisKK3ZhciBzdWNjZXNzZnVsbHlQ
YXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4vLi4vanMt
dGVzdC1yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkIGIvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKaW5kZXggZTliNmYxYjAxMDAxNWI1ZDc5ZmQ1ZjY2
ZjY4OWRlODMzZWJhNTQ0Yi4uNzFlYjFiZDhlMmQyZjk1OTVhODU1Mjc1NTM4MWNhOWZhNGVkMWE4
MiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKKysrIGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKQEAgLTM2Niw2ICszNjYsOCBAQCBmYXN0L2Zp
bGVzeXN0ZW0KIGh0dHAvdGVzdHMvZmlsZXN5c3RlbQogaHR0cC90ZXN0cy9sb2NhbC9maWxlYXBp
CiBodHRwL3Rlc3RzL3NlY3VyaXR5L2ZpbGVzeXN0ZW0taWZyYW1lLWZyb20tcmVtb3RlLmh0bWwK
K2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1maWxlLWJsb2IuaHRtbAoraHR0
cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWZpbGUtYmxvYi1mYWlsLmh0bWwKIAog
IyBSZXF1aXJlcyBXZWJQIHN1cHBvcnQuCiBmYXN0L2ltYWdlcy93ZWJwLWltYWdlLWRlY29kaW5n
Lmh0bWwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkIGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQKaW5kZXggMTU2ZGJjY2FjZDc5NmU5YzNlMzJk
OTBmZWFlM2NkMWJiZjVjZjVmNS4uOTY5MzkxOTAxNTY5YjkxMDZmODQzYmNjNzUzZWYwMTk2MDA0
M2JhZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQKKysrIGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQKQEAgLTI3Nyw2ICsyNzcsOCBAQCBodHRw
L3Rlc3RzL21lZGlhL3ZpZGVvLWJ1ZmZlcmVkLmh0bWwKIGZhc3QvZmlsZXN5c3RlbQogaHR0cC90
ZXN0cy9maWxlc3lzdGVtCiBodHRwL3Rlc3RzL3NlY3VyaXR5L2ZpbGVzeXN0ZW0taWZyYW1lLWZy
b20tcmVtb3RlLmh0bWwKK2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1maWxl
LWJsb2IuaHRtbAoraHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWZpbGUtYmxv
Yi1mYWlsLmh0bWwKIAogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDYyMjMKICMgVGhlIFdlYktpdCBwbHVnaW4gaW1wbGVtZW50YXRpb24gZG9lcyBub3Qgc3VwcG9y
dCBpZnJhbWUgc2hpbXMuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lw
cGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZAppbmRleCAzNGE0Y2ZkMjI3NzA5
NGQ2OWZiYTFiMTIwN2Y3NTU3NTE3OTIyYmJjLi45YmNkY2QyYzg5YTkwNDEyMThlOGQwZjhiZjA2
NmMxYmYwYjYzZjMwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lwcGVk
CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQKQEAgLTk5LDYgKzk5LDggQEAg
c3ZnL3dlYmFyY2hpdmUKIGZhc3QvZmlsZXN5c3RlbQogaHR0cC90ZXN0cy9maWxlc3lzdGVtCiBo
dHRwL3Rlc3RzL3NlY3VyaXR5L2ZpbGVzeXN0ZW0taWZyYW1lLWZyb20tcmVtb3RlLmh0bWwKK2h0
dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1maWxlLWJsb2IuaHRtbAoraHR0cC90
ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWZpbGUtYmxvYi1mYWlsLmh0bWwKIAogIyBF
TkFCTEUoUVVPVEEpIGlzIGRpc2FibGVkLgogc3RvcmFnZS9zdG9yYWdlaW5mby1xdWVyeS11c2Fn
ZS5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vU2tpcHBlZCBiL0xh
eW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCmluZGV4IDFlNGNjOGNhYTcwZDkxY2I4Njlj
YjI3MGIzMThjNjVjMzc2MDVlNjguLjNkM2I2NGY5MDc2NzUxYmNiNDBiZDdhZjUwM2U1ZjEzZDY4
ZDY4ZjUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCisrKyBi
L0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCkBAIC0xMjAyLDYgKzEyMDIsOCBAQCBm
YXN0L3BhcnNlci9wcmUtaHRtbDUtcGFyc2VyLXF1aXJrcy5odG1sCiBmYXN0L2ZpbGVzeXN0ZW0K
IGh0dHAvdGVzdHMvZmlsZXN5c3RlbQogaHR0cC90ZXN0cy9zZWN1cml0eS9maWxlc3lzdGVtLWlm
cmFtZS1mcm9tLXJlbW90ZS5odG1sCitodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3Nl
bmQtZmlsZS1ibG9iLmh0bWwKK2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkvc2VuZC1m
aWxlLWJsb2ItZmFpbC5odG1sCiAKICMgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om5vZGVzRnJvbVJl
Y3QgaXMgbm90IHN1cHBvcnRlZC4KIGZhc3QvZG9tL25vZGVzRnJvbVJlY3QtYmFzaWMuaHRtbApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCmluZGV4IGQyY2NlMjZiNDJiOGJmMzdhNTM0NWYyYThkNTU0ZTNmMDQ1MWQxNmYuLmQ5
ZDc5YzE4MDdjMmRlM2Q2OTQxYTc2NWQ4NmYxZDk3NTZmNmU0MGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NCBAQAorMjAxMS0wOS0wMiAgWXV0YSBLaXRhbXVyYSAgPHl1dGFrQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBXZWJTb2NrZXQ6IFNlbmQgQmxvYiBhcyBXZWJTb2NrZXQgYmluYXJ5IG1l
c3NhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3
NDY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVz
dHM6IGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2hpeGllNzYvc2VuZC1lbXB0eS5odG1sCisg
ICAgICAgICAgICAgICBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oaXhpZTc2L3NlbmQtb2Jq
ZWN0Lmh0bWwKKyAgICAgICAgICAgICAgIGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5Ymkv
c2VuZC1ibG9iLmh0bWwKKyAgICAgICAgICAgICAgIGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3Rz
L2h5Ymkvc2VuZC1lbXB0eS5odG1sCisgICAgICAgICAgICAgICBodHRwL3Rlc3RzL3dlYnNvY2tl
dC90ZXN0cy9oeWJpL3NlbmQtZmlsZS1ibG9iLWZhaWwuaHRtbAorICAgICAgICAgICAgICAgaHR0
cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvaHliaS9zZW5kLWZpbGUtYmxvYi5odG1sCisgICAgICAg
ICAgICAgICBodHRwL3Rlc3RzL3dlYnNvY2tldC90ZXN0cy9oeWJpL3dvcmtlcnMvc2VuZC1ibG9i
Lmh0bWwKKyAgICAgICAgICAgICAgIGh0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL2h5YmkvYnVm
ZmVyZWRBbW91bnQtYWZ0ZXItY2xvc2UuaHRtbCAodXBkYXRlZCkKKworICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTV2ViU29ja2V0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViU29j
a2V0OjpzZW5kKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhXZWJTb2NrZXRDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhXZWJTb2NrZXQ6OnNlbmRDYWxsYmFjayk6Cisg
ICAgICAgICogd2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oOgorICAgICAg
ICAqIHdlYnNvY2tldHMvV2ViU29ja2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tl
dDo6c2VuZCk6CisgICAgICAgICogd2Vic29ja2V0cy9XZWJTb2NrZXQuaDoKKyAgICAgICAgKiB3
ZWJzb2NrZXRzL1dlYlNvY2tldC5pZGw6CisgICAgICAgIEZpeGluZyBjb2RlIGdlbmVyYXRvciBk
aWQgbm90IHNvdW5kIGVhc3ksIGJlY2F1c2UgdGhlcmUgYXJlIHNvbWUgY2xhc3NlcyBkZXBlbmRp
bmcgb24KKyAgICAgICAgYnJva2VuIGJlaGF2aW9yIG9mIGN1cnJlbnQgY29kZSBnZW5lcmF0b3Ig
KG9uZSBzdWNoIGV4YW1wbGUgaXMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKS4KKyAgICAgICAg
QXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCwgbmV3IGN1c3RvbSBoYW5kbGVycyBmb3Igc2VuZCgp
IGFyZSBhZGRlZC4KKyAgICAgICAgKiB3ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Q2hhbm5lbDo6c2VuZCk6CisgICAgICAgICogd2Vi
c29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmg6CisgICAgICAgICogd2Vic29ja2V0cy9Xb3JrZXJU
aHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJU
aHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6c2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpXb3Jr
ZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6UGVlcjo6c2VuZCk6CisgICAgICAgIChXZWJD
b3JlOjpXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6bWFpblRocmVhZFNlbmRCbG9i
KToKKyAgICAgICAgQSBCbG9iIGNhbiBiZSBkZXNlcmlhbGl6ZWQgZnJvbSB1cmwsIHR5cGUgYW5k
IHNpemUuCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bDo6QnJpZGdlOjpzZW5kKToKKyAgICAgICAgS1VSTCwgU3RyaW5nIGFuZCBsb25nIGxvbmcgKGNv
cnJlc3BvbmRpbmcgdG8gdXJsLCB0eXBlIGFuZCBzaXplLCByZXNwZWN0aXZlbHkpIGNhbiBiZSBw
YXNzZWQKKyAgICAgICAgc2FmZWx5IGFjcm9zcyB0aHJlYWRzLgorICAgICAgICAqIHdlYnNvY2tl
dHMvV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaDoKKwogMjAxMS0wOS0wMSAgVGFr
YXNoaSBUb3lvc2hpbWEgIDx0b3lvc2hpbUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW1dlYlNv
Y2tldF0gSW1wbGVtZW50IFdlYlNvY2tldDo6Y2xvc2UoKSBjb2RlIGFuZCByZWFzb24gaGFuZGxp
bmcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYlNvY2tldEN1
c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYlNvY2tldEN1c3RvbS5j
cHAKaW5kZXggNmIzNTk4YjJkZmZhYWIzNzI4NjUxZjBiNWM2NjFkZTA2MTAyNmNmZi4uNGY5MmY0
MDdiZTg1OTI5MmUyZTE4ZGIyZjk1ZWM5ZjQ4ZWUyNWU4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q3VzdG9tLmNwcApAQCAtMzYsOCArMzYsOSBAQAog
I2luY2x1ZGUgIkpTV2ViU29ja2V0LmgiCiAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0j
aW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIkpTQmxvYi5oIgogI2luY2x1ZGUgIkpTRXZlbnRM
aXN0ZW5lci5oIgorI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJXZWJTb2NrZXQuaCIKICNp
bmNsdWRlICJXZWJTb2NrZXRDaGFubmVsLmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgpA
QCAtODgsNiArODksMzAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1dlYlNvY2tl
dENvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1dlYlNvY2tldChFeGVjU3QKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKENSRUFURV9ET01fV1JBUFBFUihleGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9i
YWxPYmplY3QoKSwgV2ViU29ja2V0LCB3ZWJTb2NrZXQuZ2V0KCkpKTsKIH0KIAorSlNWYWx1ZSBK
U1dlYlNvY2tldDo6c2VuZChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKCFleGVjLT5hcmd1
bWVudENvdW50KCkpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVN5bnRh
eEVycm9yKGV4ZWMsICJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpKTsKKworICAgIEpTVmFsdWUgbWVz
c2FnZSA9IGV4ZWMtPmFyZ3VtZW50KDApOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAg
IGJvb2wgcmVzdWx0OworICAgIGlmIChtZXNzYWdlLmluaGVyaXRzKCZKU0Jsb2I6OnNfaW5mbykp
CisgICAgICAgIHJlc3VsdCA9IGltcGwoKS0+c2VuZCh0b0Jsb2IobWVzc2FnZSksIGVjKTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgU3RyaW5nIHN0cmluZ01lc3NhZ2UgPSB1c3RyaW5nVG9TdHJpbmco
bWVzc2FnZS50b1N0cmluZyhleGVjKSk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICByZXN1bHQgPSBp
bXBsKCktPnNlbmQoc3RyaW5nTWVzc2FnZSwgZWMpOworICAgIH0KKyAgICBpZiAoZWMpIHsKKyAg
ICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CisgICAgfQorCisgICAgcmV0dXJuIGpzQm9vbGVhbihyZXN1bHQpOworfQorCiBKU1Zh
bHVlIEpTV2ViU29ja2V0OjpjbG9zZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBpbXBsZW1lbnQgW0NsYW1wXSBmb3IgSURMIGJpbmRpbmcgY29kZSBnZW5lcmF0
b3IsIGFuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
V2ViU29ja2V0Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OFdlYlNvY2tldEN1c3RvbS5jcHAKaW5kZXggZDdkZmExMDlmNTY1YmFhYzJkNjFmZjFiY2JjYTRk
ZTI3MDJlZWQxNy4uZDIzNzA0NzczODk4MjYxY2M1MDA0NjIzYmI2NTY4YmZlMjYxNGFiYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViU29ja2V0Q3Vz
dG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJTb2Nr
ZXRDdXN0b20uY3BwCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNs
dWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4Qmxv
Yi5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKICNpbmNsdWRlICJWOFV0aWxpdGllcy5oIgogI2lu
Y2x1ZGUgIldlYlNvY2tldC5oIgpAQCAtMTExLDYgKzExMiwzNCBAQCB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gVjhXZWJTb2NrZXQ6OmNvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50
cyYgYXJncwogICAgIHJldHVybiBhcmdzLkhvbGRlcigpOwogfQogCit2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gVjhXZWJTb2NrZXQ6OnNlbmRDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdz
KQoreworICAgIElOQ19TVEFUUygiRE9NLldlYlNvY2tldC5zZW5kKCkiKTsKKworICAgIGlmICgh
YXJncy5MZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIk5vdCBlbm91Z2ggYXJn
dW1lbnRzIiwgVjhQcm94eTo6U3ludGF4RXJyb3IpOworCisgICAgV2ViU29ja2V0KiB3ZWJTb2Nr
ZXQgPSBWOFdlYlNvY2tldDo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CisgICAgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IG1lc3NhZ2UgPSBhcmdzWzBdOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OworICAgIGJvb2wgcmVzdWx0OworICAgIGlmIChWOEJsb2I6Okhhc0luc3RhbmNlKG1lc3NhZ2Up
KSB7CisgICAgICAgIEJsb2IqIGJsb2IgPSBWOEJsb2I6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6
Ok9iamVjdD46OkNhc3QobWVzc2FnZSkpOworICAgICAgICBBU1NFUlQoYmxvYik7CisgICAgICAg
IHJlc3VsdCA9IHdlYlNvY2tldC0+c2VuZChibG9iLCBlYyk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgdjg6OlRyeUNhdGNoIHRyeUNhdGNoOworICAgICAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+
IHN0cmluZ01lc3NhZ2UgPSBtZXNzYWdlLT5Ub1N0cmluZygpOworICAgICAgICBpZiAodHJ5Q2F0
Y2guSGFzQ2F1Z2h0KCkpCisgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcih0cnlDYXRjaC5F
eGNlcHRpb24oKSk7CisgICAgICAgIHJlc3VsdCA9IHdlYlNvY2tldC0+c2VuZCh0b1dlYkNvcmVT
dHJpbmcobWVzc2FnZSksIGVjKTsKKyAgICB9CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcihlYyk7CisKKyAgICByZXR1cm4gdjhCb29sZWFuKHJlc3VsdCk7Cit9CisKIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBWOFdlYlNvY2tldDo6Y2xvc2VDYWxsYmFjayhjb25zdCB2ODo6
QXJndW1lbnRzJiBhcmdzKQogewogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaW1wbGVtZW50IFtD
bGFtcF0gZm9yIElETCBiaW5kaW5nIGNvZGUgZ2VuZXJhdG9yLCBhbmQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaCBiL1Nv
dXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaAppbmRl
eCAwOWY4MWI1MDdhMTAwMWQ2ZTdlYTU5MTcyMTE2ZWE5ZTlmZjdiZDk3Li5jYTBiMzcyYWQ5Y2Yy
YzAxMDdjYzg2NDgwMGEzN2U2YmQ0MjdmZjMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93
ZWJzb2NrZXRzL1RocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvd2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oCkBAIC0zOSw2ICszOSw3
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQmxvYjsKIGNsYXNzIEtVUkw7CiBj
bGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xhc3MgV2ViU29ja2V0Q2hhbm5lbENsaWVu
dDsKQEAgLTUzLDYgKzU0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBjb25uZWN0KGNv
bnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHByb3RvY29sKSA9IDA7CiAgICAgdmlydHVhbCBTdHJp
bmcgc3VicHJvdG9jb2woKSA9IDA7IC8vIFdpbGwgYmUgYXZhaWxhYmxlIGFmdGVyIGRpZENvbm5l
Y3QoKSBjYWxsYmFjayBpcyBpbnZva2VkLgogICAgIHZpcnR1YWwgYm9vbCBzZW5kKGNvbnN0IFN0
cmluZyYgbWVzc2FnZSkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBzZW5kKGNvbnN0IEJsb2ImKSA9
IDA7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGJ1ZmZlcmVkQW1vdW50KCkgY29uc3QgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZShpbnQgY29kZSwgY29uc3QgU3RyaW5nJiByZWFzb24p
ID0gMDsKICAgICAvLyBMb2cgdGhlIHJlYXNvbiB0ZXh0IGFuZCBjbG9zZSB0aGUgY29ubmVjdGlv
bi4gV2lsbCBjYWxsIGRpZENsb3NlKCkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJz
b2NrZXRzL1dlYlNvY2tldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tl
dC5jcHAKaW5kZXggODhmMmVlZGQ4ZmIyNDBhYmM2YTFlMThjMzQ4ZGYxYTU5ZjBlOWRiYy4uZTc3
MWI3OTMyYjMxODJkNWIyMjA4ZTNkYjI0ODI3NGQwYmUyNzkwMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dl
YnNvY2tldHMvV2ViU29ja2V0LmNwcApAQCAtMjY1LDYgKzI2NSwyNCBAQCBib29sIFdlYlNvY2tl
dDo6c2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIHJl
dHVybiBtX2NoYW5uZWwtPnNlbmQobWVzc2FnZSk7CiB9CiAKK2Jvb2wgV2ViU29ja2V0OjpzZW5k
KEJsb2IqIGJpbmFyeURhdGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIExPRyhOZXR3b3Jr
LCAiV2ViU29ja2V0ICVwIHNlbmQgYmxvYiAlcyIsIHRoaXMsIGJpbmFyeURhdGEtPnVybCgpLnN0
cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIEFTU0VSVChiaW5hcnlEYXRhKTsKKyAgICBpZiAo
bV91c2VIaXhpZTc2UHJvdG9jb2wpCisgICAgICAgIHJldHVybiBzZW5kKCJbb2JqZWN0IEJsb2Jd
IiwgZWMpOworICAgIGlmIChtX3N0YXRlID09IENPTk5FQ1RJTkcpIHsKKyAgICAgICAgZWMgPSBJ
TlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAo
bV9zdGF0ZSA9PSBDTE9TSU5HIHx8IG1fc3RhdGUgPT0gQ0xPU0VEKSB7CisgICAgICAgIG1fYnVm
ZmVyZWRBbW91bnRBZnRlckNsb3NlICs9IGJpbmFyeURhdGEtPnNpemUoKSArIGdldEZyYW1pbmdP
dmVyaGVhZChiaW5hcnlEYXRhLT5zaXplKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIEFTU0VSVChtX2NoYW5uZWwpOworICAgIHJldHVybiBtX2NoYW5uZWwtPnNlbmQoKmJp
bmFyeURhdGEpOworfQorCiB2b2lkIFdlYlNvY2tldDo6Y2xvc2UoaW50IGNvZGUsIGNvbnN0IFN0
cmluZyYgcmVhc29uLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoY29kZSA9PSBXZWJT
b2NrZXRDaGFubmVsOjpDbG9zZUV2ZW50Q29kZU5vdFNwZWNpZmllZCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmggYi9Tb3VyY2UvV2ViQ29yZS93ZWJz
b2NrZXRzL1dlYlNvY2tldC5oCmluZGV4IDA0YzI3YzM1Y2ZkNDAyNjM2OTFiNWZjYzk3NjMyNTU3
OWE1NWUxOTMuLmNiYjhkNjAzZWY4Nzg3YmY5ZDY1NmM2NzIzMDU3NjJjN2ZjYWQ5ZGIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuaApAQCAtNDYsNiArNDYsNyBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEJsb2I7CiBjbGFzcyBUaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbDsKIAogY2xhc3MgV2ViU29ja2V0IDogcHVibGljIFJlZkNvdW50ZWQ8V2ViU29ja2V0
PiwgcHVibGljIEV2ZW50VGFyZ2V0LCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0LCBwdWJsaWMgV2Vi
U29ja2V0Q2hhbm5lbENsaWVudCB7CkBAIC02Nyw2ICs2OCw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IGNvbm5lY3QoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwcm90b2Nv
bHMsIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIGJvb2wgc2VuZChjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBib29sIHNlbmQoQmxvYiosIEV4Y2VwdGlvbkNvZGUm
KTsKIAogICAgIHZvaWQgY2xvc2UoaW50IGNvZGUsIGNvbnN0IFN0cmluZyYgcmVhc29uLCBFeGNl
cHRpb25Db2RlJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV2Vi
U29ja2V0LmlkbCBiL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmlkbAppbmRl
eCA5MzZlNjAzZjM2NTc2MzA0YzRmYjY5NWYyMWRjOGQxYmI5MjA4ODQyLi4wZGMyM2U3ZjdhMjgx
Yjg5ZDA0OWEzZTBkMTMxMjkxNDhjZGY5Yjg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93
ZWJzb2NrZXRzL1dlYlNvY2tldC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9X
ZWJTb2NrZXQuaWRsCkBAIC02Myw3ICs2MywxNSBAQCBtb2R1bGUgd2Vic29ja2V0cyB7CiAgICAg
ICAgIGF0dHJpYnV0ZSBbQ29udmVydE51bGxTdHJpbmdUbz1VbmRlZmluZWRdIERPTVN0cmluZyBi
aW5hcnlUeXBlCiAgICAgICAgICAgICBzZXR0ZXIgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAKLSAg
ICAgICAgW1JlcXVpcmVzQWxsQXJndW1lbnRzXSBib29sZWFuIHNlbmQoaW4gRE9NU3RyaW5nIGRh
dGEpIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICAvLyBGSVhNRTogVXNlIG92ZXJsb2Fk
aW5nIHByb3ZpZGVkIGJ5IG91ciBJREwgY29kZSBnZW5lcmF0b3IuCisgICAgICAgIC8vIEFjY29y
ZGluZyB0byBXZWIgSURMIHNwZWNpZmljYXRpb24sIG92ZXJsb2FkZWQgZnVuY3Rpb24gd2l0aCBE
T01TdHJpbmcgYXJndW1lbnQKKyAgICAgICAgLy8gc2hvdWxkIGFjY2VwdCBhbnl0aGluZyB0aGF0
IGNhbiBiZSBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcgKGluY2x1ZGluZyBudW1iZXJzLAorICAgICAg
ICAvLyBib29sZWFucywgbnVsbCwgdW5kZWZpbmVkIGFuZCBvYmplY3RzIGV4Y2VwdCBCbG9iKS4g
Q3VycmVudCBjb2RlIGdlbmVyYXRvciBkb2VzCisgICAgICAgIC8vIG5vdCBoYW5kbGUgdGhpcyBy
dWxlIGNvcnJlY3RseS4KKyAgICAgICAgLy8gW1JlcXVpcmVzQWxsQXJndW1lbnRzXSBib29sZWFu
IHNlbmQoaW4gQmxvYiBkYXRhKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgLy8gW1Jl
cXVpcmVzQWxsQXJndW1lbnRzXSBib29sZWFuIHNlbmQoaW4gRE9NU3RyaW5nIGRhdGEpIHJhaXNl
cyhET01FeGNlcHRpb24pOworICAgICAgICBbQ3VzdG9tXSBib29sZWFuIHNlbmQoaW4gRE9NU3Ry
aW5nIGRhdGEpIHJhaXNlcyhET01FeGNlcHRpb24pOworCiAgICAgICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgYW5kIGFwcGx5IFtDbGFtcF0gYXR0cmlidXRlIGluc3RlYWQgb2YgW0N1c3RvbV0uCiAg
ICAgICAgIFtDdXN0b21dIHZvaWQgY2xvc2UoaW4gW09wdGlvbmFsXSB1bnNpZ25lZCBzaG9ydCBj
b2RlLCBpbiBbT3B0aW9uYWxdIERPTVN0cmluZyByZWFzb24pIHJhaXNlcyhET01FeGNlcHRpb24p
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5u
ZWwuY3BwIGIvU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmNwcApp
bmRleCAyMDA3ZTZkYjgzODVmYTZmMzY2ZGFiYjI0ZjIxNzc1ZGEzNGRlOGVlLi5hZTVjMWFjOGRj
OWQ1MzM5NDM1ODVmMWRkNTQ4N2U2YjJkMmQ4ZDU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dl
YnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAKQEAgLTE3MCw2ICsxNzAsMTQgQEAgYm9vbCBX
ZWJTb2NrZXRDaGFubmVsOjpzZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAorYm9vbCBXZWJTb2NrZXRDaGFubmVsOjpzZW5kKGNvbnN0IEJsb2ImIGJpbmFy
eURhdGEpCit7CisgICAgTE9HKE5ldHdvcmssICJXZWJTb2NrZXRDaGFubmVsICVwIHNlbmQgYmxv
YiAlcyIsIHRoaXMsIGJpbmFyeURhdGEudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Cisg
ICAgQVNTRVJUKCFtX3VzZUhpeGllNzZQcm90b2NvbCk7CisgICAgZW5xdWV1ZUJsb2JGcmFtZShP
cENvZGVCaW5hcnksIGJpbmFyeURhdGEpOworICAgIHJldHVybiB0cnVlOworfQorCiB1bnNpZ25l
ZCBsb25nIFdlYlNvY2tldENoYW5uZWw6OmJ1ZmZlcmVkQW1vdW50KCkgY29uc3QKIHsKICAgICBM
T0coTmV0d29yaywgIldlYlNvY2tldENoYW5uZWwgJXAgYnVmZmVyZWRBbW91bnQiLCB0aGlzKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5o
IGIvU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmgKaW5kZXggOTcw
MzE2MjNjYzI2NmU2ZGFhZGU3MjUxYmRlMTE1NzYxMjNiNjU0OS4uM2U4OWU4NWM5OGUxMTA2YTMz
YjdiNTNjNDU5NzE0ZjkzMzgzNDg3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2Vic29j
a2V0cy9XZWJTb2NrZXRDaGFubmVsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9X
ZWJTb2NrZXRDaGFubmVsLmgKQEAgLTY2LDYgKzY2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBjb25uZWN0KGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHByb3RvY29sKTsKICAgICB2
aXJ0dWFsIFN0cmluZyBzdWJwcm90b2NvbCgpOwogICAgIHZpcnR1YWwgYm9vbCBzZW5kKGNvbnN0
IFN0cmluZyYgbWVzc2FnZSk7CisgICAgdmlydHVhbCBib29sIHNlbmQoY29uc3QgQmxvYiYpOwog
ICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBidWZmZXJlZEFtb3VudCgpIGNvbnN0OwogICAgIHZp
cnR1YWwgdm9pZCBjbG9zZShpbnQgY29kZSwgY29uc3QgU3RyaW5nJiByZWFzb24pOyAvLyBTdGFy
dCBjbG9zaW5nIGhhbmRzaGFrZS4KICAgICB2aXJ0dWFsIHZvaWQgZmFpbChjb25zdCBTdHJpbmcm
IHJlYXNvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dvcmtlclRo
cmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMv
V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwCmluZGV4IDQ0OTg4ZjY1NjJiMTI0
MjFhMGY0MDA3MDRlYmMwNzYwZWJiMDI0ZGUuLjYwNDY0NWFkNjY0ZjdmZjBhNDIyNTlhMTUwYTQ5
Zjg1MjdjYjM5YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV29ya2Vy
VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYnNv
Y2tldHMvV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwCkBAIC0zNCw2ICszNCw3
IEBACiAKICNpbmNsdWRlICJXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oIgogCisj
aW5jbHVkZSAiQmxvYi5oIgogI2luY2x1ZGUgIkNyb3NzVGhyZWFkVGFzay5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgpA
QCAtODcsNiArODgsMTMgQEAgYm9vbCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6
c2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiAgICAgcmV0dXJuIG1fYnJpZGdlLT5zZW5kKG1l
c3NhZ2UpOwogfQogCitib29sIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpzZW5k
KGNvbnN0IEJsb2ImIGJpbmFyeURhdGEpCit7CisgICAgaWYgKCFtX2JyaWRnZSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX2JyaWRnZS0+c2VuZChiaW5hcnlEYXRhKTsKK30K
KwogdW5zaWduZWQgbG9uZyBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6YnVmZmVy
ZWRBbW91bnQoKSBjb25zdAogewogICAgIGlmICghbV9icmlkZ2UpCkBAIC0xNzIsNiArMTgwLDE1
IEBAIHZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OlBlZXI6OnNlbmQoY29u
c3QgU3RyaW5nJiBtZXNzYWdlKQogICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tGb3JNb2RlVG9X
b3JrZXJDb250ZXh0KGNyZWF0ZUNhbGxiYWNrVGFzaygmd29ya2VyQ29udGV4dERpZFNlbmQsIG1f
d29ya2VyQ2xpZW50V3JhcHBlciwgc2VudCksIG1fdGFza01vZGUpOwogfQogCit2b2lkIFdvcmtl
clRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpQZWVyOjpzZW5kKGNvbnN0IEJsb2ImIGJpbmFy
eURhdGEpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAoIW1fbWFpbldl
YlNvY2tldENoYW5uZWwgfHwgIW1fd29ya2VyQ2xpZW50V3JhcHBlcikKKyAgICAgICAgcmV0dXJu
OworICAgIGJvb2wgc2VudCA9IG1fbWFpbldlYlNvY2tldENoYW5uZWwtPnNlbmQoYmluYXJ5RGF0
YSk7CisgICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckNvbnRleHQoY3Jl
YXRlQ2FsbGJhY2tUYXNrKCZ3b3JrZXJDb250ZXh0RGlkU2VuZCwgbV93b3JrZXJDbGllbnRXcmFw
cGVyLCBzZW50KSwgbV90YXNrTW9kZSk7Cit9CisKIHN0YXRpYyB2b2lkIHdvcmtlckNvbnRleHRE
aWRHZXRCdWZmZXJlZEFtb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNz
UmVmUHRyPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4gd29ya2VyQ2xp
ZW50V3JhcHBlciwgdW5zaWduZWQgbG9uZyBidWZmZXJlZEFtb3VudCkKIHsKICAgICBBU1NFUlRf
VU5VU0VEKGNvbnRleHQsIGNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKTsKQEAgLTM1OCw2ICsz
NzUsMTYgQEAgdm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6bWFpblRocmVh
ZFNlbmQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY28KICAgICBwZWVyLT5zZW5kKG1lc3NhZ2Up
OwogfQogCit2b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjptYWluVGhyZWFk
U2VuZEJsb2IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGVlciogcGVlciwgY29u
c3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHR5cGUsIGxvbmcgbG9uZyBzaXplKQoreworICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUX1VOVVNFRChjb250ZXh0LCBjb250
ZXh0LT5pc0RvY3VtZW50KCkpOworICAgIEFTU0VSVChwZWVyKTsKKworICAgIFJlZlB0cjxCbG9i
PiBibG9iID0gQmxvYjo6Y3JlYXRlKHVybCwgdHlwZSwgc2l6ZSk7CisgICAgcGVlci0+c2VuZCgq
YmxvYik7Cit9CisKIGJvb2wgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OkJyaWRn
ZTo6c2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAgaWYgKCFtX3dvcmtlckNsaWVu
dFdyYXBwZXIpCkBAIC0zNzEsNiArMzk4LDE5IEBAIGJvb2wgV29ya2VyVGhyZWFkYWJsZVdlYlNv
Y2tldENoYW5uZWw6OkJyaWRnZTo6c2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiAgICAgcmV0
dXJuIGNsaWVudFdyYXBwZXIgJiYgY2xpZW50V3JhcHBlci0+c2VudCgpOwogfQogCitib29sIFdv
cmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpCcmlkZ2U6OnNlbmQoY29uc3QgQmxvYiYg
YmluYXJ5RGF0YSkKK3sKKyAgICBpZiAoIW1fd29ya2VyQ2xpZW50V3JhcHBlcikKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIEFTU0VSVChtX3BlZXIpOworICAgIHNldE1ldGhvZE5vdENvbXBs
ZXRlZCgpOworICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tUb0xvYWRlcihjcmVhdGVDYWxsYmFj
a1Rhc2soJldvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjptYWluVGhyZWFkU2VuZEJs
b2IsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MobV9wZWVyKSwgYmluYXJ5RGF0YS51cmwoKSwgYmlu
YXJ5RGF0YS50eXBlKCksIGJpbmFyeURhdGEuc2l6ZSgpKSk7CisgICAgUmVmUHRyPEJyaWRnZT4g
cHJvdGVjdCh0aGlzKTsKKyAgICB3YWl0Rm9yTWV0aG9kQ29tcGxldGlvbigpOworICAgIFRocmVh
ZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlciogY2xpZW50V3JhcHBlciA9IG1fd29y
a2VyQ2xpZW50V3JhcHBlci5nZXQoKTsKKyAgICByZXR1cm4gY2xpZW50V3JhcHBlciAmJiBjbGll
bnRXcmFwcGVyLT5zZW50KCk7Cit9CisKIHZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENo
YW5uZWw6Om1haW5UaHJlYWRCdWZmZXJlZEFtb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBQZWVyKiBwZWVyKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dvcmtlclRocmVhZGFibGVXZWJTb2Nr
ZXRDaGFubmVsLmggYi9Tb3VyY2UvV2ViQ29yZS93ZWJzb2NrZXRzL1dvcmtlclRocmVhZGFibGVX
ZWJTb2NrZXRDaGFubmVsLmgKaW5kZXggYThkMTMzZDNjZGY4MWU3MmE4N2RiNThhNjg1ZmUxYTEy
MmE0YjMxYy4uN2UyZWMxYmNkZWE2MThiMDUyNzljM2U4ODg0OTRlNTY0ZjdkMzg3NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvd2Vic29ja2V0cy9Xb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMvV29ya2VyVGhyZWFkYWJs
ZVdlYlNvY2tldENoYW5uZWwuaApAQCAtNjQsNiArNjQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIGNvbm5lY3QoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2wpOwogICAg
IHZpcnR1YWwgU3RyaW5nIHN1YnByb3RvY29sKCk7CiAgICAgdmlydHVhbCBib29sIHNlbmQoY29u
c3QgU3RyaW5nJiBtZXNzYWdlKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2VuZChjb25zdCBCbG9iJik7
CiAgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGJ1ZmZlcmVkQW1vdW50KCkgY29uc3Q7CiAgICAg
dmlydHVhbCB2b2lkIGNsb3NlKGludCBjb2RlLCBjb25zdCBTdHJpbmcmIHJlYXNvbik7CiAgICAg
dmlydHVhbCB2b2lkIGZhaWwoY29uc3QgU3RyaW5nJiByZWFzb24pOwpAQCAtOTMsNiArOTQsNyBA
QCBwcml2YXRlOgogICAgICAgICBib29sIHVzZUhpeGllNzZQcm90b2NvbCgpOwogICAgICAgICB2
b2lkIGNvbm5lY3QoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2wpOwogICAgICAg
ICB2b2lkIHNlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKyAgICAgICAgdm9pZCBzZW5kKGNv
bnN0IEJsb2ImKTsKICAgICAgICAgdm9pZCBidWZmZXJlZEFtb3VudCgpOwogICAgICAgICB2b2lk
IGNsb3NlKGludCBjb2RlLCBjb25zdCBTdHJpbmcmIHJlYXNvbik7CiAgICAgICAgIHZvaWQgZmFp
bChjb25zdCBTdHJpbmcmIHJlYXNvbik7CkBAIC0xMjUsNiArMTI3LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgfkJyaWRnZSgpOwogICAgICAgICB2b2lkIGNvbm5lY3QoY29uc3QgS1VSTCYsIGNvbnN0
IFN0cmluZyYgcHJvdG9jb2wpOwogICAgICAgICBib29sIHNlbmQoY29uc3QgU3RyaW5nJiBtZXNz
YWdlKTsKKyAgICAgICAgYm9vbCBzZW5kKGNvbnN0IEJsb2ImKTsKICAgICAgICAgdW5zaWduZWQg
bG9uZyBidWZmZXJlZEFtb3VudCgpOwogICAgICAgICB2b2lkIGNsb3NlKGludCBjb2RlLCBjb25z
dCBTdHJpbmcmIHJlYXNvbik7CiAgICAgICAgIHZvaWQgZmFpbChjb25zdCBTdHJpbmcmIHJlYXNv
bik7CkBAIC0xNjAsNiArMTYzLDcgQEAgcHJpdmF0ZToKIAogICAgIHN0YXRpYyB2b2lkIG1haW5U
aHJlYWRDb25uZWN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQZWVyKiwgY29uc3QgS1VSTCYs
IGNvbnN0IFN0cmluZyYgcHJvdG9jb2wpOwogICAgIHN0YXRpYyB2b2lkIG1haW5UaHJlYWRTZW5k
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQZWVyKiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsK
KyAgICBzdGF0aWMgdm9pZCBtYWluVGhyZWFkU2VuZEJsb2IoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBlZXIqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiB0eXBlLCBsb25nIGxvbmcgc2l6
ZSk7CiAgICAgc3RhdGljIHZvaWQgbWFpblRocmVhZEJ1ZmZlcmVkQW1vdW50KFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBQZWVyKik7CiAgICAgc3RhdGljIHZvaWQgbWFpblRocmVhZENsb3NlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQZWVyKiwgaW50IGNvZGUsIGNvbnN0IFN0cmluZyYgcmVh
c29uKTsKICAgICBzdGF0aWMgdm9pZCBtYWluVGhyZWFkRmFpbChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgUGVlciosIGNvbnN0IFN0cmluZyYgcmVhc29uKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>