<?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>54162</bug_id>
          
          <creation_ts>2011-02-09 19:58:34 -0800</creation_ts>
          <short_desc>XHR inconsistent in handling access to response attributes after an error</short_desc>
          <delta_ts>2023-03-28 00:43:57 -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>XML</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>CONFIGURATION CHANGED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P4</priority>
          <bug_severity>Minor</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>74626</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jarred Nicholls">jarred</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>annevk</cc>
    
    <cc>ap</cc>
    
    <cc>cdumez</cc>
    
    <cc>d-r</cc>
    
    <cc>mamacdon</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>348782</commentid>
    <comment_count>0</comment_count>
    <who name="Jarred Nicholls">jarred</who>
    <bug_when>2011-02-09 19:58:34 -0800</bug_when>
    <thetext>WebKit handles access to response data inconsistently as well as against w3c spec after a response error (abort, timeout, security, network) occurs (see http://dev.w3.org/2006/webapi/XMLHttpRequest-2/).

The spec says if the state is &lt; HEADERS_RECEIVED, or the error flag is true, to return 0, null, or empty string for the following response attributes/getters:

- status
- statusText
- getResponseHeader()
- getAllResponseHeaders()

WebKit will return the status/statusText even after an error, such as an abort().  This is against the spec.
WebKit will throw a DOM exception (INVALID_STATE) when calling getResponseHeader() or getAllResponseHeaders() after an abort().  It ignores the error flag altogether.

Firefox will allow access to all the above response attributes after an abort().  This is against the spec, but they behavior consistently across all 4.
IE and Opera will throw DOM exceptions when attempting to access any of the above 4, after an abort().  This is against the spec, but again, they behave consistently across the board.

Since IE (and Opera, but mostly IE) doesn&apos;t give access to these properties, I propose we simply do the proper checks to-spec, and return the 0/null/&quot;&quot; values in the applicable cases of m_state &lt; 2 or m_error == true.  Let&apos;s face it, if IE doesn&apos;t allow it, then no one&apos;s really trying to do it (sorry Firefox...)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348841</commentid>
    <comment_count>1</comment_count>
      <attachid>81932</attachid>
    <who name="Jarred Nicholls">jarred</who>
    <bug_when>2011-02-10 00:09:07 -0800</bug_when>
    <thetext>Created attachment 81932
Proposed patch

Here is a patch that conforms us to W3C, and makes us consistent.  From a usability standpoint (what&apos;s available before/after an error; specifically after an abort), we went onto one side of the fence and are aligning ourselves to IE/Opera.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348843</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-10 00:12:47 -0800</bug_when>
    <thetext>Attachment 81932 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/http...&quot; exit_code: 1

Source/WebCore/xml/XMLHttpRequest.cpp:236:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 1 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348845</commentid>
    <comment_count>3</comment_count>
      <attachid>81933</attachid>
    <who name="Jarred Nicholls">jarred</who>
    <bug_when>2011-02-10 00:15:35 -0800</bug_when>
    <thetext>Created attachment 81933
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350349</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-02-12 21:48:27 -0800</bug_when>
    <thetext>Could you please add per-file comments to LayoutTests/ChangeLog? I started reviewing the changes, but it quickly got complicated.

As an example, I&apos;ve been looking at xmlhttprequest/exceptions.html - the bug description says what results should be according to the spec, but it doesn&apos;t say what IE and Firefox do. That&apos;s useful information to add to ChangeLog. I suggest omitting Opera results - they are not very relevant because of Opera market share, and because Opera might mask poor compatibility decisions with site-specific hacks.

Standardizing on XHR2 specified behavior is good long term, but I&apos;m having second thoughts about doing this now. The reason is that a lot of sites and JS libraries have two separate code paths - one for IE and another for &quot;standards compliant&quot; browsers, meaning that they test with Firefox. WebKit  usually falls into the latter group, so changing behavior from Firefox compatible to IE compatible would do little good on these sites.

This is less of an issue than several years ago, since WebKit-based browsers now have a much larger market share, even dominating some segments. But it would be good to know if/when Mozilla is going to switch to XHR2 specified behavior in this regard.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350354</commentid>
    <comment_count>5</comment_count>
      <attachid>81933</attachid>
    <who name="Jarred Nicholls">jarred</who>
    <bug_when>2011-02-12 22:28:09 -0800</bug_when>
    <thetext>Comment on attachment 81933
Proposed patch

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

Overall, the idea here is to make XHR (this is XHR1 spec, not XHR2) to-spec.  It &quot;effectively&quot; behaves the same as IE &amp; Opera, not giving any response data on errors or at incorrect times.  The difference is that it always returns a value and doesn&apos;t throw DOM exceptions.

While what you say (about split code paths for IE &amp; Firefox) has some truth in general, I assure you it has zero truth for XHR.  I work on one of the largest JS libraries in the world, and I have used all of the other major libraries out there.  When it comes to handling XHR, there isn&apos;t a split code path, ever.  No one is saying &quot;well if Firefox, then yeah let&apos;s get this response data even though I just threw an error, else don&apos;t do it&quot;.  It just doesn&apos;t happen.  No one tries to get this data after an error, particularly because IE has never allowed it.

The point is, if IE disallows access to this data, and the spec says that the data shouldn&apos;t be accessed, then *no one is trying to do it*.

Keep in mind that the only &quot;effective net difference&quot; this patch has to WebKit is access to status &amp; statusText after an error would no longer give a value.  WebKit throws an exception on getAllResponseHeaders() and getResponseHeader() (therein lies the inconsistency).

Hope that helps explain the position.  Thanks!

&gt; LayoutTests/http/tests/xmlhttprequest/exceptions.html:-68
&gt; -    shouldThrow(&apos;req.statusText()&apos;);

status and statusText will never throw an exception, so they are not tested for an expected exception.

&gt; LayoutTests/http/tests/xmlhttprequest/getAllResponseHeaders.html:39
&gt; +        }

getAllResponseHeaders() will always return a string.  It will either be a string of the concatenated headers (state &gt;= HEADERS_RECEIVED &amp;&amp; !error), or an empty string, but a string nonetheless.  So we test for a string on every call to getAllResponseHeaders().  Essentially any other behavior that is encountered is a failed test case.

IE &amp; Opera: throws exceptions after error
Firefox: allows access after error

&gt; LayoutTests/http/tests/xmlhttprequest/getResponseHeader-expected.txt:19
&gt; +PASSED 1 Content-Type: Content-Type is null.

getResponseHeader() will either return the header string (state &gt;= HEADERS_RECEIVED &amp;&amp; !error &amp;&amp; headerExists) or null.  It no longer throws exceptions when accessed at the incorrect time.

IE &amp; Opera: throws exception after error
Firefox: allows access after error

&gt; LayoutTests/http/tests/xmlhttprequest/status-after-abort-expected.txt:7
&gt; +Sent request. Response status: 0; statusText: &apos;&apos;; readyState: 1

status and statusText no longer throw exceptions when accessed at the wrong time.  They will either return the status code and status text (state &gt;= HEADERS_RECEIVED &amp;&amp; !error), or they will return 0 and &quot;&quot;, respectively.  This includes the &quot;abort&quot; error.  An error is an error...

IE &amp; Opera: throws exceptions after error
Firefox: allows access after error

&gt; LayoutTests/http/tests/xmlhttprequest/zero-length-response-expected.txt:21
&gt; +- ResponseXML serialized: n/a

Likewise, see above comments on status and statusText.  This test is specifically testing responsetext, but needed to be updated for status/statusText since they don&apos;t throw exceptions.

&gt; LayoutTests/http/tests/xmlhttprequest/zero-length-response.html:91
&gt; +       try { log (&quot;- ResponseXML serialized: &quot; + (req.responseXML ? prettyPrintText(window.XMLSerializer ? (new XMLSerializer()).serializeToString(req.responseXML) : req.responseXML.xml) : &quot;n/a&quot;)); } catch (ex) { log(&quot;Â Â Exception serializing ResponseXML: &quot; + ex.message); }

Someone used stupid spaces, so I made it more legible ascii :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350911</commentid>
    <comment_count>6</comment_count>
      <attachid>81933</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-02-14 15:03:45 -0800</bug_when>
    <thetext>Comment on attachment 81933
Proposed patch

I&apos;m almost convinced. However, a quick web search shows that people do care about status and statusText after abort() for various reasons, see e.g. &lt;http://groups.google.com/group/jquery-dev/browse_thread/thread/3d8f7ac78c9b0117&gt;. Reuse of XHR object seems to be a common theme in posts I found.

Also, when we changed abort() to reset status a few years ago, someone quickly filed a bug. One of the tests you modified (status-after-abort.html) was there specifically to make sure that we don&apos;t break this again! Please use svn log to check history of tests like this.

I guess that I should also mention Dashboard widgets, which are only tested with WebKit. But there isn&apos;t much we can do about those now, except for adding quirks if problems are found.

-        return jsUndefined();
+        return jsNull();

These unrelated changes should be in a separate patch.

-    return String();
+    // Return empty string, not a null String()
+    return &quot;&quot;;

This, too. Might be best to do smaller changes like that first.

&gt; status and statusText will never throw an exception, so they are not tested for an expected exception.

Please modify XMLHttpRequest.idl to not require exception handling for methods that can never raise an exception.

I&apos;m not sure why you check m_error in functions like returnXML and returnBlob. Aren&apos;t these supposed to be empty already? It&apos;s good to match algorithms from spec for clarity, but not when that&apos;s confusingly redundant with other code that we have. An ASSERT would be the best way to document that we respect the spec here.

r- for the necessary IDL modification. I&apos;ve e-mailed the person who filed a bug about status after abort(), so I may have more information later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350944</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-02-14 15:48:36 -0800</bug_when>
    <thetext>This change has affected SAP in the past. SAP sends Firefox code to Safari, but I don&apos;t know what their use case is exactly.

We should probably try changing the XHR2 spec at this point, although it&apos;s a bit late in the game. It doesn&apos;t really make a lot of sense to reset status on abort().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350975</commentid>
    <comment_count>8</comment_count>
    <who name="Jarred Nicholls">jarred</who>
    <bug_when>2011-02-14 16:41:21 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 81933 [details])
&gt; I&apos;m almost convinced. However, a quick web search shows that people do care about status and statusText after abort() for various reasons, see e.g. &lt;http://groups.google.com/group/jquery-dev/browse_thread/thread/3d8f7ac78c9b0117&gt;. Reuse of XHR object seems to be a common theme in posts I found.

They are specifically talking about jQuery&apos;s event handling and what it returns (normalize from XHR), not the actual status/statusText of XHR.

Reuse of XHR object is fine.  On the next call to open(), error flag and status is reset.  Reuse after an abort() is completely fine.

&gt; 
&gt; Also, when we changed abort() to reset status a few years ago, someone quickly filed a bug. One of the tests you modified (status-after-abort.html) was there specifically to make sure that we don&apos;t break this again! Please use svn log to check history of tests like this.

Ok thanks for the tip, I&apos;ll be sure to check the logs on test files.  With that said, I have the humble opinion that that bug report should have been denied, as it was operating according to IE and spec beforehand.  I wonder what convinced the reviewer to approve the patch...

&gt; 
&gt; I guess that I should also mention Dashboard widgets, which are only tested with WebKit. But there isn&apos;t much we can do about those now, except for adding quirks if problems are found.

True, and mobile web apps on iOS, Android, BlackBerry 6, webOS, etc. But they are no doubt using a library like jQuery or Sencha Touch.  But if someone expects to get a status code after aborting, they have some very backwards logic in their code :)  That&apos;s what the readyState 2 is for, if they&apos;re interested in the status code and knowingly aborting.

&gt; 
&gt; -        return jsUndefined();
&gt; +        return jsNull();
&gt; 
&gt; These unrelated changes should be in a separate patch.

This is simply to be more precise as far as return values go for &quot;response&quot; (spec says return null, not undefined), and to be consistent with return proper return values of null for blob/arraybuffer.  But in all honesty, that code will never see the light of day at runtime :)

&gt; 
&gt; -    return String();
&gt; +    // Return empty string, not a null String()
&gt; +    return &quot;&quot;;
&gt; 
&gt; This, too. Might be best to do smaller changes like that first.

This is to future-proof statusText incase a ConvertStringToNull attribute was added in the IDL (see getAllResponseHeaders).  Nothing more.  Just thinking ahead.  It&apos;s not necessary in this case, but it is necessary in getAllResponseHeaders.

On that note, getAllResponseHeaders should probably instead have its ConvertStringToNull declaration in the IDL removed, since it should always return a string no matter what.

&gt; 
&gt; &gt; status and statusText will never throw an exception, so they are not tested for an expected exception.
&gt; 
&gt; Please modify XMLHttpRequest.idl to not require exception handling for methods that can never raise an exception.

Good call, it was in the back of my mind to do this.

&gt; 
&gt; I&apos;m not sure why you check m_error in functions like returnXML and returnBlob. Aren&apos;t these supposed to be empty already? It&apos;s good to match algorithms from spec for clarity, but not when that&apos;s confusingly redundant with other code that we have. An ASSERT would be the best way to document that we respect the spec here.

I can see your point (any error clears the response).

In the case of responseText, checking the boolean is more performant than calling m_responseBuilder.toStringPreserveCapacity(); unnecessarily.  Maybe a bit reaching, but it&apos;s consistent with everything else.

In the case of responseXML, m_createdDocument will be reset after an error, so the code in responseXML will unnecessarily run.  If someone called overrideMimeType(&apos;text/xml&apos;), responseXML would so much as create a Document unnecessarily, when checking the error flag would avoid that.

Really the same goes for Blob and ArrayBuffer.  In Blob&apos;s case, it wasn&apos;t even checking the status at all (yikes).

The reason why the status is not enough of a &quot;blocker&quot; for those functions is because on any error (except for abort), genericError() is called, which sets the status to DONE.  In several of those functions, a status of DONE would pass the if() statement and continue running.  Thus the additional m_error check (to not only future proof the code, but to avoid unnecessary code execution).

&gt; 
&gt; r- for the necessary IDL modification. I&apos;ve e-mailed the person who filed a bug about status after abort(), so I may have more information later.

Ok cool, thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350985</commentid>
    <comment_count>9</comment_count>
    <who name="Jarred Nicholls">jarred</who>
    <bug_when>2011-02-14 16:45:29 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; This change has affected SAP in the past. SAP sends Firefox code to Safari, but I don&apos;t know what their use case is exactly.
&gt; 
&gt; We should probably try changing the XHR2 spec at this point, although it&apos;s a bit late in the game. It doesn&apos;t really make a lot of sense to reset status on abort().

Yeah, perhaps.  This route was chosen because 1) it&apos;s how IE works, and 2) it&apos;s what the spec says.  The important thing is consistency across the board...it&apos;s just a pet peeve of mine.  I don&apos;t care if we went 180 degrees in the opposite direction and follow Firefox, and allow access to status, statusText, getAllResponseHeaders, and getResponseHeader after an abort :)  But this patch is not just about abort(), it&apos;s about all errors and returning the proper response types (i.e. not throwing an exception, or return &quot;&quot; instead of null, etc.).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464311</commentid>
    <comment_count>10</comment_count>
    <who name="Jarred Nicholls">jarred</who>
    <bug_when>2011-09-08 13:36:58 -0700</bug_when>
    <thetext>Found this at the bottom of my stack.  What do you think Alexey, should we pursue this a little further?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518819</commentid>
    <comment_count>11</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-12-10 12:40:29 -0800</bug_when>
    <thetext>Seems best to split the changes into as small chunks as possible. That would make both discussion and regression testing more straightforward.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827554</commentid>
    <comment_count>12</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2013-02-07 08:32:14 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; Found this at the bottom of my stack.  What do you think Alexey, should we pursue this a little further?

Jarred, do you have any plans to update this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864214</commentid>
    <comment_count>13</comment_count>
    <who name="Jarred Nicholls">jarred</who>
    <bug_when>2013-03-26 21:17:39 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #10)
&gt; &gt; Found this at the bottom of my stack.  What do you think Alexey, should we pursue this a little further?
&gt; 
&gt; Jarred, do you have any plans to update this patch?

Sorry for the delayed response - been filtering (and yes, ignoring) a lot of email to @webkit.org.  No plans for the very short term.  With that said I&apos;d like to see these inconsistencies addressed :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864310</commentid>
    <comment_count>14</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2013-03-27 01:56:20 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; (In reply to comment #10)
&gt; &gt; &gt; Found this at the bottom of my stack.  What do you think Alexey, should we pursue this a little further?
&gt; &gt; 
&gt; &gt; Jarred, do you have any plans to update this patch?
&gt; 
&gt; Sorry for the delayed response - been filtering (and yes, ignoring) a lot of email to @webkit.org.  No plans for the very short term.  With that said I&apos;d like to see these inconsistencies addressed :)

So you mean someone could take over?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962727</commentid>
    <comment_count>15</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-12-24 00:03:52 -0800</bug_when>
    <thetext>A related patch has been landed in http://trac.webkit.org/changeset/161051.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>968320</commentid>
    <comment_count>16</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2014-01-15 07:50:27 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; A related patch has been landed in http://trac.webkit.org/changeset/161051.

bug 125840 and bug 127050 are probably sub-bugs of this one as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1944518</commentid>
    <comment_count>17</comment_count>
    <who name="Anne van Kesteren">annevk</who>
    <bug_when>2023-03-28 00:43:57 -0700</bug_when>
    <thetext>I&apos;m pretty sure all issues here have been resolved over the intervening years.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81932</attachid>
            <date>2011-02-10 00:09:07 -0800</date>
            <delta_ts>2011-02-10 00:15:35 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>xhr-stuff.patch</filename>
            <type>text/plain</type>
            <size>20978</size>
            <attacher name="Jarred Nicholls">jarred</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2YjkxYjk0Li4zMjJiNTdmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDIt
MDkgIEphcnJlZCBOaWNob2xscyAgPGphcnJlZEBzZW5jaGEuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFhIUiBpbmNvbnNpc3RlbnQgaW4gaGFu
ZGxpbmcgYWNjZXNzIHRvIHJlc3BvbnNlIGF0dHJpYnV0ZXMgYWZ0ZXIgYW4gZXJyb3IKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0MTYyCisgICAgICAg
IAorICAgICAgICBVcGRhdGVkIHRlc3RzIGZvciByZXR1cm4gdmFsdWVzIG9mIFhIUiByZXNwb25z
ZSBhdHRyaWJ1dGVzL2dldHRlcnMuCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL3htbGh0dHByZXF1
ZXN0L2V4Y2VwdGlvbnMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGh0dHAvdGVzdHMveG1saHR0
cHJlcXVlc3QvZXhjZXB0aW9ucy5odG1sOgorICAgICAgICAqIGh0dHAvdGVzdHMveG1saHR0cHJl
cXVlc3QvZ2V0QWxsUmVzcG9uc2VIZWFkZXJzLmh0bWw6CisgICAgICAgICogaHR0cC90ZXN0cy94
bWxodHRwcmVxdWVzdC9nZXRSZXNwb25zZUhlYWRlci1leHBlY3RlZC50eHQ6CisgICAgICAgICog
aHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9nZXRSZXNwb25zZUhlYWRlci5odG1sOgorICAgICAg
ICAqIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvc3RhdHVzLWFmdGVyLWFib3J0LWV4cGVjdGVk
LnR4dDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3plcm8tbGVuZ3RoLXJl
c3BvbnNlLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0
L3plcm8tbGVuZ3RoLXJlc3BvbnNlLmh0bWw6CisKIDIwMTEtMDItMDkgIFNpbW9uIEZyYXNlciAg
PHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5z
dGVpbi4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qv
ZXhjZXB0aW9ucy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHBy
ZXF1ZXN0L2V4Y2VwdGlvbnMtZXhwZWN0ZWQudHh0CmluZGV4IDg3OTkyMzYuLjJiMzc2MjkgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvZXhjZXB0aW9u
cy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVz
dC9leGNlcHRpb25zLWV4cGVjdGVkLnR4dApAQCAtNiw4ICs2LDYgQEAgUEFTUzogcmVxLnNlbmQo
bnVsbCkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBJTlZBTElEX1NUQVRFX0VSUjogRE9NIEV4Y2Vw
dGlvbiAxMS4KIG9wZW4oKQogUEFTUzogcmVxLnNldFJlcXVlc3RIZWFkZXIoKSB0aHJldyBleGNl
cHRpb24gU3ludGF4RXJyb3I6IE5vdCBlbm91Z2ggYXJndW1lbnRzLgogUEFTUzogcmVxLnNldFJl
cXVlc3RIZWFkZXIoIkZvbyIpIHRocmV3IGV4Y2VwdGlvbiBTeW50YXhFcnJvcjogTm90IGVub3Vn
aCBhcmd1bWVudHMuCi1QQVNTOiByZXEuc3RhdHVzKCkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBJ
TlZBTElEX1NUQVRFX0VSUjogRE9NIEV4Y2VwdGlvbiAxMS4KLVBBU1M6IHJlcS5zdGF0dXNUZXh0
KCkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBJTlZBTElEX1NUQVRFX0VSUjogRE9NIEV4Y2VwdGlv
biAxMS4KIHNlbmQoKQogUEFTUzogcmVxLnNlbmQobnVsbCkgdGhyZXcgZXhjZXB0aW9uIEVycm9y
OiBJTlZBTElEX1NUQVRFX0VSUjogRE9NIEV4Y2VwdGlvbiAxMS4KIFBBU1M6IHJlcS5zZXRSZXF1
ZXN0SGVhZGVyKCJGb28iLCAiYmFyIikgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBJTlZBTElEX1NU
QVRFX0VSUjogRE9NIEV4Y2VwdGlvbiAxMS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMveG1saHR0cHJlcXVlc3QvZXhjZXB0aW9ucy5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy94bWxodHRwcmVxdWVzdC9leGNlcHRpb25zLmh0bWwKaW5kZXggNDdjODVmNS4uMDIwYTZl
NSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9leGNl
cHRpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9l
eGNlcHRpb25zLmh0bWwKQEAgLTY0LDggKzY0LDYgQEAKICAgICAKICAgICBzaG91bGRUaHJvdygn
cmVxLnNldFJlcXVlc3RIZWFkZXIoKScpOwogICAgIHNob3VsZFRocm93KCdyZXEuc2V0UmVxdWVz
dEhlYWRlcigiRm9vIiknKTsKLSAgICBzaG91bGRUaHJvdygncmVxLnN0YXR1cygpJyk7Ci0gICAg
c2hvdWxkVGhyb3coJ3JlcS5zdGF0dXNUZXh0KCknKTsKICAgICAKICAgICByZXEuc2VuZChudWxs
KTsKICAgICBsb2coInNlbmQoKSIpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy94bWxodHRwcmVxdWVzdC9nZXRBbGxSZXNwb25zZUhlYWRlcnMuaHRtbCBiL0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvZ2V0QWxsUmVzcG9uc2VIZWFkZXJzLmh0bWwKaW5k
ZXggNDRlY2QwMi4uMDczYTM0MyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94
bWxodHRwcmVxdWVzdC9nZXRBbGxSZXNwb25zZUhlYWRlcnMuaHRtbAorKysgYi9MYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L2dldEFsbFJlc3BvbnNlSGVhZGVycy5odG1sCkBA
IC0xMCw2ICsxMCwxMCBAQCBmdW5jdGlvbiBsb2cgKG1zZykgewogICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJjb25zb2xlIikuYXBwZW5kQ2hpbGQocGFyYWdyYXBoKTsKIH0KIAorZnVuY3Rp
b24gaXNTdHJpbmcocykgeworICAgIHJldHVybiB0eXBlb2YgcyA9PT0gJ3N0cmluZyc7Cit9CisK
IHZhciB4aHI7CiAKIGlmICh3aW5kb3cuWE1MSHR0cFJlcXVlc3QpIHsKQEAgLTI1LDIxICsyOSwy
NCBAQCBpZiAod2luZG93LlhNTEh0dHBSZXF1ZXN0KSB7CiB2YXIgc2F2ZWRIZWFkZXIgPSBudWxs
OwogeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkgewogICAgIHZhciByU3RhdGUg
PSB0aGlzLnJlYWR5U3RhdGU7Ci0gICAgLy8gV2UgZXhwZWN0IGFuIElOVkFMSURfU1RBVEVfRVJS
IGV4Y2VwdGlvbiBmb3IgcmVhZHlTdGF0ZSA8IDIKLSAgICAvLyBhbmQgbm8gZXhjZXB0aW9uIGZv
ciByZWFkeVN0YXRlID49IDIKKyAgICAKICAgICB0cnkgewogICAgICAgICB2YXIgaGVhZGVyID0g
dGhpcy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKTsKKyAgICAgICAgLy8gV2Ugc2hvdWxkIGFsd2F5
cyBiZSBnZXR0aW5nIGJhY2sgYSBzdHJpbmcsIG5vIG1hdHRlciB3aGF0CisgICAgICAgIGlmICgh
aXNTdHJpbmcoaGVhZGVyKSkgeworICAgICAgICAgICAgbG9nKCJGQUlMRUQgIiArIHJTdGF0ZSAr
ICI6IGhlYWRlciB3YXMgbm90IGEgc3RyaW5nIGFzIGV4cGVjdGVkLiIpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBpZiAoclN0YXRlICE9IHRoaXMu
cmVhZHlTdGF0ZSkKICAgICAgICAgICAgIGxvZygiVU5DRVJUQUlOICIgKyByU3RhdGUgKyAiOiBy
ZWFkeVN0YXRlIGNoYW5nZWQgd2hpbGUgZ2V0dGluZyBoZWFkZXJzLiIpOwotICAgICAgICBpZiAo
clN0YXRlIDwgMikgewotICAgICAgICAgICAgbG9nKCJGQUlMRUQgIiArIHJTdGF0ZSArICI6IGhl
YWRlcmxpc3Q9IiArIGhlYWRlcik7Ci0gICAgICAgIH0gZWxzZSBpZiAoaGVhZGVyKQorICAgICAg
ICBpZiAoaGVhZGVyKQogICAgICAgICAgICAgaWYgKHNhdmVkSGVhZGVyKQogICAgICAgICAgICAg
ICAgIGlmIChzYXZlZEhlYWRlciAhPSBoZWFkZXIpIHsKICAgICAgICAgICAgICAgICAgICAgbG9n
KCJGQUlMRUQgIiArIHJTdGF0ZSArCiAiOiBoZWFkZXJsaXN0IGNoYW5nZWQgYWZ0ZXIgaXQgd2Fz
IGZpcnN0IHJldHVybmVkLiBQcmV2aW91cyBoZWFkZXIgbGlzdDpcbiIKICsgc2F2ZWRIZWFkZXIg
KyAiXG4gTmV3IGhlYWRlcmxpc3Q6XG4iICsgaGVhZGVyKTsKLSAgICAgICAgICAgICAgICBzYXZl
ZEhlYWRlciA9IGhlYWRlcjsKKyAgICAgICAgICAgICAgICAgICAgc2F2ZWRIZWFkZXIgPSBoZWFk
ZXI7CiAgICAgICAgICAgICAgICAgfSAKICAgICAgICAgICAgICAgICBlbHNlIC8vc2F2ZWRIZWFk
ZXIgPT0gaGVhZGVyIGhlcmU7IG5vIG5lZWQgdG8gcmVwcmludCBoZWFkZXIKICAgICAgICAgICAg
ICAgICAgICAgbG9nKCJQQVNTRUQgIiArIHJTdGF0ZSk7CkBAIC01NiwxNCArNjMsMTIgQEAgeGhy
Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkgewogIjogZ2V0QWxsUmVzcG9uc2VIZWFk
ZXJzIHJldHVybmVkOlxuIiArIGhlYWRlcik7CiAgICAgICAgICAgICAgICAgc2F2ZWRIZWFkZXIg
PSBoZWFkZXI7CiAgICAgICAgICAgICB9Ci0gICAgICAgIGVsc2UgLy9oZWFkZXIgaXMgbnVsbAor
ICAgICAgICBlbHNlIGlmIChoZWFkZXIgPT0gbnVsbCkgLy9oZWFkZXIgaXMgbnVsbAogICAgICAg
ICAgICAgbG9nKCJGQUlMRUQgIiArIHJTdGF0ZSArICI6IG51bGwgaGVhZGVyIGxpc3QgcmV0dXJu
ZWQiKTsKLSAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgIGlmIChyU3RhdGUgPCAyKSB7CisgICAg
ICAgIGVsc2UgaWYgKHJTdGF0ZSA9PSAxKQogICAgICAgICAgICAgbG9nKCJQQVNTRUQgIiArIHJT
dGF0ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBsb2coIkZBSUxFRCAiICsgclN0
YXRlICsgIjogRVhDRVBUSU9OIFRIUk9XTjogIiArIGUubWVzc2FnZSArICIuIik7Ci0gICAgICAg
IH0KKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGxvZygiRkFJTEVEICIgKyByU3RhdGUgKyAi
OiBFWENFUFRJT04gVEhST1dOOiAiICsgZS5tZXNzYWdlICsgIi4iKTsKICAgICB9CiAgICAgaWYg
KChyU3RhdGUgPT0gNCkgJiYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikpCiAgICAgICAg
ICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CkBAIC03Nyw5ICs4MiwxMiBA
QCBmdW5jdGlvbiB0ZXN0KCkgewogICAgIC8vIFRlc3QgZm9yIHJlYWR5U3RhdGUgPSAwCiAgICAg
dHJ5IHsKICAgICAgICAgdmFyIGhlYWRlciA9IHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKTsK
LSAgICAgICAgbG9nKCJGQUlMRUQgIiArIHhoci5yZWFkeVN0YXRlICsgIjogaGVhZGVyPSIgKyBo
ZWFkZXIpOworICAgICAgICBpZiAoaXNTdHJpbmcoaGVhZGVyKSkKKyAgICAgICAgICAgIGxvZygi
UEFTU0VEICIgKyB4aHIucmVhZHlTdGF0ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxv
ZygiRkFJTEVEICIgKyB4aHIucmVhZHlTdGF0ZSArICI6IGhlYWRlciB3YXMgbm90IGEgc3RyaW5n
IGFzIGV4cGVjdGVkLiIpOwogICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgbG9nKCJQQVNTRUQg
IiArIHhoci5yZWFkeVN0YXRlKTsKKyAgICAgICAgbG9nKCJGQUlMRUQgIiArIHhoci5yZWFkeVN0
YXRlICsgIjsgRVhDRVBUSU9OIFRIUk9XTjogIiArIGUubWVzc2FnZSArICIuIik7CiAgICAgfQog
ICAgIHRyeSB7CiAgICAgICAgIHhoci5vcGVuKCJHRVQiLCJyZXNvdXJjZXMvMTI1MS5odG1sIiwg
dHJ1ZSk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0
L2dldFJlc3BvbnNlSGVhZGVyLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMv
eG1saHR0cHJlcXVlc3QvZ2V0UmVzcG9uc2VIZWFkZXItZXhwZWN0ZWQudHh0CmluZGV4IDU2N2Ez
MzUuLjBiZDQ3MjkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJl
cXVlc3QvZ2V0UmVzcG9uc2VIZWFkZXItZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2h0
dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvZ2V0UmVzcG9uc2VIZWFkZXItZXhwZWN0ZWQudHh0CkBA
IC0xNSw4ICsxNSw4IEBAIEFzc2VydGlvbjogSW52b2tpbmcgdGhlIGdldFJlc3BvbnNlSGVhZGVy
IG1ldGhvZCB3aXRoIHRoZSBwYXJhbWV0ZXIgc2F0aXNmeWluZyB0CiAyLiBUaGUgcGFyYW1ldGVy
IGRvZXMgbm90IG1hdGNoIGFueSBoZWFkZXIgaW4gdGhlIHJlc3BvbnNlOwogM2EuIFRoZSBwYXJh
bWV0ZXIgaXMgbnVsbCAoaXQgaXMgbm90IGEgdmFsaWQgaGVhZGVyIG5hbWUpOwogM2IuIFRoZSBw
YXJhbWV0ZXIgaXMgIkNvbnRlbnQtVHlwZToiIChpdCBpcyBub3QgYSB2YWxpZCBoZWFkZXIgbmFt
ZSkuCi1QQVNTRUQgMCBDb250ZW50LVR5cGU6IGV4Y2VwdGlvbiB0aHJvd24uCi1QQVNTRUQgMSBD
b250ZW50LVR5cGU6IGV4Y2VwdGlvbiB0aHJvd24KK1BBU1NFRCAwIENvbnRlbnQtVHlwZTogQ29u
dGVudC1UeXBlIGlzIG51bGwuCitQQVNTRUQgMSBDb250ZW50LVR5cGU6IENvbnRlbnQtVHlwZSBp
cyBudWxsLgogUEFTU0VEIDIgQ29udGVudC1UeXBlOiBSZXNwb25zZUhlYWRlcihDb250ZW50LVR5
cGUpIHJldHVybmVkIGEgdmFsdWUuCiBQQVNTRUQgMiBTZVQtQ09vS2llOiBnZXRSZXNwb25zZUhl
YWRlcihTZVQtQ09vS2llKSByZXR1cm5lZCBudWxsLgogUEFTU0VEIDIgc0V0LWNvT2tJRTI6IGdl
dFJlc3BvbnNlSGVhZGVyKHNFdC1jb09rSUUyKSByZXR1cm5lZCBudWxsLgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9nZXRSZXNwb25zZUhlYWRlci5o
dG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9nZXRSZXNwb25zZUhl
YWRlci5odG1sCmluZGV4IGMxY2QxZTguLjgwZmQ0MmIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvZ2V0UmVzcG9uc2VIZWFkZXIuaHRtbAorKysgYi9M
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L2dldFJlc3BvbnNlSGVhZGVyLmh0
bWwKQEAgLTM0LDE0ICszNCwxNiBAQCBpZiAod2luZG93LlhNTEh0dHBSZXF1ZXN0KSB7CiAKIHho
ci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHsKICAgICB2YXIgclN0YXRlID0gdGhp
cy5yZWFkeVN0YXRlOwotICAgIC8vIFdlIGV4cGVjdCBhbiBJTlZBTElEX1NUQVRFX0VSUiBleGNl
cHRpb24gZm9yIHJlYWR5U3RhdGUgPCAyCi0gICAgLy8gYW5kIG5vIGV4Y2VwdGlvbiBmb3IgcmVh
ZHlTdGF0ZSA+PSAyCisgICAgCiAgICAgdHJ5IHsKICAgICAgICAgdmFyIGhlYWRlciA9IHRoaXMu
Z2V0UmVzcG9uc2VIZWFkZXIoaGVhZGVyTmFtZSk7CiAgICAgICAgIGlmIChyU3RhdGUgIT0gdGhp
cy5yZWFkeVN0YXRlKQogICAgICAgICAgICAgbG9nMygiVU5DRVJUQUlOIiwgclN0YXRlLCAicmVh
ZHlTdGF0ZSBjaGFuZ2VkIHdoaWxlIGdldHRpbmcgdGhlIGhlYWRlci4iKTsKICAgICAgICAgaWYg
KHJTdGF0ZSA8IDIpIHsKLSAgICAgICAgICAgIGxvZzMoIkZBSUxFRCIsIHJTdGF0ZSwgaGVhZGVy
TmFtZSArICI9IiArIGhlYWRlcik7CisgICAgICAgICAgICBpZiAoaGVhZGVyID09PSBudWxsKQor
ICAgICAgICAgICAgICAgIGxvZzMoIlBBU1NFRCIsIHJTdGF0ZSwgaGVhZGVyTmFtZSArICIgaXMg
bnVsbC4iKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsb2czKCJGQUlMRUQi
LCByU3RhdGUsIGhlYWRlck5hbWUgKyAiPSIgKyBoZWFkZXIpOwogICAgICAgICB9IGVsc2UgaWYg
KGhlYWRlcikgewogICAgICAgICAgICAgaWYgKHNhdmVkSGVhZGVyKQogICAgICAgICAgICAgICAg
IGlmIChzYXZlZEhlYWRlciAhPSBoZWFkZXIpIHsKQEAgLTc2LDEwICs3OCw3IEBAIHhoci5vbnJl
YWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHsKICAgICAgICAgZWxzZSAvL2hlYWRlciBpcyBu
dWxsCiAgICAgICAgICAgICBsb2czKCJGQUlMRUQiLCByU3RhdGUsICJudWxsICIgKyBoZWFkZXJO
YW1lICsgIiByZXR1cm5lZC4iKTsKICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgIGlmIChyU3Rh
dGUgPCAyKQotICAgICAgICAgICAgbG9nMygiUEFTU0VEIiwgclN0YXRlLCAiZXhjZXB0aW9uIHRo
cm93biIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBsb2czKCJGQUlMRUQiLCByU3RhdGUs
ICJleGNlcHRpb24gdGhyb3duOiAiICsgZS5tZXNzYWdlICsgIi4iKTsKKyAgICAgICAgbG9nMygi
RkFJTEVEIiwgclN0YXRlLCAiZXhjZXB0aW9uIHRocm93bjogIiArIGUubWVzc2FnZSArICIuIik7
CiAgICAgfQogICAgIGlmICgoclN0YXRlID09IDQpICYmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpKQogICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwpA
QCAtOTQsOSArOTMsMTIgQEAgZnVuY3Rpb24gdGVzdCgpIHsKICAgICAvLyBUZXN0IGZvciByZWFk
eVN0YXRlID0gMAogICAgIHRyeSB7CiAgICAgICAgIHZhciBoZWFkZXIgPSB4aHIuZ2V0UmVzcG9u
c2VIZWFkZXIoaGVhZGVyTmFtZSk7Ci0gICAgICAgIGxvZzMoIkZBSUxFRCIsIHhoci5yZWFkeVN0
YXRlLCBoZWFkZXJOYW1lICsgIj0iICsgaGVhZGVyICsgIi4iKTsKKyAgICAgICAgaWYgKGhlYWRl
ciA9PT0gbnVsbCkKKyAgICAgICAgICAgIGxvZzMoIlBBU1NFRCIsIHhoci5yZWFkeVN0YXRlLCBo
ZWFkZXJOYW1lICsgIiBpcyBudWxsLiIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBsb2cz
KCJGQUlMRUQiLCB4aHIucmVhZHlTdGF0ZSwgaGVhZGVyTmFtZSArICI9IiArIGhlYWRlcik7CiAg
ICAgfSBjYXRjaCAoZSkgewotICAgICAgICBsb2czKCJQQVNTRUQiLCB4aHIucmVhZHlTdGF0ZSwg
ImV4Y2VwdGlvbiB0aHJvd24uIik7CisgICAgICAgIGxvZzMoIkZBSUxFRCIsIHhoci5yZWFkeVN0
YXRlLCAiZXhjZXB0aW9uIHRocm93bi4iKTsKICAgICB9CiAgICAgdHJ5IHsKICAgICAgICAgeGhy
Lm9wZW4oIkdFVCIsInJlc291cmNlcy8xMjUxLmh0bWwiLCB0cnVlKTsKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvc3RhdHVzLWFmdGVyLWFib3J0LWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvc3RhdHVz
LWFmdGVyLWFib3J0LWV4cGVjdGVkLnR4dAppbmRleCAzMGQ4YjFjLi44ZDdlMTE1IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3N0YXR1cy1hZnRlci1h
Ym9ydC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVx
dWVzdC9zdGF0dXMtYWZ0ZXItYWJvcnQtZXhwZWN0ZWQudHh0CkBAIC0yLDE1ICsyLDE1IEBAIFRl
c3QgZm9yIHJkYXI6Ly9wcm9ibGVtLzU3NjYzNTI6IFJFR1JFU1NJT046IFhNTEh0dHBSZXF1ZXN0
LmFib3J0KCkgcmVzZXRzIHJlc3BvCiAKIEEgbmV3bHkgY3JlYXRlZCByZXF1ZXN0LiBSZXNwb25z
ZSBzdGF0dXM6IDA7IHN0YXR1c1RleHQ6ICcnOyByZWFkeVN0YXRlOiAwCiBPcGVuaW5nLi4uCi1P
bnJlYWR5c3RhdGVjaGFuZ2UuIFJlc3BvbnNlIHN0YXR1czogW2V4Y2VwdGlvbl07IHN0YXR1c1Rl
eHQ6ICdbZXhjZXB0aW9uXSc7IHJlYWR5U3RhdGU6IDEKLU9wZW5lZCByZXF1ZXN0LiBSZXNwb25z
ZSBzdGF0dXM6IFtleGNlcHRpb25dOyBzdGF0dXNUZXh0OiAnW2V4Y2VwdGlvbl0nOyByZWFkeVN0
YXRlOiAxCi1TZW50IHJlcXVlc3QuIFJlc3BvbnNlIHN0YXR1czogW2V4Y2VwdGlvbl07IHN0YXR1
c1RleHQ6ICdbZXhjZXB0aW9uXSc7IHJlYWR5U3RhdGU6IDEKK09ucmVhZHlzdGF0ZWNoYW5nZS4g
UmVzcG9uc2Ugc3RhdHVzOiAwOyBzdGF0dXNUZXh0OiAnJzsgcmVhZHlTdGF0ZTogMQorT3BlbmVk
IHJlcXVlc3QuIFJlc3BvbnNlIHN0YXR1czogMDsgc3RhdHVzVGV4dDogJyc7IHJlYWR5U3RhdGU6
IDEKK1NlbnQgcmVxdWVzdC4gUmVzcG9uc2Ugc3RhdHVzOiAwOyBzdGF0dXNUZXh0OiAnJzsgcmVh
ZHlTdGF0ZTogMQogT25yZWFkeXN0YXRlY2hhbmdlLiBSZXNwb25zZSBzdGF0dXM6IDIwMDsgc3Rh
dHVzVGV4dDogJ09LJzsgcmVhZHlTdGF0ZTogMgogT25yZWFkeXN0YXRlY2hhbmdlLiBSZXNwb25z
ZSBzdGF0dXM6IDIwMDsgc3RhdHVzVGV4dDogJ09LJzsgcmVhZHlTdGF0ZTogMwogT25yZWFkeXN0
YXRlY2hhbmdlLiBSZXNwb25zZSBzdGF0dXM6IDIwMDsgc3RhdHVzVGV4dDogJ09LJzsgcmVhZHlT
dGF0ZTogNAogQWJvcnRpbmcgdGhlIHJlcXVlc3QuLi4KLUFmdGVyIGFib3J0aW5nIHRoZSByZXF1
ZXN0LiBSZXNwb25zZSBzdGF0dXM6IDIwMDsgc3RhdHVzVGV4dDogJ09LJzsgcmVhZHlTdGF0ZTog
MAorQWZ0ZXIgYWJvcnRpbmcgdGhlIHJlcXVlc3QuIFJlc3BvbnNlIHN0YXR1czogMDsgc3RhdHVz
VGV4dDogJyc7IHJlYWR5U3RhdGU6IDAKIFJlb3BlbmluZyB0aGUgcmVxdWVzdCB0byBjaGVjayB0
aGF0IHRoZSBzdGF0dXMgaXMgcmVzZXQuLi4KLU9ucmVhZHlzdGF0ZWNoYW5nZS4gUmVzcG9uc2Ug
c3RhdHVzOiBbZXhjZXB0aW9uXTsgc3RhdHVzVGV4dDogJ1tleGNlcHRpb25dJzsgcmVhZHlTdGF0
ZTogMQorT25yZWFkeXN0YXRlY2hhbmdlLiBSZXNwb25zZSBzdGF0dXM6IDA7IHN0YXR1c1RleHQ6
ICcnOyByZWFkeVN0YXRlOiAxCiBEb25lLgogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3htbGh0dHByZXF1ZXN0L3plcm8tbGVuZ3RoLXJlc3BvbnNlLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvemVyby1sZW5ndGgtcmVzcG9u
c2UtZXhwZWN0ZWQudHh0CmluZGV4IDhmYTBhZWIuLmNjMTljNGYgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvemVyby1sZW5ndGgtcmVzcG9uc2UtZXhw
ZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvemVy
by1sZW5ndGgtcmVzcG9uc2UtZXhwZWN0ZWQudHh0CkBAIC0xLDM1ICsxLDM1IEBACiBUZXN0IGZv
ciBidWcgNTkyNCAtIHplcm8tbGVuZ3RoIHJlc3BvbnNlcyB0byBYTUxIVFRQUmVxdWVzdCBtaXNo
YW5kbGVkLgogCiBhZnRlciBjcmVhdGlvbjogVW5pbml0aWFsaXplZAotwqDCoFN0YXR1czogMAot
wqDCoFN0YXR1c1RleHQ6ICIiCi3CoMKgUmVzcG9uc2VUZXh0OiAiIgotwqDCoFJlc3BvbnNlWE1M
OiBudWxsCi3CoMKgUmVzcG9uc2VYTUwgc2VyaWFsaXplZDogbi9hCistIFN0YXR1czogMAorLSBT
dGF0dXNUZXh0OiAiIgorLSBSZXNwb25zZVRleHQ6ICIiCistIFJlc3BvbnNlWE1MOiBudWxsCist
IFJlc3BvbnNlWE1MIHNlcmlhbGl6ZWQ6IG4vYQogYWZ0ZXIgc2V0dGluZyBvbnJlYWR5c3RhdGVj
aGFuZ2U6IFVuaW5pdGlhbGl6ZWQKIG9ucmVhZHlzdGF0ZWNoYW5nZTogT3BlbgotwqDCoEV4Y2Vw
dGlvbiBnZXR0aW5nIHN0YXR1czogSU5WQUxJRF9TVEFURV9FUlI6IERPTSBFeGNlcHRpb24gMTEK
LcKgwqBFeGNlcHRpb24gZ2V0dGluZyBTdGF0dXNUZXh0OiBJTlZBTElEX1NUQVRFX0VSUjogRE9N
IEV4Y2VwdGlvbiAxMQotwqDCoFJlc3BvbnNlVGV4dDogIiIKLcKgwqBSZXNwb25zZVhNTDogbnVs
bAotwqDCoFJlc3BvbnNlWE1MIHNlcmlhbGl6ZWQ6IG4vYQorLSBTdGF0dXM6IDAKKy0gU3RhdHVz
VGV4dDogIiIKKy0gUmVzcG9uc2VUZXh0OiAiIgorLSBSZXNwb25zZVhNTDogbnVsbAorLSBSZXNw
b25zZVhNTCBzZXJpYWxpemVkOiBuL2EKIGFmdGVyIG9wZW4oKTogT3BlbgotwqDCoEV4Y2VwdGlv
biBnZXR0aW5nIHN0YXR1czogSU5WQUxJRF9TVEFURV9FUlI6IERPTSBFeGNlcHRpb24gMTEKLcKg
wqBFeGNlcHRpb24gZ2V0dGluZyBTdGF0dXNUZXh0OiBJTlZBTElEX1NUQVRFX0VSUjogRE9NIEV4
Y2VwdGlvbiAxMQotwqDCoFJlc3BvbnNlVGV4dDogIiIKLcKgwqBSZXNwb25zZVhNTDogbnVsbAot
wqDCoFJlc3BvbnNlWE1MIHNlcmlhbGl6ZWQ6IG4vYQorLSBTdGF0dXM6IDAKKy0gU3RhdHVzVGV4
dDogIiIKKy0gUmVzcG9uc2VUZXh0OiAiIgorLSBSZXNwb25zZVhNTDogbnVsbAorLSBSZXNwb25z
ZVhNTCBzZXJpYWxpemVkOiBuL2EKIGFmdGVyIG92ZXJyaWRlTWltZVR5cGUoKTogT3BlbgogYWZ0
ZXIgc2VuZCgpOiBPcGVuCiBvbnJlYWR5c3RhdGVjaGFuZ2U6IFNlbnQKLcKgwqBTdGF0dXM6IDIw
MAotwqDCoFN0YXR1c1RleHQ6ICJPSyIKLcKgwqBSZXNwb25zZVRleHQ6ICIiCi3CoMKgUmVzcG9u
c2VYTUw6IG51bGwKLcKgwqBSZXNwb25zZVhNTCBzZXJpYWxpemVkOiBuL2EKKy0gU3RhdHVzOiAy
MDAKKy0gU3RhdHVzVGV4dDogIk9LIgorLSBSZXNwb25zZVRleHQ6ICIiCistIFJlc3BvbnNlWE1M
OiBudWxsCistIFJlc3BvbnNlWE1MIHNlcmlhbGl6ZWQ6IG4vYQogb25yZWFkeXN0YXRlY2hhbmdl
OiBMb2FkZWQKLcKgwqBTdGF0dXM6IDIwMAotwqDCoFN0YXR1c1RleHQ6ICJPSyIKLcKgwqBSZXNw
b25zZVRleHQ6ICIiCi3CoMKgUmVzcG9uc2VYTUw6IG51bGwKLcKgwqBSZXNwb25zZVhNTCBzZXJp
YWxpemVkOiBuL2EKKy0gU3RhdHVzOiAyMDAKKy0gU3RhdHVzVGV4dDogIk9LIgorLSBSZXNwb25z
ZVRleHQ6ICIiCistIFJlc3BvbnNlWE1MOiBudWxsCistIFJlc3BvbnNlWE1MIHNlcmlhbGl6ZWQ6
IG4vYQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC96
ZXJvLWxlbmd0aC1yZXNwb25zZS5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRw
cmVxdWVzdC96ZXJvLWxlbmd0aC1yZXNwb25zZS5odG1sCmluZGV4IGJjY2YzNjUuLmQ3MTk1ZGQg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvemVyby1s
ZW5ndGgtcmVzcG9uc2UuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHBy
ZXF1ZXN0L3plcm8tbGVuZ3RoLXJlc3BvbnNlLmh0bWwKQEAgLTg0LDExICs4NCwxMSBAQAogICAg
IAogICAgIGZ1bmN0aW9uIGR1bXBSZXNwb25zZSgpIHsKIAotICAgICAgIHRyeSB7IGxvZyAoIsKg
wqBTdGF0dXM6ICIgKyByZXEuc3RhdHVzKTsgfSBjYXRjaCAoZXgpIHsgbG9nKCLCoMKgRXhjZXB0
aW9uIGdldHRpbmcgc3RhdHVzOiAiICsgZXgubWVzc2FnZSk7IH0KLSAgICAgICB0cnkgeyBsb2cg
KCLCoMKgU3RhdHVzVGV4dDogIiArIHByZXR0eVByaW50VGV4dChyZXEuc3RhdHVzVGV4dCkpOyB9
IGNhdGNoIChleCkgeyBsb2coIsKgwqBFeGNlcHRpb24gZ2V0dGluZyBTdGF0dXNUZXh0OiAiICsg
ZXgubWVzc2FnZSk7IH0KLSAgICAgICB0cnkgeyBsb2cgKCLCoMKgUmVzcG9uc2VUZXh0OiAiICsg
cHJldHR5UHJpbnRUZXh0KHJlcS5yZXNwb25zZVRleHQpKTsgfSBjYXRjaCAoZXgpIHsgbG9nKCLC
oMKgRXhjZXB0aW9uIGdldHRpbmcgUmVzcG9uc2VUZXh0OiAiICsgZXgubWVzc2FnZSk7IH0KLSAg
ICAgICB0cnkgeyBsb2cgKCLCoMKgUmVzcG9uc2VYTUw6ICIgKyByZXEucmVzcG9uc2VYTUwpOyB9
IGNhdGNoIChleCkgeyBsb2coIsKgwqBFeGNlcHRpb24gZ2V0dGluZyBSZXNwb25zZVhNTDogIiAr
IGV4Lm1lc3NhZ2UpOyB9Ci0gICAgICAgdHJ5IHsgbG9nICgiwqDCoFJlc3BvbnNlWE1MIHNlcmlh
bGl6ZWQ6ICIgKyAocmVxLnJlc3BvbnNlWE1MID8gcHJldHR5UHJpbnRUZXh0KHdpbmRvdy5YTUxT
ZXJpYWxpemVyID8gKG5ldyBYTUxTZXJpYWxpemVyKCkpLnNlcmlhbGl6ZVRvU3RyaW5nKHJlcS5y
ZXNwb25zZVhNTCkgOiByZXEucmVzcG9uc2VYTUwueG1sKSA6ICJuL2EiKSk7IH0gY2F0Y2ggKGV4
KSB7IGxvZygiwqDCoEV4Y2VwdGlvbiBzZXJpYWxpemluZyBSZXNwb25zZVhNTDogIiArIGV4Lm1l
c3NhZ2UpOyB9CisgICAgICAgdHJ5IHsgbG9nICgiLSBTdGF0dXM6ICIgKyByZXEuc3RhdHVzKTsg
fSBjYXRjaCAoZXgpIHsgbG9nKCLCoMKgRXhjZXB0aW9uIGdldHRpbmcgc3RhdHVzOiAiICsgZXgu
bWVzc2FnZSk7IH0KKyAgICAgICB0cnkgeyBsb2cgKCItIFN0YXR1c1RleHQ6ICIgKyBwcmV0dHlQ
cmludFRleHQocmVxLnN0YXR1c1RleHQpKTsgfSBjYXRjaCAoZXgpIHsgbG9nKCLCoMKgRXhjZXB0
aW9uIGdldHRpbmcgU3RhdHVzVGV4dDogIiArIGV4Lm1lc3NhZ2UpOyB9CisgICAgICAgdHJ5IHsg
bG9nICgiLSBSZXNwb25zZVRleHQ6ICIgKyBwcmV0dHlQcmludFRleHQocmVxLnJlc3BvbnNlVGV4
dCkpOyB9IGNhdGNoIChleCkgeyBsb2coIsKgwqBFeGNlcHRpb24gZ2V0dGluZyBSZXNwb25zZVRl
eHQ6ICIgKyBleC5tZXNzYWdlKTsgfQorICAgICAgIHRyeSB7IGxvZyAoIi0gUmVzcG9uc2VYTUw6
ICIgKyByZXEucmVzcG9uc2VYTUwpOyB9IGNhdGNoIChleCkgeyBsb2coIsKgwqBFeGNlcHRpb24g
Z2V0dGluZyBSZXNwb25zZVhNTDogIiArIGV4Lm1lc3NhZ2UpOyB9CisgICAgICAgdHJ5IHsgbG9n
ICgiLSBSZXNwb25zZVhNTCBzZXJpYWxpemVkOiAiICsgKHJlcS5yZXNwb25zZVhNTCA/IHByZXR0
eVByaW50VGV4dCh3aW5kb3cuWE1MU2VyaWFsaXplciA/IChuZXcgWE1MU2VyaWFsaXplcigpKS5z
ZXJpYWxpemVUb1N0cmluZyhyZXEucmVzcG9uc2VYTUwpIDogcmVxLnJlc3BvbnNlWE1MLnhtbCkg
OiAibi9hIikpOyB9IGNhdGNoIChleCkgeyBsb2coIsKgwqBFeGNlcHRpb24gc2VyaWFsaXppbmcg
UmVzcG9uc2VYTUw6ICIgKyBleC5tZXNzYWdlKTsgfQogICAgIH0KIAogICAgIGZ1bmN0aW9uIHBy
b2Nlc3NTdGF0ZUNoYW5nZSgpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlNGQyMjYyLi5mM2ZmOWNjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTEtMDItMDkgIEphcnJlZCBOaWNob2xscyAgPGph
cnJlZEBzZW5jaGEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFhIUiBpbmNvbnNpc3RlbnQgaW4gaGFuZGxpbmcgYWNjZXNzIHRvIHJlc3BvbnNl
IGF0dHJpYnV0ZXMgYWZ0ZXIgYW4gZXJyb3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTU0MTYyCisKKyAgICAgICAgTWFrZSBXZWJLaXQgY29uc2lzdGVu
dCBhY3Jvc3MgdGhlIGJvYXJkIGluIGhhbmRsaW5nIFhIUiByZXNwb25zZQorICAgICAgICBhdHRy
aWJ1dGVzL2dldHRlcnMgYnkgYmVpbmcgVzNDIGNvbXBsaWFudC4gQ29ycmVjdCB2YWx1ZXMgd2ls
bCBiZQorICAgICAgICByZXR1cm5lZCBiYXNlZCBvbiB0aGUgc3RhdGUgYW5kL29yIGVycm9yIHN0
YXR1cyB0aGUgWEhSIG9iamVjdCBpcyBpbi4KKyAgICAgICAgU2VlIGh0dHA6Ly9kZXYudzMub3Jn
LzIwMDYvd2ViYXBpL1hNTEh0dHBSZXF1ZXN0LTIvLgorCisgICAgICAgICogYmluZGluZ3MvanMv
SlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1hNTEh0dHBS
ZXF1ZXN0OjpyZXNwb25zZSk6CisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZVRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlWE1MKToKKyAgICAgICAgKFdlYkNvcmU6
OlhNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZUJsb2IpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0
cFJlcXVlc3Q6OnJlc3BvbnNlQXJyYXlCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0
cFJlcXVlc3Q6OmdldEFsbFJlc3BvbnNlSGVhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpYTUxI
dHRwUmVxdWVzdDo6Z2V0UmVzcG9uc2VIZWFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0
cFJlcXVlc3Q6OnN0YXR1cyk6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6c3Rh
dHVzVGV4dCk6CisKIDIwMTEtMDItMDkgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBs
ZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAKaW5k
ZXggMWQ2ZjFjYi4uMjU5MjUzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAKQEAgLTE4NSw3ICsxODUsNyBAQCBKU1Zh
bHVlIEpTWE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKICAg
ICAgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBibG9iKTsKICAgICAg
ICAgfQogI2Vsc2UKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIHJldHVy
biBqc051bGwoKTsKICNlbmRpZgogCiAgICAgY2FzZSBYTUxIdHRwUmVxdWVzdDo6UmVzcG9uc2VU
eXBlQXJyYXlCdWZmZXI6CkBAIC0yMDAsMTEgKzIwMCwxMSBAQCBKU1ZhbHVlIEpTWE1MSHR0cFJl
cXVlc3Q6OnJlc3BvbnNlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKICAgICAgICAgICAgIHJldHVy
biB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBhcnJheUJ1ZmZlcik7CiAgICAgICAgIH0KICNl
bHNlCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICByZXR1cm4ganNOdWxs
KCk7CiAjZW5kaWYKICAgICB9CiAKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICByZXR1
cm4ganNOdWxsKCk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNYTUxIdHRw
UmVxdWVzdENvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1hNTEh0dHBSZXF1ZXN0KEV4ZWNTdGF0ZSog
ZXhlYykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCmluZGV4IGE1NDhlYmMuLjIy
YzJlMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcApAQCAtMyw2ICszLDcg
QEAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNyBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEB3
ZWJraXQub3JnPgogICogIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBKdWxpZW4gQ2hhZmZyYWl4
IDxqY2hhZmZyYWl4QHdlYmtpdC5vcmc+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA4IERhdmlkIExl
dmluIDxsZXZpbkBjaHJvbWl1bS5vcmc+CisgKiAgQ29weXJpZ2h0IChDKSAyMDExIFNlbmNoYSwg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjI5LDYg
KzIzMCwxMSBAQCBTdHJpbmcgWE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlVGV4dChFeGNlcHRpb25D
b2RlJiBlYykKICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAgcmV0dXJu
ICIiOwogICAgIH0KKworICAgIGlmIChtX3N0YXRlIDwgTE9BRElORyB8fCBtX2Vycm9yKSB7Cisg
ICAgICAgIHJldHVybiAiIjsKKyAgICB9CisKICAgICByZXR1cm4gbV9yZXNwb25zZUJ1aWxkZXIu
dG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5KCk7CiB9CiAKQEAgLTIzOSw3ICsyNDUsNyBAQCBEb2N1
bWVudCogWE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlWE1MKEV4Y2VwdGlvbkNvZGUmIGVjKQogICAg
ICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBpZiAobV9zdGF0ZSAhPSBET05FKQorICAgIGlm
IChtX3N0YXRlICE9IERPTkUgfHwgbV9lcnJvcikKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBp
ZiAoIW1fY3JlYXRlZERvY3VtZW50KSB7CkBAIC0yNjcsNiArMjczLDEwIEBAIEJsb2IqIFhNTEh0
dHBSZXF1ZXN0OjpyZXNwb25zZUJsb2IoRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiAgICAgICAg
IGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KKworICAg
IGlmIChtX3N0YXRlICE9IERPTkUgfHwgbV9lcnJvcikKKyAgICAgICAgcmV0dXJuIDA7CisKICAg
ICByZXR1cm4gbV9yZXNwb25zZUJsb2IuZ2V0KCk7CiB9CiAjZW5kaWYKQEAgLTI3NCwxMiArMjg0
LDEyIEBAIEJsb2IqIFhNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZUJsb2IoRXhjZXB0aW9uQ29kZSYg
ZWMpIGNvbnN0CiAjaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoQkxPQikKIEFycmF5QnVmZmVy
KiBYTUxIdHRwUmVxdWVzdDo6cmVzcG9uc2VBcnJheUJ1ZmZlcihFeGNlcHRpb25Db2RlJiBlYykK
IHsKLSAgICBpZiAobV9yZXNwb25zZVR5cGVDb2RlICE9IFJlc3BvbnNlVHlwZUFycmF5QnVmZmVy
KSB7CisgICAgaWYgKHJlc3BvbnNlVHlwZUNvZGUoKSAhPSBSZXNwb25zZVR5cGVBcnJheUJ1ZmZl
cikgewogICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwogICAgICAgICByZXR1cm4gMDsK
ICAgICB9CiAKLSAgICBpZiAobV9zdGF0ZSAhPSBET05FKQorICAgIGlmIChtX3N0YXRlICE9IERP
TkUgfHwgbV9lcnJvcikKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpZiAoIW1fcmVzcG9uc2VB
cnJheUJ1ZmZlci5nZXQoKSAmJiBtX2JpbmFyeVJlc3BvbnNlQnVpbGRlci5nZXQoKSAmJiBtX2Jp
bmFyeVJlc3BvbnNlQnVpbGRlci0+c2l6ZSgpID4gMCkgewpAQCAtODYyLDggKzg3Miw5IEBAIFN0
cmluZyBYTUxIdHRwUmVxdWVzdDo6Z2V0UmVxdWVzdEhlYWRlcihjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWUpIGNvbnN0CiAKIFN0cmluZyBYTUxIdHRwUmVxdWVzdDo6Z2V0QWxsUmVzcG9uc2VIZWFk
ZXJzKEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogewotICAgIGlmIChtX3N0YXRlIDwgSEVBREVS
U19SRUNFSVZFRCkgewotICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOworICAgIGlmICht
X3N0YXRlIDwgSEVBREVSU19SRUNFSVZFRCB8fCBtX2Vycm9yKSB7CisgICAgICAgIC8vIFJldHVy
biBlbXB0eSBzdHJpbmcgaW5zdGVhZCBvZiBhIG51bGwgU3RyaW5nKCksIG90aGVyd2lzZSB3ZSdk
IGJlCisgICAgICAgIC8vIHJldHVybmluZyBKUyB1bmRlZmluZWQgcGVyIHRoZSBJREwgYmluZGlu
Zy4KICAgICAgICAgcmV0dXJuICIiOwogICAgIH0KIApAQCAtODk2LDggKzkwNyw3IEBAIFN0cmlu
ZyBYTUxIdHRwUmVxdWVzdDo6Z2V0QWxsUmVzcG9uc2VIZWFkZXJzKEV4Y2VwdGlvbkNvZGUmIGVj
KSBjb25zdAogCiBTdHJpbmcgWE1MSHR0cFJlcXVlc3Q6OmdldFJlc3BvbnNlSGVhZGVyKGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiB7Ci0gICAgaWYg
KG1fc3RhdGUgPCBIRUFERVJTX1JFQ0VJVkVEKSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9TVEFU
RV9FUlI7CisgICAgaWYgKG1fc3RhdGUgPCBIRUFERVJTX1JFQ0VJVkVEIHx8IG1fZXJyb3IpIHsK
ICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIH0KIApAQCAtOTM2LDEzICs5NDYsOSBAQCBi
b29sIFhNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZUlzWE1MKCkgY29uc3QKIAogaW50IFhNTEh0dHBS
ZXF1ZXN0OjpzdGF0dXMoRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiB7Ci0gICAgaWYgKG1fcmVz
cG9uc2UuaHR0cFN0YXR1c0NvZGUoKSkKLSAgICAgICAgcmV0dXJuIG1fcmVzcG9uc2UuaHR0cFN0
YXR1c0NvZGUoKTsKLQotICAgIGlmIChtX3N0YXRlID09IE9QRU5FRCkgewotICAgICAgICAvLyBG
aXJlZm94IG9ubHkgcmFpc2VzIGFuIGV4Y2VwdGlvbiBpbiB0aGlzIHN0YXRlOyB3ZSBtYXRjaCBp
dC4KLSAgICAgICAgLy8gTm90ZSB0aGUgY2FzZSBvZiBsb2NhbCBmaWxlIHJlcXVlc3RzLCB3aGVy
ZSB3ZSBoYXZlIG5vIEhUVFAgcmVzcG9uc2UgY29kZSEgRmlyZWZveCBuZXZlciByYWlzZXMgYW4g
ZXhjZXB0aW9uIGZvciB0aG9zZSwgYnV0IHdlIG1hdGNoIEhUVFAgY2FzZSBmb3IgY29uc2lzdGVu
Y3kuCi0gICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgaWYgKG1fc3RhdGUgPj0g
SEVBREVSU19SRUNFSVZFRCAmJiAhbV9lcnJvcikgeworICAgICAgICBpZiAobV9yZXNwb25zZS5o
dHRwU3RhdHVzQ29kZSgpKQorICAgICAgICAgICAgcmV0dXJuIG1fcmVzcG9uc2UuaHR0cFN0YXR1
c0NvZGUoKTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTk1MCwxNSArOTU2LDEzIEBAIGlu
dCBYTUxIdHRwUmVxdWVzdDo6c3RhdHVzKEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogCiBTdHJp
bmcgWE1MSHR0cFJlcXVlc3Q6OnN0YXR1c1RleHQoRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiB7
Ci0gICAgaWYgKCFtX3Jlc3BvbnNlLmh0dHBTdGF0dXNUZXh0KCkuaXNOdWxsKCkpCi0gICAgICAg
IHJldHVybiBtX3Jlc3BvbnNlLmh0dHBTdGF0dXNUZXh0KCk7Ci0KLSAgICBpZiAobV9zdGF0ZSA9
PSBPUEVORUQpIHsKLSAgICAgICAgLy8gU2VlIGNvbW1lbnRzIGluIHN0YXR1cygpIGFib3ZlLgot
ICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOworICAgIGlmIChtX3N0YXRlID49IEhFQURF
UlNfUkVDRUlWRUQgJiYgIW1fZXJyb3IpIHsKKyAgICAgICAgaWYgKCFtX3Jlc3BvbnNlLmh0dHBT
dGF0dXNUZXh0KCkuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gbV9yZXNwb25zZS5odHRw
U3RhdHVzVGV4dCgpOwogICAgIH0KIAotICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAvLyBSZXR1
cm4gZW1wdHkgc3RyaW5nLCBub3QgYSBudWxsIFN0cmluZygpCisgICAgcmV0dXJuICIiOwogfQog
CiB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9y
KQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81933</attachid>
            <date>2011-02-10 00:15:35 -0800</date>
            <delta_ts>2011-02-14 15:03:45 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>xhr-stuff.patch</filename>
            <type>text/plain</type>
            <size>20969</size>
            <attacher name="Jarred Nicholls">jarred</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2YjkxYjk0Li4zMjJiNTdmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDIt
MDkgIEphcnJlZCBOaWNob2xscyAgPGphcnJlZEBzZW5jaGEuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFhIUiBpbmNvbnNpc3RlbnQgaW4gaGFu
ZGxpbmcgYWNjZXNzIHRvIHJlc3BvbnNlIGF0dHJpYnV0ZXMgYWZ0ZXIgYW4gZXJyb3IKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0MTYyCisgICAgICAg
IAorICAgICAgICBVcGRhdGVkIHRlc3RzIGZvciByZXR1cm4gdmFsdWVzIG9mIFhIUiByZXNwb25z
ZSBhdHRyaWJ1dGVzL2dldHRlcnMuCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL3htbGh0dHByZXF1
ZXN0L2V4Y2VwdGlvbnMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGh0dHAvdGVzdHMveG1saHR0
cHJlcXVlc3QvZXhjZXB0aW9ucy5odG1sOgorICAgICAgICAqIGh0dHAvdGVzdHMveG1saHR0cHJl
cXVlc3QvZ2V0QWxsUmVzcG9uc2VIZWFkZXJzLmh0bWw6CisgICAgICAgICogaHR0cC90ZXN0cy94
bWxodHRwcmVxdWVzdC9nZXRSZXNwb25zZUhlYWRlci1leHBlY3RlZC50eHQ6CisgICAgICAgICog
aHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9nZXRSZXNwb25zZUhlYWRlci5odG1sOgorICAgICAg
ICAqIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvc3RhdHVzLWFmdGVyLWFib3J0LWV4cGVjdGVk
LnR4dDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3plcm8tbGVuZ3RoLXJl
c3BvbnNlLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0
L3plcm8tbGVuZ3RoLXJlc3BvbnNlLmh0bWw6CisKIDIwMTEtMDItMDkgIFNpbW9uIEZyYXNlciAg
PHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5z
dGVpbi4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qv
ZXhjZXB0aW9ucy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHBy
ZXF1ZXN0L2V4Y2VwdGlvbnMtZXhwZWN0ZWQudHh0CmluZGV4IDg3OTkyMzYuLjJiMzc2MjkgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvZXhjZXB0aW9u
cy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVz
dC9leGNlcHRpb25zLWV4cGVjdGVkLnR4dApAQCAtNiw4ICs2LDYgQEAgUEFTUzogcmVxLnNlbmQo
bnVsbCkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBJTlZBTElEX1NUQVRFX0VSUjogRE9NIEV4Y2Vw
dGlvbiAxMS4KIG9wZW4oKQogUEFTUzogcmVxLnNldFJlcXVlc3RIZWFkZXIoKSB0aHJldyBleGNl
cHRpb24gU3ludGF4RXJyb3I6IE5vdCBlbm91Z2ggYXJndW1lbnRzLgogUEFTUzogcmVxLnNldFJl
cXVlc3RIZWFkZXIoIkZvbyIpIHRocmV3IGV4Y2VwdGlvbiBTeW50YXhFcnJvcjogTm90IGVub3Vn
aCBhcmd1bWVudHMuCi1QQVNTOiByZXEuc3RhdHVzKCkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBJ
TlZBTElEX1NUQVRFX0VSUjogRE9NIEV4Y2VwdGlvbiAxMS4KLVBBU1M6IHJlcS5zdGF0dXNUZXh0
KCkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBJTlZBTElEX1NUQVRFX0VSUjogRE9NIEV4Y2VwdGlv
biAxMS4KIHNlbmQoKQogUEFTUzogcmVxLnNlbmQobnVsbCkgdGhyZXcgZXhjZXB0aW9uIEVycm9y
OiBJTlZBTElEX1NUQVRFX0VSUjogRE9NIEV4Y2VwdGlvbiAxMS4KIFBBU1M6IHJlcS5zZXRSZXF1
ZXN0SGVhZGVyKCJGb28iLCAiYmFyIikgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBJTlZBTElEX1NU
QVRFX0VSUjogRE9NIEV4Y2VwdGlvbiAxMS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMveG1saHR0cHJlcXVlc3QvZXhjZXB0aW9ucy5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy94bWxodHRwcmVxdWVzdC9leGNlcHRpb25zLmh0bWwKaW5kZXggNDdjODVmNS4uMDIwYTZl
NSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9leGNl
cHRpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9l
eGNlcHRpb25zLmh0bWwKQEAgLTY0LDggKzY0LDYgQEAKICAgICAKICAgICBzaG91bGRUaHJvdygn
cmVxLnNldFJlcXVlc3RIZWFkZXIoKScpOwogICAgIHNob3VsZFRocm93KCdyZXEuc2V0UmVxdWVz
dEhlYWRlcigiRm9vIiknKTsKLSAgICBzaG91bGRUaHJvdygncmVxLnN0YXR1cygpJyk7Ci0gICAg
c2hvdWxkVGhyb3coJ3JlcS5zdGF0dXNUZXh0KCknKTsKICAgICAKICAgICByZXEuc2VuZChudWxs
KTsKICAgICBsb2coInNlbmQoKSIpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy94bWxodHRwcmVxdWVzdC9nZXRBbGxSZXNwb25zZUhlYWRlcnMuaHRtbCBiL0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvZ2V0QWxsUmVzcG9uc2VIZWFkZXJzLmh0bWwKaW5k
ZXggNDRlY2QwMi4uMDczYTM0MyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94
bWxodHRwcmVxdWVzdC9nZXRBbGxSZXNwb25zZUhlYWRlcnMuaHRtbAorKysgYi9MYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L2dldEFsbFJlc3BvbnNlSGVhZGVycy5odG1sCkBA
IC0xMCw2ICsxMCwxMCBAQCBmdW5jdGlvbiBsb2cgKG1zZykgewogICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJjb25zb2xlIikuYXBwZW5kQ2hpbGQocGFyYWdyYXBoKTsKIH0KIAorZnVuY3Rp
b24gaXNTdHJpbmcocykgeworICAgIHJldHVybiB0eXBlb2YgcyA9PT0gJ3N0cmluZyc7Cit9CisK
IHZhciB4aHI7CiAKIGlmICh3aW5kb3cuWE1MSHR0cFJlcXVlc3QpIHsKQEAgLTI1LDIxICsyOSwy
NCBAQCBpZiAod2luZG93LlhNTEh0dHBSZXF1ZXN0KSB7CiB2YXIgc2F2ZWRIZWFkZXIgPSBudWxs
OwogeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkgewogICAgIHZhciByU3RhdGUg
PSB0aGlzLnJlYWR5U3RhdGU7Ci0gICAgLy8gV2UgZXhwZWN0IGFuIElOVkFMSURfU1RBVEVfRVJS
IGV4Y2VwdGlvbiBmb3IgcmVhZHlTdGF0ZSA8IDIKLSAgICAvLyBhbmQgbm8gZXhjZXB0aW9uIGZv
ciByZWFkeVN0YXRlID49IDIKKyAgICAKICAgICB0cnkgewogICAgICAgICB2YXIgaGVhZGVyID0g
dGhpcy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKTsKKyAgICAgICAgLy8gV2Ugc2hvdWxkIGFsd2F5
cyBiZSBnZXR0aW5nIGJhY2sgYSBzdHJpbmcsIG5vIG1hdHRlciB3aGF0CisgICAgICAgIGlmICgh
aXNTdHJpbmcoaGVhZGVyKSkgeworICAgICAgICAgICAgbG9nKCJGQUlMRUQgIiArIHJTdGF0ZSAr
ICI6IGhlYWRlciB3YXMgbm90IGEgc3RyaW5nIGFzIGV4cGVjdGVkLiIpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBpZiAoclN0YXRlICE9IHRoaXMu
cmVhZHlTdGF0ZSkKICAgICAgICAgICAgIGxvZygiVU5DRVJUQUlOICIgKyByU3RhdGUgKyAiOiBy
ZWFkeVN0YXRlIGNoYW5nZWQgd2hpbGUgZ2V0dGluZyBoZWFkZXJzLiIpOwotICAgICAgICBpZiAo
clN0YXRlIDwgMikgewotICAgICAgICAgICAgbG9nKCJGQUlMRUQgIiArIHJTdGF0ZSArICI6IGhl
YWRlcmxpc3Q9IiArIGhlYWRlcik7Ci0gICAgICAgIH0gZWxzZSBpZiAoaGVhZGVyKQorICAgICAg
ICBpZiAoaGVhZGVyKQogICAgICAgICAgICAgaWYgKHNhdmVkSGVhZGVyKQogICAgICAgICAgICAg
ICAgIGlmIChzYXZlZEhlYWRlciAhPSBoZWFkZXIpIHsKICAgICAgICAgICAgICAgICAgICAgbG9n
KCJGQUlMRUQgIiArIHJTdGF0ZSArCiAiOiBoZWFkZXJsaXN0IGNoYW5nZWQgYWZ0ZXIgaXQgd2Fz
IGZpcnN0IHJldHVybmVkLiBQcmV2aW91cyBoZWFkZXIgbGlzdDpcbiIKICsgc2F2ZWRIZWFkZXIg
KyAiXG4gTmV3IGhlYWRlcmxpc3Q6XG4iICsgaGVhZGVyKTsKLSAgICAgICAgICAgICAgICBzYXZl
ZEhlYWRlciA9IGhlYWRlcjsKKyAgICAgICAgICAgICAgICAgICAgc2F2ZWRIZWFkZXIgPSBoZWFk
ZXI7CiAgICAgICAgICAgICAgICAgfSAKICAgICAgICAgICAgICAgICBlbHNlIC8vc2F2ZWRIZWFk
ZXIgPT0gaGVhZGVyIGhlcmU7IG5vIG5lZWQgdG8gcmVwcmludCBoZWFkZXIKICAgICAgICAgICAg
ICAgICAgICAgbG9nKCJQQVNTRUQgIiArIHJTdGF0ZSk7CkBAIC01NiwxNCArNjMsMTIgQEAgeGhy
Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkgewogIjogZ2V0QWxsUmVzcG9uc2VIZWFk
ZXJzIHJldHVybmVkOlxuIiArIGhlYWRlcik7CiAgICAgICAgICAgICAgICAgc2F2ZWRIZWFkZXIg
PSBoZWFkZXI7CiAgICAgICAgICAgICB9Ci0gICAgICAgIGVsc2UgLy9oZWFkZXIgaXMgbnVsbAor
ICAgICAgICBlbHNlIGlmIChoZWFkZXIgPT0gbnVsbCkgLy9oZWFkZXIgaXMgbnVsbAogICAgICAg
ICAgICAgbG9nKCJGQUlMRUQgIiArIHJTdGF0ZSArICI6IG51bGwgaGVhZGVyIGxpc3QgcmV0dXJu
ZWQiKTsKLSAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgIGlmIChyU3RhdGUgPCAyKSB7CisgICAg
ICAgIGVsc2UgaWYgKHJTdGF0ZSA9PSAxKQogICAgICAgICAgICAgbG9nKCJQQVNTRUQgIiArIHJT
dGF0ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBsb2coIkZBSUxFRCAiICsgclN0
YXRlICsgIjogRVhDRVBUSU9OIFRIUk9XTjogIiArIGUubWVzc2FnZSArICIuIik7Ci0gICAgICAg
IH0KKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGxvZygiRkFJTEVEICIgKyByU3RhdGUgKyAi
OiBFWENFUFRJT04gVEhST1dOOiAiICsgZS5tZXNzYWdlICsgIi4iKTsKICAgICB9CiAgICAgaWYg
KChyU3RhdGUgPT0gNCkgJiYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikpCiAgICAgICAg
ICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CkBAIC03Nyw5ICs4MiwxMiBA
QCBmdW5jdGlvbiB0ZXN0KCkgewogICAgIC8vIFRlc3QgZm9yIHJlYWR5U3RhdGUgPSAwCiAgICAg
dHJ5IHsKICAgICAgICAgdmFyIGhlYWRlciA9IHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKTsK
LSAgICAgICAgbG9nKCJGQUlMRUQgIiArIHhoci5yZWFkeVN0YXRlICsgIjogaGVhZGVyPSIgKyBo
ZWFkZXIpOworICAgICAgICBpZiAoaXNTdHJpbmcoaGVhZGVyKSkKKyAgICAgICAgICAgIGxvZygi
UEFTU0VEICIgKyB4aHIucmVhZHlTdGF0ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxv
ZygiRkFJTEVEICIgKyB4aHIucmVhZHlTdGF0ZSArICI6IGhlYWRlciB3YXMgbm90IGEgc3RyaW5n
IGFzIGV4cGVjdGVkLiIpOwogICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgbG9nKCJQQVNTRUQg
IiArIHhoci5yZWFkeVN0YXRlKTsKKyAgICAgICAgbG9nKCJGQUlMRUQgIiArIHhoci5yZWFkeVN0
YXRlICsgIjsgRVhDRVBUSU9OIFRIUk9XTjogIiArIGUubWVzc2FnZSArICIuIik7CiAgICAgfQog
ICAgIHRyeSB7CiAgICAgICAgIHhoci5vcGVuKCJHRVQiLCJyZXNvdXJjZXMvMTI1MS5odG1sIiwg
dHJ1ZSk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0
L2dldFJlc3BvbnNlSGVhZGVyLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMv
eG1saHR0cHJlcXVlc3QvZ2V0UmVzcG9uc2VIZWFkZXItZXhwZWN0ZWQudHh0CmluZGV4IDU2N2Ez
MzUuLjBiZDQ3MjkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJl
cXVlc3QvZ2V0UmVzcG9uc2VIZWFkZXItZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2h0
dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvZ2V0UmVzcG9uc2VIZWFkZXItZXhwZWN0ZWQudHh0CkBA
IC0xNSw4ICsxNSw4IEBAIEFzc2VydGlvbjogSW52b2tpbmcgdGhlIGdldFJlc3BvbnNlSGVhZGVy
IG1ldGhvZCB3aXRoIHRoZSBwYXJhbWV0ZXIgc2F0aXNmeWluZyB0CiAyLiBUaGUgcGFyYW1ldGVy
IGRvZXMgbm90IG1hdGNoIGFueSBoZWFkZXIgaW4gdGhlIHJlc3BvbnNlOwogM2EuIFRoZSBwYXJh
bWV0ZXIgaXMgbnVsbCAoaXQgaXMgbm90IGEgdmFsaWQgaGVhZGVyIG5hbWUpOwogM2IuIFRoZSBw
YXJhbWV0ZXIgaXMgIkNvbnRlbnQtVHlwZToiIChpdCBpcyBub3QgYSB2YWxpZCBoZWFkZXIgbmFt
ZSkuCi1QQVNTRUQgMCBDb250ZW50LVR5cGU6IGV4Y2VwdGlvbiB0aHJvd24uCi1QQVNTRUQgMSBD
b250ZW50LVR5cGU6IGV4Y2VwdGlvbiB0aHJvd24KK1BBU1NFRCAwIENvbnRlbnQtVHlwZTogQ29u
dGVudC1UeXBlIGlzIG51bGwuCitQQVNTRUQgMSBDb250ZW50LVR5cGU6IENvbnRlbnQtVHlwZSBp
cyBudWxsLgogUEFTU0VEIDIgQ29udGVudC1UeXBlOiBSZXNwb25zZUhlYWRlcihDb250ZW50LVR5
cGUpIHJldHVybmVkIGEgdmFsdWUuCiBQQVNTRUQgMiBTZVQtQ09vS2llOiBnZXRSZXNwb25zZUhl
YWRlcihTZVQtQ09vS2llKSByZXR1cm5lZCBudWxsLgogUEFTU0VEIDIgc0V0LWNvT2tJRTI6IGdl
dFJlc3BvbnNlSGVhZGVyKHNFdC1jb09rSUUyKSByZXR1cm5lZCBudWxsLgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9nZXRSZXNwb25zZUhlYWRlci5o
dG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9nZXRSZXNwb25zZUhl
YWRlci5odG1sCmluZGV4IGMxY2QxZTguLjgwZmQ0MmIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvZ2V0UmVzcG9uc2VIZWFkZXIuaHRtbAorKysgYi9M
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L2dldFJlc3BvbnNlSGVhZGVyLmh0
bWwKQEAgLTM0LDE0ICszNCwxNiBAQCBpZiAod2luZG93LlhNTEh0dHBSZXF1ZXN0KSB7CiAKIHho
ci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHsKICAgICB2YXIgclN0YXRlID0gdGhp
cy5yZWFkeVN0YXRlOwotICAgIC8vIFdlIGV4cGVjdCBhbiBJTlZBTElEX1NUQVRFX0VSUiBleGNl
cHRpb24gZm9yIHJlYWR5U3RhdGUgPCAyCi0gICAgLy8gYW5kIG5vIGV4Y2VwdGlvbiBmb3IgcmVh
ZHlTdGF0ZSA+PSAyCisgICAgCiAgICAgdHJ5IHsKICAgICAgICAgdmFyIGhlYWRlciA9IHRoaXMu
Z2V0UmVzcG9uc2VIZWFkZXIoaGVhZGVyTmFtZSk7CiAgICAgICAgIGlmIChyU3RhdGUgIT0gdGhp
cy5yZWFkeVN0YXRlKQogICAgICAgICAgICAgbG9nMygiVU5DRVJUQUlOIiwgclN0YXRlLCAicmVh
ZHlTdGF0ZSBjaGFuZ2VkIHdoaWxlIGdldHRpbmcgdGhlIGhlYWRlci4iKTsKICAgICAgICAgaWYg
KHJTdGF0ZSA8IDIpIHsKLSAgICAgICAgICAgIGxvZzMoIkZBSUxFRCIsIHJTdGF0ZSwgaGVhZGVy
TmFtZSArICI9IiArIGhlYWRlcik7CisgICAgICAgICAgICBpZiAoaGVhZGVyID09PSBudWxsKQor
ICAgICAgICAgICAgICAgIGxvZzMoIlBBU1NFRCIsIHJTdGF0ZSwgaGVhZGVyTmFtZSArICIgaXMg
bnVsbC4iKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsb2czKCJGQUlMRUQi
LCByU3RhdGUsIGhlYWRlck5hbWUgKyAiPSIgKyBoZWFkZXIpOwogICAgICAgICB9IGVsc2UgaWYg
KGhlYWRlcikgewogICAgICAgICAgICAgaWYgKHNhdmVkSGVhZGVyKQogICAgICAgICAgICAgICAg
IGlmIChzYXZlZEhlYWRlciAhPSBoZWFkZXIpIHsKQEAgLTc2LDEwICs3OCw3IEBAIHhoci5vbnJl
YWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHsKICAgICAgICAgZWxzZSAvL2hlYWRlciBpcyBu
dWxsCiAgICAgICAgICAgICBsb2czKCJGQUlMRUQiLCByU3RhdGUsICJudWxsICIgKyBoZWFkZXJO
YW1lICsgIiByZXR1cm5lZC4iKTsKICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgIGlmIChyU3Rh
dGUgPCAyKQotICAgICAgICAgICAgbG9nMygiUEFTU0VEIiwgclN0YXRlLCAiZXhjZXB0aW9uIHRo
cm93biIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBsb2czKCJGQUlMRUQiLCByU3RhdGUs
ICJleGNlcHRpb24gdGhyb3duOiAiICsgZS5tZXNzYWdlICsgIi4iKTsKKyAgICAgICAgbG9nMygi
RkFJTEVEIiwgclN0YXRlLCAiZXhjZXB0aW9uIHRocm93bjogIiArIGUubWVzc2FnZSArICIuIik7
CiAgICAgfQogICAgIGlmICgoclN0YXRlID09IDQpICYmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpKQogICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwpA
QCAtOTQsOSArOTMsMTIgQEAgZnVuY3Rpb24gdGVzdCgpIHsKICAgICAvLyBUZXN0IGZvciByZWFk
eVN0YXRlID0gMAogICAgIHRyeSB7CiAgICAgICAgIHZhciBoZWFkZXIgPSB4aHIuZ2V0UmVzcG9u
c2VIZWFkZXIoaGVhZGVyTmFtZSk7Ci0gICAgICAgIGxvZzMoIkZBSUxFRCIsIHhoci5yZWFkeVN0
YXRlLCBoZWFkZXJOYW1lICsgIj0iICsgaGVhZGVyICsgIi4iKTsKKyAgICAgICAgaWYgKGhlYWRl
ciA9PT0gbnVsbCkKKyAgICAgICAgICAgIGxvZzMoIlBBU1NFRCIsIHhoci5yZWFkeVN0YXRlLCBo
ZWFkZXJOYW1lICsgIiBpcyBudWxsLiIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBsb2cz
KCJGQUlMRUQiLCB4aHIucmVhZHlTdGF0ZSwgaGVhZGVyTmFtZSArICI9IiArIGhlYWRlcik7CiAg
ICAgfSBjYXRjaCAoZSkgewotICAgICAgICBsb2czKCJQQVNTRUQiLCB4aHIucmVhZHlTdGF0ZSwg
ImV4Y2VwdGlvbiB0aHJvd24uIik7CisgICAgICAgIGxvZzMoIkZBSUxFRCIsIHhoci5yZWFkeVN0
YXRlLCAiZXhjZXB0aW9uIHRocm93bi4iKTsKICAgICB9CiAgICAgdHJ5IHsKICAgICAgICAgeGhy
Lm9wZW4oIkdFVCIsInJlc291cmNlcy8xMjUxLmh0bWwiLCB0cnVlKTsKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvc3RhdHVzLWFmdGVyLWFib3J0LWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvc3RhdHVz
LWFmdGVyLWFib3J0LWV4cGVjdGVkLnR4dAppbmRleCAzMGQ4YjFjLi44ZDdlMTE1IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3N0YXR1cy1hZnRlci1h
Ym9ydC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVx
dWVzdC9zdGF0dXMtYWZ0ZXItYWJvcnQtZXhwZWN0ZWQudHh0CkBAIC0yLDE1ICsyLDE1IEBAIFRl
c3QgZm9yIHJkYXI6Ly9wcm9ibGVtLzU3NjYzNTI6IFJFR1JFU1NJT046IFhNTEh0dHBSZXF1ZXN0
LmFib3J0KCkgcmVzZXRzIHJlc3BvCiAKIEEgbmV3bHkgY3JlYXRlZCByZXF1ZXN0LiBSZXNwb25z
ZSBzdGF0dXM6IDA7IHN0YXR1c1RleHQ6ICcnOyByZWFkeVN0YXRlOiAwCiBPcGVuaW5nLi4uCi1P
bnJlYWR5c3RhdGVjaGFuZ2UuIFJlc3BvbnNlIHN0YXR1czogW2V4Y2VwdGlvbl07IHN0YXR1c1Rl
eHQ6ICdbZXhjZXB0aW9uXSc7IHJlYWR5U3RhdGU6IDEKLU9wZW5lZCByZXF1ZXN0LiBSZXNwb25z
ZSBzdGF0dXM6IFtleGNlcHRpb25dOyBzdGF0dXNUZXh0OiAnW2V4Y2VwdGlvbl0nOyByZWFkeVN0
YXRlOiAxCi1TZW50IHJlcXVlc3QuIFJlc3BvbnNlIHN0YXR1czogW2V4Y2VwdGlvbl07IHN0YXR1
c1RleHQ6ICdbZXhjZXB0aW9uXSc7IHJlYWR5U3RhdGU6IDEKK09ucmVhZHlzdGF0ZWNoYW5nZS4g
UmVzcG9uc2Ugc3RhdHVzOiAwOyBzdGF0dXNUZXh0OiAnJzsgcmVhZHlTdGF0ZTogMQorT3BlbmVk
IHJlcXVlc3QuIFJlc3BvbnNlIHN0YXR1czogMDsgc3RhdHVzVGV4dDogJyc7IHJlYWR5U3RhdGU6
IDEKK1NlbnQgcmVxdWVzdC4gUmVzcG9uc2Ugc3RhdHVzOiAwOyBzdGF0dXNUZXh0OiAnJzsgcmVh
ZHlTdGF0ZTogMQogT25yZWFkeXN0YXRlY2hhbmdlLiBSZXNwb25zZSBzdGF0dXM6IDIwMDsgc3Rh
dHVzVGV4dDogJ09LJzsgcmVhZHlTdGF0ZTogMgogT25yZWFkeXN0YXRlY2hhbmdlLiBSZXNwb25z
ZSBzdGF0dXM6IDIwMDsgc3RhdHVzVGV4dDogJ09LJzsgcmVhZHlTdGF0ZTogMwogT25yZWFkeXN0
YXRlY2hhbmdlLiBSZXNwb25zZSBzdGF0dXM6IDIwMDsgc3RhdHVzVGV4dDogJ09LJzsgcmVhZHlT
dGF0ZTogNAogQWJvcnRpbmcgdGhlIHJlcXVlc3QuLi4KLUFmdGVyIGFib3J0aW5nIHRoZSByZXF1
ZXN0LiBSZXNwb25zZSBzdGF0dXM6IDIwMDsgc3RhdHVzVGV4dDogJ09LJzsgcmVhZHlTdGF0ZTog
MAorQWZ0ZXIgYWJvcnRpbmcgdGhlIHJlcXVlc3QuIFJlc3BvbnNlIHN0YXR1czogMDsgc3RhdHVz
VGV4dDogJyc7IHJlYWR5U3RhdGU6IDAKIFJlb3BlbmluZyB0aGUgcmVxdWVzdCB0byBjaGVjayB0
aGF0IHRoZSBzdGF0dXMgaXMgcmVzZXQuLi4KLU9ucmVhZHlzdGF0ZWNoYW5nZS4gUmVzcG9uc2Ug
c3RhdHVzOiBbZXhjZXB0aW9uXTsgc3RhdHVzVGV4dDogJ1tleGNlcHRpb25dJzsgcmVhZHlTdGF0
ZTogMQorT25yZWFkeXN0YXRlY2hhbmdlLiBSZXNwb25zZSBzdGF0dXM6IDA7IHN0YXR1c1RleHQ6
ICcnOyByZWFkeVN0YXRlOiAxCiBEb25lLgogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3htbGh0dHByZXF1ZXN0L3plcm8tbGVuZ3RoLXJlc3BvbnNlLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvemVyby1sZW5ndGgtcmVzcG9u
c2UtZXhwZWN0ZWQudHh0CmluZGV4IDhmYTBhZWIuLmNjMTljNGYgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvemVyby1sZW5ndGgtcmVzcG9uc2UtZXhw
ZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvemVy
by1sZW5ndGgtcmVzcG9uc2UtZXhwZWN0ZWQudHh0CkBAIC0xLDM1ICsxLDM1IEBACiBUZXN0IGZv
ciBidWcgNTkyNCAtIHplcm8tbGVuZ3RoIHJlc3BvbnNlcyB0byBYTUxIVFRQUmVxdWVzdCBtaXNo
YW5kbGVkLgogCiBhZnRlciBjcmVhdGlvbjogVW5pbml0aWFsaXplZAotwqDCoFN0YXR1czogMAot
wqDCoFN0YXR1c1RleHQ6ICIiCi3CoMKgUmVzcG9uc2VUZXh0OiAiIgotwqDCoFJlc3BvbnNlWE1M
OiBudWxsCi3CoMKgUmVzcG9uc2VYTUwgc2VyaWFsaXplZDogbi9hCistIFN0YXR1czogMAorLSBT
dGF0dXNUZXh0OiAiIgorLSBSZXNwb25zZVRleHQ6ICIiCistIFJlc3BvbnNlWE1MOiBudWxsCist
IFJlc3BvbnNlWE1MIHNlcmlhbGl6ZWQ6IG4vYQogYWZ0ZXIgc2V0dGluZyBvbnJlYWR5c3RhdGVj
aGFuZ2U6IFVuaW5pdGlhbGl6ZWQKIG9ucmVhZHlzdGF0ZWNoYW5nZTogT3BlbgotwqDCoEV4Y2Vw
dGlvbiBnZXR0aW5nIHN0YXR1czogSU5WQUxJRF9TVEFURV9FUlI6IERPTSBFeGNlcHRpb24gMTEK
LcKgwqBFeGNlcHRpb24gZ2V0dGluZyBTdGF0dXNUZXh0OiBJTlZBTElEX1NUQVRFX0VSUjogRE9N
IEV4Y2VwdGlvbiAxMQotwqDCoFJlc3BvbnNlVGV4dDogIiIKLcKgwqBSZXNwb25zZVhNTDogbnVs
bAotwqDCoFJlc3BvbnNlWE1MIHNlcmlhbGl6ZWQ6IG4vYQorLSBTdGF0dXM6IDAKKy0gU3RhdHVz
VGV4dDogIiIKKy0gUmVzcG9uc2VUZXh0OiAiIgorLSBSZXNwb25zZVhNTDogbnVsbAorLSBSZXNw
b25zZVhNTCBzZXJpYWxpemVkOiBuL2EKIGFmdGVyIG9wZW4oKTogT3BlbgotwqDCoEV4Y2VwdGlv
biBnZXR0aW5nIHN0YXR1czogSU5WQUxJRF9TVEFURV9FUlI6IERPTSBFeGNlcHRpb24gMTEKLcKg
wqBFeGNlcHRpb24gZ2V0dGluZyBTdGF0dXNUZXh0OiBJTlZBTElEX1NUQVRFX0VSUjogRE9NIEV4
Y2VwdGlvbiAxMQotwqDCoFJlc3BvbnNlVGV4dDogIiIKLcKgwqBSZXNwb25zZVhNTDogbnVsbAot
wqDCoFJlc3BvbnNlWE1MIHNlcmlhbGl6ZWQ6IG4vYQorLSBTdGF0dXM6IDAKKy0gU3RhdHVzVGV4
dDogIiIKKy0gUmVzcG9uc2VUZXh0OiAiIgorLSBSZXNwb25zZVhNTDogbnVsbAorLSBSZXNwb25z
ZVhNTCBzZXJpYWxpemVkOiBuL2EKIGFmdGVyIG92ZXJyaWRlTWltZVR5cGUoKTogT3BlbgogYWZ0
ZXIgc2VuZCgpOiBPcGVuCiBvbnJlYWR5c3RhdGVjaGFuZ2U6IFNlbnQKLcKgwqBTdGF0dXM6IDIw
MAotwqDCoFN0YXR1c1RleHQ6ICJPSyIKLcKgwqBSZXNwb25zZVRleHQ6ICIiCi3CoMKgUmVzcG9u
c2VYTUw6IG51bGwKLcKgwqBSZXNwb25zZVhNTCBzZXJpYWxpemVkOiBuL2EKKy0gU3RhdHVzOiAy
MDAKKy0gU3RhdHVzVGV4dDogIk9LIgorLSBSZXNwb25zZVRleHQ6ICIiCistIFJlc3BvbnNlWE1M
OiBudWxsCistIFJlc3BvbnNlWE1MIHNlcmlhbGl6ZWQ6IG4vYQogb25yZWFkeXN0YXRlY2hhbmdl
OiBMb2FkZWQKLcKgwqBTdGF0dXM6IDIwMAotwqDCoFN0YXR1c1RleHQ6ICJPSyIKLcKgwqBSZXNw
b25zZVRleHQ6ICIiCi3CoMKgUmVzcG9uc2VYTUw6IG51bGwKLcKgwqBSZXNwb25zZVhNTCBzZXJp
YWxpemVkOiBuL2EKKy0gU3RhdHVzOiAyMDAKKy0gU3RhdHVzVGV4dDogIk9LIgorLSBSZXNwb25z
ZVRleHQ6ICIiCistIFJlc3BvbnNlWE1MOiBudWxsCistIFJlc3BvbnNlWE1MIHNlcmlhbGl6ZWQ6
IG4vYQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC96
ZXJvLWxlbmd0aC1yZXNwb25zZS5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRw
cmVxdWVzdC96ZXJvLWxlbmd0aC1yZXNwb25zZS5odG1sCmluZGV4IGJjY2YzNjUuLmQ3MTk1ZGQg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvemVyby1s
ZW5ndGgtcmVzcG9uc2UuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHBy
ZXF1ZXN0L3plcm8tbGVuZ3RoLXJlc3BvbnNlLmh0bWwKQEAgLTg0LDExICs4NCwxMSBAQAogICAg
IAogICAgIGZ1bmN0aW9uIGR1bXBSZXNwb25zZSgpIHsKIAotICAgICAgIHRyeSB7IGxvZyAoIsKg
wqBTdGF0dXM6ICIgKyByZXEuc3RhdHVzKTsgfSBjYXRjaCAoZXgpIHsgbG9nKCLCoMKgRXhjZXB0
aW9uIGdldHRpbmcgc3RhdHVzOiAiICsgZXgubWVzc2FnZSk7IH0KLSAgICAgICB0cnkgeyBsb2cg
KCLCoMKgU3RhdHVzVGV4dDogIiArIHByZXR0eVByaW50VGV4dChyZXEuc3RhdHVzVGV4dCkpOyB9
IGNhdGNoIChleCkgeyBsb2coIsKgwqBFeGNlcHRpb24gZ2V0dGluZyBTdGF0dXNUZXh0OiAiICsg
ZXgubWVzc2FnZSk7IH0KLSAgICAgICB0cnkgeyBsb2cgKCLCoMKgUmVzcG9uc2VUZXh0OiAiICsg
cHJldHR5UHJpbnRUZXh0KHJlcS5yZXNwb25zZVRleHQpKTsgfSBjYXRjaCAoZXgpIHsgbG9nKCLC
oMKgRXhjZXB0aW9uIGdldHRpbmcgUmVzcG9uc2VUZXh0OiAiICsgZXgubWVzc2FnZSk7IH0KLSAg
ICAgICB0cnkgeyBsb2cgKCLCoMKgUmVzcG9uc2VYTUw6ICIgKyByZXEucmVzcG9uc2VYTUwpOyB9
IGNhdGNoIChleCkgeyBsb2coIsKgwqBFeGNlcHRpb24gZ2V0dGluZyBSZXNwb25zZVhNTDogIiAr
IGV4Lm1lc3NhZ2UpOyB9Ci0gICAgICAgdHJ5IHsgbG9nICgiwqDCoFJlc3BvbnNlWE1MIHNlcmlh
bGl6ZWQ6ICIgKyAocmVxLnJlc3BvbnNlWE1MID8gcHJldHR5UHJpbnRUZXh0KHdpbmRvdy5YTUxT
ZXJpYWxpemVyID8gKG5ldyBYTUxTZXJpYWxpemVyKCkpLnNlcmlhbGl6ZVRvU3RyaW5nKHJlcS5y
ZXNwb25zZVhNTCkgOiByZXEucmVzcG9uc2VYTUwueG1sKSA6ICJuL2EiKSk7IH0gY2F0Y2ggKGV4
KSB7IGxvZygiwqDCoEV4Y2VwdGlvbiBzZXJpYWxpemluZyBSZXNwb25zZVhNTDogIiArIGV4Lm1l
c3NhZ2UpOyB9CisgICAgICAgdHJ5IHsgbG9nICgiLSBTdGF0dXM6ICIgKyByZXEuc3RhdHVzKTsg
fSBjYXRjaCAoZXgpIHsgbG9nKCLCoMKgRXhjZXB0aW9uIGdldHRpbmcgc3RhdHVzOiAiICsgZXgu
bWVzc2FnZSk7IH0KKyAgICAgICB0cnkgeyBsb2cgKCItIFN0YXR1c1RleHQ6ICIgKyBwcmV0dHlQ
cmludFRleHQocmVxLnN0YXR1c1RleHQpKTsgfSBjYXRjaCAoZXgpIHsgbG9nKCLCoMKgRXhjZXB0
aW9uIGdldHRpbmcgU3RhdHVzVGV4dDogIiArIGV4Lm1lc3NhZ2UpOyB9CisgICAgICAgdHJ5IHsg
bG9nICgiLSBSZXNwb25zZVRleHQ6ICIgKyBwcmV0dHlQcmludFRleHQocmVxLnJlc3BvbnNlVGV4
dCkpOyB9IGNhdGNoIChleCkgeyBsb2coIsKgwqBFeGNlcHRpb24gZ2V0dGluZyBSZXNwb25zZVRl
eHQ6ICIgKyBleC5tZXNzYWdlKTsgfQorICAgICAgIHRyeSB7IGxvZyAoIi0gUmVzcG9uc2VYTUw6
ICIgKyByZXEucmVzcG9uc2VYTUwpOyB9IGNhdGNoIChleCkgeyBsb2coIsKgwqBFeGNlcHRpb24g
Z2V0dGluZyBSZXNwb25zZVhNTDogIiArIGV4Lm1lc3NhZ2UpOyB9CisgICAgICAgdHJ5IHsgbG9n
ICgiLSBSZXNwb25zZVhNTCBzZXJpYWxpemVkOiAiICsgKHJlcS5yZXNwb25zZVhNTCA/IHByZXR0
eVByaW50VGV4dCh3aW5kb3cuWE1MU2VyaWFsaXplciA/IChuZXcgWE1MU2VyaWFsaXplcigpKS5z
ZXJpYWxpemVUb1N0cmluZyhyZXEucmVzcG9uc2VYTUwpIDogcmVxLnJlc3BvbnNlWE1MLnhtbCkg
OiAibi9hIikpOyB9IGNhdGNoIChleCkgeyBsb2coIsKgwqBFeGNlcHRpb24gc2VyaWFsaXppbmcg
UmVzcG9uc2VYTUw6ICIgKyBleC5tZXNzYWdlKTsgfQogICAgIH0KIAogICAgIGZ1bmN0aW9uIHBy
b2Nlc3NTdGF0ZUNoYW5nZSgpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlNGQyMjYyLi5mM2ZmOWNjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTEtMDItMDkgIEphcnJlZCBOaWNob2xscyAgPGph
cnJlZEBzZW5jaGEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFhIUiBpbmNvbnNpc3RlbnQgaW4gaGFuZGxpbmcgYWNjZXNzIHRvIHJlc3BvbnNl
IGF0dHJpYnV0ZXMgYWZ0ZXIgYW4gZXJyb3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTU0MTYyCisKKyAgICAgICAgTWFrZSBXZWJLaXQgY29uc2lzdGVu
dCBhY3Jvc3MgdGhlIGJvYXJkIGluIGhhbmRsaW5nIFhIUiByZXNwb25zZQorICAgICAgICBhdHRy
aWJ1dGVzL2dldHRlcnMgYnkgYmVpbmcgVzNDIGNvbXBsaWFudC4gQ29ycmVjdCB2YWx1ZXMgd2ls
bCBiZQorICAgICAgICByZXR1cm5lZCBiYXNlZCBvbiB0aGUgc3RhdGUgYW5kL29yIGVycm9yIHN0
YXR1cyB0aGUgWEhSIG9iamVjdCBpcyBpbi4KKyAgICAgICAgU2VlIGh0dHA6Ly9kZXYudzMub3Jn
LzIwMDYvd2ViYXBpL1hNTEh0dHBSZXF1ZXN0LTIvLgorCisgICAgICAgICogYmluZGluZ3MvanMv
SlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1hNTEh0dHBS
ZXF1ZXN0OjpyZXNwb25zZSk6CisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZVRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlWE1MKToKKyAgICAgICAgKFdlYkNvcmU6
OlhNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZUJsb2IpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0
cFJlcXVlc3Q6OnJlc3BvbnNlQXJyYXlCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0
cFJlcXVlc3Q6OmdldEFsbFJlc3BvbnNlSGVhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpYTUxI
dHRwUmVxdWVzdDo6Z2V0UmVzcG9uc2VIZWFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0
cFJlcXVlc3Q6OnN0YXR1cyk6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6c3Rh
dHVzVGV4dCk6CisKIDIwMTEtMDItMDkgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBs
ZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAKaW5k
ZXggMWQ2ZjFjYi4uMjU5MjUzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAKQEAgLTE4NSw3ICsxODUsNyBAQCBKU1Zh
bHVlIEpTWE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKICAg
ICAgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBibG9iKTsKICAgICAg
ICAgfQogI2Vsc2UKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIHJldHVy
biBqc051bGwoKTsKICNlbmRpZgogCiAgICAgY2FzZSBYTUxIdHRwUmVxdWVzdDo6UmVzcG9uc2VU
eXBlQXJyYXlCdWZmZXI6CkBAIC0yMDAsMTEgKzIwMCwxMSBAQCBKU1ZhbHVlIEpTWE1MSHR0cFJl
cXVlc3Q6OnJlc3BvbnNlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKICAgICAgICAgICAgIHJldHVy
biB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBhcnJheUJ1ZmZlcik7CiAgICAgICAgIH0KICNl
bHNlCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICByZXR1cm4ganNOdWxs
KCk7CiAjZW5kaWYKICAgICB9CiAKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICByZXR1
cm4ganNOdWxsKCk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNYTUxIdHRw
UmVxdWVzdENvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1hNTEh0dHBSZXF1ZXN0KEV4ZWNTdGF0ZSog
ZXhlYykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCmluZGV4IGE1NDhlYmMuLjNj
NmJjMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcApAQCAtMyw2ICszLDcg
QEAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNyBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEB3
ZWJraXQub3JnPgogICogIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBKdWxpZW4gQ2hhZmZyYWl4
IDxqY2hhZmZyYWl4QHdlYmtpdC5vcmc+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA4IERhdmlkIExl
dmluIDxsZXZpbkBjaHJvbWl1bS5vcmc+CisgKiAgQ29weXJpZ2h0IChDKSAyMDExIFNlbmNoYSwg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjI5LDYg
KzIzMCwxMCBAQCBTdHJpbmcgWE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlVGV4dChFeGNlcHRpb25D
b2RlJiBlYykKICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAgcmV0dXJu
ICIiOwogICAgIH0KKworICAgIGlmIChtX3N0YXRlIDwgTE9BRElORyB8fCBtX2Vycm9yKQorICAg
ICAgICByZXR1cm4gIiI7CisKICAgICByZXR1cm4gbV9yZXNwb25zZUJ1aWxkZXIudG9TdHJpbmdQ
cmVzZXJ2ZUNhcGFjaXR5KCk7CiB9CiAKQEAgLTIzOSw3ICsyNDQsNyBAQCBEb2N1bWVudCogWE1M
SHR0cFJlcXVlc3Q6OnJlc3BvbnNlWE1MKEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICByZXR1
cm4gMDsKICAgICB9CiAKLSAgICBpZiAobV9zdGF0ZSAhPSBET05FKQorICAgIGlmIChtX3N0YXRl
ICE9IERPTkUgfHwgbV9lcnJvcikKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpZiAoIW1fY3Jl
YXRlZERvY3VtZW50KSB7CkBAIC0yNjcsNiArMjcyLDEwIEBAIEJsb2IqIFhNTEh0dHBSZXF1ZXN0
OjpyZXNwb25zZUJsb2IoRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiAgICAgICAgIGVjID0gSU5W
QUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KKworICAgIGlmIChtX3N0
YXRlICE9IERPTkUgfHwgbV9lcnJvcikKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICByZXR1cm4g
bV9yZXNwb25zZUJsb2IuZ2V0KCk7CiB9CiAjZW5kaWYKQEAgLTI3NCwxMiArMjgzLDEyIEBAIEJs
b2IqIFhNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZUJsb2IoRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0
CiAjaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoQkxPQikKIEFycmF5QnVmZmVyKiBYTUxIdHRw
UmVxdWVzdDo6cmVzcG9uc2VBcnJheUJ1ZmZlcihFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBp
ZiAobV9yZXNwb25zZVR5cGVDb2RlICE9IFJlc3BvbnNlVHlwZUFycmF5QnVmZmVyKSB7CisgICAg
aWYgKHJlc3BvbnNlVHlwZUNvZGUoKSAhPSBSZXNwb25zZVR5cGVBcnJheUJ1ZmZlcikgewogICAg
ICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAK
LSAgICBpZiAobV9zdGF0ZSAhPSBET05FKQorICAgIGlmIChtX3N0YXRlICE9IERPTkUgfHwgbV9l
cnJvcikKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpZiAoIW1fcmVzcG9uc2VBcnJheUJ1ZmZl
ci5nZXQoKSAmJiBtX2JpbmFyeVJlc3BvbnNlQnVpbGRlci5nZXQoKSAmJiBtX2JpbmFyeVJlc3Bv
bnNlQnVpbGRlci0+c2l6ZSgpID4gMCkgewpAQCAtODYyLDggKzg3MSw5IEBAIFN0cmluZyBYTUxI
dHRwUmVxdWVzdDo6Z2V0UmVxdWVzdEhlYWRlcihjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNv
bnN0CiAKIFN0cmluZyBYTUxIdHRwUmVxdWVzdDo6Z2V0QWxsUmVzcG9uc2VIZWFkZXJzKEV4Y2Vw
dGlvbkNvZGUmIGVjKSBjb25zdAogewotICAgIGlmIChtX3N0YXRlIDwgSEVBREVSU19SRUNFSVZF
RCkgewotICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOworICAgIGlmIChtX3N0YXRlIDwg
SEVBREVSU19SRUNFSVZFRCB8fCBtX2Vycm9yKSB7CisgICAgICAgIC8vIFJldHVybiBlbXB0eSBz
dHJpbmcgaW5zdGVhZCBvZiBhIG51bGwgU3RyaW5nKCksIG90aGVyd2lzZSB3ZSdkIGJlCisgICAg
ICAgIC8vIHJldHVybmluZyBKUyB1bmRlZmluZWQgcGVyIHRoZSBJREwgYmluZGluZy4KICAgICAg
ICAgcmV0dXJuICIiOwogICAgIH0KIApAQCAtODk2LDggKzkwNiw3IEBAIFN0cmluZyBYTUxIdHRw
UmVxdWVzdDo6Z2V0QWxsUmVzcG9uc2VIZWFkZXJzKEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAog
CiBTdHJpbmcgWE1MSHR0cFJlcXVlc3Q6OmdldFJlc3BvbnNlSGVhZGVyKGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiB7Ci0gICAgaWYgKG1fc3RhdGUg
PCBIRUFERVJTX1JFQ0VJVkVEKSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7Cisg
ICAgaWYgKG1fc3RhdGUgPCBIRUFERVJTX1JFQ0VJVkVEIHx8IG1fZXJyb3IpIHsKICAgICAgICAg
cmV0dXJuIFN0cmluZygpOwogICAgIH0KIApAQCAtOTM2LDEzICs5NDUsOSBAQCBib29sIFhNTEh0
dHBSZXF1ZXN0OjpyZXNwb25zZUlzWE1MKCkgY29uc3QKIAogaW50IFhNTEh0dHBSZXF1ZXN0Ojpz
dGF0dXMoRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiB7Ci0gICAgaWYgKG1fcmVzcG9uc2UuaHR0
cFN0YXR1c0NvZGUoKSkKLSAgICAgICAgcmV0dXJuIG1fcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUo
KTsKLQotICAgIGlmIChtX3N0YXRlID09IE9QRU5FRCkgewotICAgICAgICAvLyBGaXJlZm94IG9u
bHkgcmFpc2VzIGFuIGV4Y2VwdGlvbiBpbiB0aGlzIHN0YXRlOyB3ZSBtYXRjaCBpdC4KLSAgICAg
ICAgLy8gTm90ZSB0aGUgY2FzZSBvZiBsb2NhbCBmaWxlIHJlcXVlc3RzLCB3aGVyZSB3ZSBoYXZl
IG5vIEhUVFAgcmVzcG9uc2UgY29kZSEgRmlyZWZveCBuZXZlciByYWlzZXMgYW4gZXhjZXB0aW9u
IGZvciB0aG9zZSwgYnV0IHdlIG1hdGNoIEhUVFAgY2FzZSBmb3IgY29uc2lzdGVuY3kuCi0gICAg
ICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgaWYgKG1fc3RhdGUgPj0gSEVBREVSU19S
RUNFSVZFRCAmJiAhbV9lcnJvcikgeworICAgICAgICBpZiAobV9yZXNwb25zZS5odHRwU3RhdHVz
Q29kZSgpKQorICAgICAgICAgICAgcmV0dXJuIG1fcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKTsK
ICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTk1MCwxNSArOTU1LDEzIEBAIGludCBYTUxIdHRw
UmVxdWVzdDo6c3RhdHVzKEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogCiBTdHJpbmcgWE1MSHR0
cFJlcXVlc3Q6OnN0YXR1c1RleHQoRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiB7Ci0gICAgaWYg
KCFtX3Jlc3BvbnNlLmh0dHBTdGF0dXNUZXh0KCkuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBt
X3Jlc3BvbnNlLmh0dHBTdGF0dXNUZXh0KCk7Ci0KLSAgICBpZiAobV9zdGF0ZSA9PSBPUEVORUQp
IHsKLSAgICAgICAgLy8gU2VlIGNvbW1lbnRzIGluIHN0YXR1cygpIGFib3ZlLgotICAgICAgICBl
YyA9IElOVkFMSURfU1RBVEVfRVJSOworICAgIGlmIChtX3N0YXRlID49IEhFQURFUlNfUkVDRUlW
RUQgJiYgIW1fZXJyb3IpIHsKKyAgICAgICAgaWYgKCFtX3Jlc3BvbnNlLmh0dHBTdGF0dXNUZXh0
KCkuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gbV9yZXNwb25zZS5odHRwU3RhdHVzVGV4
dCgpOwogICAgIH0KIAotICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAvLyBSZXR1cm4gZW1wdHkg
c3RyaW5nLCBub3QgYSBudWxsIFN0cmluZygpCisgICAgcmV0dXJuICIiOwogfQogCiB2b2lkIFhN
TEh0dHBSZXF1ZXN0OjpkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQo=
</data>
<flag name="review"
          id="73546"
          type_id="1"
          status="-"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>