<?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>26510</bug_id>
          
          <creation_ts>2009-06-18 03:02:30 -0700</creation_ts>
          <short_desc>Add tests for authentication behavior with cross-origin XMLHttpRequest</short_desc>
          <delta_ts>2009-06-18 13:00:12 -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>Tools / Tests</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>126686</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-06-18 03:02:30 -0700</bug_when>
    <thetext>We need to test how withCredentials attribute affects XMLHttpRequest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126708</commentid>
    <comment_count>1</comment_count>
      <attachid>31499</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-06-18 09:38:25 -0700</bug_when>
    <thetext>Created attachment 31499
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126728</commentid>
    <comment_count>2</comment_count>
      <attachid>31499</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2009-06-18 10:31:03 -0700</bug_when>
    <thetext>Comment on attachment 31499
proposed patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126736</commentid>
    <comment_count>3</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-06-18 11:08:33 -0700</bug_when>
    <thetext>It looks like mjs gave an r+ while i was looking at this so I&apos;ll just send along my comments as an fyi.

&gt; Index: LayoutTests/http/tests/xmlhttprequest/cross-origin-authorization-expected.txt
&gt; ===================================================================
&gt; +Start
&gt; +Trying different ways to access a password protected resource from another origin. The UA already has login and password for this protection space.

It would be nice to indicate the expected result here for anyone running it standalone.  Something like &quot;You should see a several PASSes followed by a DONE.&quot;



&gt; Index: LayoutTests/http/tests/xmlhttprequest/cross-origin-authorization.html
&gt; ===================================================================
&gt; +function test()
&gt; +{
&gt; +    log(&quot;Trying different ways to access a password protected resource from another origin. The UA already has login and password for this protection space.\n&quot;)
&gt; +    log(&quot;SCRIPT SRC=&apos;...&apos; Should succeed, since authorization is sent for cross-origin subresource loads.&quot;);
&gt; +    var scriptElement = document.createElement(&quot;script&quot;);
&gt; +    scriptElement.setAttribute(&quot;src&quot;, &quot;http://localhost:8000/xmlhttprequest/resources/cross-origin-authorization.php&quot;);
&gt; +    scriptElement.setAttribute(&quot;onload&quot;, &quot;test_sync_auth_stored()&quot;);
&gt; +    scriptElement.setAttribute(&quot;onerror&quot;, &quot;test_sync_auth_stored()&quot;);

Why does it run the function for onload or onerror?


&gt; +    document.body.appendChild(scriptElement);
&gt; +}
&gt; +
&gt; +function test_sync_auth_stored()

testSyncAuthStored seems like it is more consistent with function names (even in js).
Same thing for the other functions in here.


&gt; +
&gt; +function test_async_cookies()
&gt; +{
&gt; +    log(&quot;Cross-origin XMLHttpRequest (async), testing cookies.&quot;);
&gt; +
&gt; +    var req = new XMLHttpRequest;
&gt; +    req.open(&quot;GET&quot;, &quot;http://localhost:8000/xmlhttprequest/resources/cross-origin-check-cookies.php&quot;, true);
&gt; +    req.withCredentials = true;
&gt; +    req.send();
&gt; +    req.onload = function() {
&gt; +	    log(req.responseText.match(/WK\-cross\-origin/) ? &quot;PASS&quot; : &quot;FAIL&quot;);

There is a TAB here.


&gt; Index: LayoutTests/http/tests/xmlhttprequest/cross-origin-no-authorization.html
&gt; +function test_async_cookies()
&gt; +{
&gt; +    log(&quot;Cross-origin XMLHttpRequest (async), testing cookies.&quot;);
&gt; +
&gt; +    var req = new XMLHttpRequest;
&gt; +    req.open(&quot;GET&quot;, &quot;http://localhost:8000/xmlhttprequest/resources/cross-origin-check-cookies.php&quot;, true);
&gt; +    req.send();
&gt; +    req.onload = function() {
&gt; +	    log(req.responseText.match(/WK\-cross\-origin/) ? &quot;FAIL&quot; : &quot;PASS&quot;);
There is a TAB here.


&gt; Index: LayoutTests/http/tests/xmlhttprequest/resources/cross-origin-authorization.php
&gt; ===================================================================
&gt; +&lt;?php
&gt; +header(&quot;Set-Cookie: WK-cross-origin=1&quot;);

It seems like it would be nice to only set the cookie after the authorization was checked (after &quot;if (!isset($_SERVER[&apos;PHP_AUTH_USER&apos;]))&quot;).


&gt; +if (!isset($_SERVER[&apos;PHP_AUTH_USER&apos;])) {
Why not check the actual user name and password to verify that they were sent correctly?


&gt; Index: LayoutTests/http/tests/xmlhttprequest/resources/cross-origin-check-cookies.php
&gt; ===================================================================
&gt; +if (isset($_COOKIE[&apos;WK-cross-origin&apos;])) {
&gt; +    echo &apos;WK-cross-origin: &apos; . $_COOKIE[&apos;WK-cross-origin&apos;];
&gt; +} else {
&gt; +	echo &apos;Cross-origin cookie was not sent.&apos;;
TAB.


&gt; Index: LayoutTests/http/tests/xmlhttprequest/resources/cross-origin-no-authorization.php
&gt; ===================================================================

Same comments as above for the similar code.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126756</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-06-18 13:00:12 -0700</bug_when>
    <thetext>Committed revision 44816.

Note that Firefox fails some of the tests - it doesn&apos;t send cookies even when withCredentials is true, and raises an exception when trying to specify cross-site credentials explicitly (which we silently ignore).

(In reply to comment #3)
&gt; It would be nice to indicate the expected result here for anyone running it
&gt; standalone.  Something like &quot;You should see a several PASSes followed by a
&gt; DONE.&quot;

Done.

&gt; Why does it run the function for onload or onerror?

It&apos;s going to the next test regardless of whether the current one passed.

&gt; testSyncAuthStored seems like it is more consistent with function names (even
&gt; in js).
&gt; Same thing for the other functions in here.

I like to be inconsistent in tests - what if someone accidentally modifies JS parser in a way that it no longer supports underscores?

&gt; It seems like it would be nice to only set the cookie after the authorization
&gt; was checked (after &quot;if (!isset($_SERVER[&apos;PHP_AUTH_USER&apos;]))&quot;).

I&apos;m not sure. The current code kind sends a signal that the cookie may be set before you expect it to - and that&apos;s the case because several tests set it anyway.

&gt; &gt; +if (!isset($_SERVER[&apos;PHP_AUTH_USER&apos;])) {
&gt; Why not check the actual user name and password to verify that they were sent
&gt; correctly?

There are several user names used in the tests.

Thank you for your comments!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31499</attachid>
            <date>2009-06-18 09:38:25 -0700</date>
            <delta_ts>2009-06-18 10:31:03 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>ManageSessionCredentialsTests.txt</filename>
            <type>text/plain</type>
            <size>20764</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDQ0ODA1KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMDktMDYtMTggIEFsZXhleSBQcm9za3VyeWFr
b3YgIDxhcEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjUx
MAorICAgICAgICBBZGQgdGVzdHMgZm9yIGF1dGhlbnRpY2F0aW9uIGJlaGF2aW9yIHdpdGggY3Jv
c3Mtb3JpZ2luIFhNTEh0dHBSZXF1ZXN0CisKKyAgICAgICAgKiBodHRwL3Rlc3RzL3htbGh0dHBy
ZXF1ZXN0L2Nyb3NzLW9yaWdpbi1hdXRob3JpemF0aW9uLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9jcm9zcy1vcmlnaW4tYXV0aG9yaXph
dGlvbi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L2Ny
b3NzLW9yaWdpbi1uby1hdXRob3JpemF0aW9uLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9jcm9zcy1vcmlnaW4tbm8tYXV0aG9yaXphdGlv
bi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3Jlc291
cmNlcy9jcm9zcy1vcmlnaW4tYXV0aG9yaXphdGlvbi5waHA6IEFkZGVkLgorICAgICAgICAqIGh0
dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL2Nyb3NzLW9yaWdpbi1jaGVjay1jb29r
aWVzLnBocDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9yZXNv
dXJjZXMvY3Jvc3Mtb3JpZ2luLW5vLWF1dGhvcml6YXRpb24ucGhwOiBBZGRlZC4KKyAgICAgICAg
KiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9jcm9zcy1vcmlnaW4tcHJlc2V0
LWF1dGhvcml6YXRpb24tZnJhbWUuaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFj
LXRpZ2VyL1NraXBwZWQ6CisKIDIwMDktMDYtMTggIENocmlzIEV2YW5zICA8c2NhcnliZWFzdHNA
Z21haWwuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCkluZGV4OiBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L2Nyb3NzLW9yaWdpbi1hdXRob3JpemF0
aW9uLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3ht
bGh0dHByZXF1ZXN0L2Nyb3NzLW9yaWdpbi1hdXRob3JpemF0aW9uLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvY3Jvc3Mt
b3JpZ2luLWF1dGhvcml6YXRpb24tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDE5IEBACitTdGFydAorVHJ5aW5nIGRpZmZlcmVudCB3YXlzIHRvIGFjY2VzcyBhIHBhc3N3b3Jk
IHByb3RlY3RlZCByZXNvdXJjZSBmcm9tIGFub3RoZXIgb3JpZ2luLiBUaGUgVUEgYWxyZWFkeSBo
YXMgbG9naW4gYW5kIHBhc3N3b3JkIGZvciB0aGlzIHByb3RlY3Rpb24gc3BhY2UuCisKK1NDUklQ
VCBTUkM9Jy4uLicgU2hvdWxkIHN1Y2NlZWQsIHNpbmNlIGF1dGhvcml6YXRpb24gaXMgc2VudCBm
b3IgY3Jvc3Mtb3JpZ2luIHN1YnJlc291cmNlIGxvYWRzLgorUEFTUzogTG9hZGVkLCB1c2VyIHRl
c3QKK0Nyb3NzLW9yaWdpbiBYTUxIdHRwUmVxdWVzdCAoc3luYyksIHRlc3Rpbmcgc3RvcmVkIGF1
dGhvcml6YXRpb24uCitQQVNTCitDcm9zcy1vcmlnaW4gWE1MSHR0cFJlcXVlc3QgKHN5bmMpLCB0
ZXN0aW5nIGNvb2tpZXMuCitQQVNTCitDcm9zcy1vcmlnaW4gWE1MSHR0cFJlcXVlc3QgKGFzeW5j
KSwgdGVzdGluZyBzdG9yZWQgYXV0aG9yaXphdGlvbi4KK1BBU1MKK0Nyb3NzLW9yaWdpbiBYTUxI
dHRwUmVxdWVzdCAoYXN5bmMpLCB0ZXN0aW5nIGNvb2tpZXMuCitQQVNTCitDcm9zcy1vcmlnaW4g
WE1MSHR0cFJlcXVlc3QgKHN5bmMpLCB0ZXN0aW5nIGF1dGhvcml6YXRpb24gd2l0aCBleHBsaWNp
dGx5IHByb3ZpZGVkIGNyZWRlbnRpYWxzIHRoYXQgc2hvdWxkIGJlIGlnbm9yZWQuCitQQVNTCitD
cm9zcy1vcmlnaW4gWE1MSHR0cFJlcXVlc3QgKGFzeW5jKSwgdGVzdGluZyBhdXRob3JpemF0aW9u
IHdpdGggZXhwbGljaXRseSBwcm92aWRlZCBjcmVkZW50aWFscyB0aGF0IHNob3VsZCBiZSBpZ25v
cmVkLgorUEFTUworRE9ORQorCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3htbGh0dHByZXF1ZXN0L2Nyb3NzLW9yaWdpbi1hdXRob3JpemF0aW9uLWV4cGVjdGVk
LnR4dApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCk5hbWU6IHN2bjptaW1lLXR5cGUKICAgKyB0ZXh0L3BsYWluCk5hbWU6
IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3htbGh0dHByZXF1ZXN0L2Nyb3NzLW9yaWdpbi1hdXRob3JpemF0aW9uLmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9jcm9zcy1vcmlnaW4t
YXV0aG9yaXphdGlvbi5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy94bWxodHRwcmVxdWVzdC9jcm9zcy1vcmlnaW4tYXV0aG9yaXphdGlvbi5odG1sCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDEzMyBAQAorPGJ1dHRvbiBvbmNsaWNrPSJwcmVzZXRBdXRob3JpemF0
aW9uKCkiPlN0YXJ0PC9idXR0b24+Cis8cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KKzxzY3JpcHQ+
CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERv
bmUoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRDYW5PcGVuV2luZG93cygpOworfQor
CitmdW5jdGlvbiBsb2cobWVzc2FnZSkKK3sKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
Y29uc29sZScpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1lc3NhZ2UgKyAn
XG4nKSk7Cit9CisKK2Z1bmN0aW9uIHByZXNldEF1dGhvcml6YXRpb24oKQoreworCXdpbmRvdy5h
ZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgdGVzdCwgZmFsc2UpOworCXdpbmRvdy5vcGVuKCJo
dHRwOi8vbG9jYWxob3N0OjgwMDAveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL2Nyb3NzLW9yaWdp
bi1wcmVzZXQtYXV0aG9yaXphdGlvbi1mcmFtZS5odG1sIik7Cit9CisKK2Z1bmN0aW9uIHRlc3Qo
KQoreworICAgIGxvZygiVHJ5aW5nIGRpZmZlcmVudCB3YXlzIHRvIGFjY2VzcyBhIHBhc3N3b3Jk
IHByb3RlY3RlZCByZXNvdXJjZSBmcm9tIGFub3RoZXIgb3JpZ2luLiBUaGUgVUEgYWxyZWFkeSBo
YXMgbG9naW4gYW5kIHBhc3N3b3JkIGZvciB0aGlzIHByb3RlY3Rpb24gc3BhY2UuXG4iKQorICAg
IGxvZygiU0NSSVBUIFNSQz0nLi4uJyBTaG91bGQgc3VjY2VlZCwgc2luY2UgYXV0aG9yaXphdGlv
biBpcyBzZW50IGZvciBjcm9zcy1vcmlnaW4gc3VicmVzb3VyY2UgbG9hZHMuIik7CisgICAgdmFy
IHNjcmlwdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTsKKyAgICBz
Y3JpcHRFbGVtZW50LnNldEF0dHJpYnV0ZSgic3JjIiwgImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC94
bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvY3Jvc3Mtb3JpZ2luLWF1dGhvcml6YXRpb24ucGhwIik7
CisgICAgc2NyaXB0RWxlbWVudC5zZXRBdHRyaWJ1dGUoIm9ubG9hZCIsICJ0ZXN0X3N5bmNfYXV0
aF9zdG9yZWQoKSIpOworICAgIHNjcmlwdEVsZW1lbnQuc2V0QXR0cmlidXRlKCJvbmVycm9yIiwg
InRlc3Rfc3luY19hdXRoX3N0b3JlZCgpIik7CisgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGls
ZChzY3JpcHRFbGVtZW50KTsKK30KKworZnVuY3Rpb24gdGVzdF9zeW5jX2F1dGhfc3RvcmVkKCkK
K3sKKyAgICBsb2coIkNyb3NzLW9yaWdpbiBYTUxIdHRwUmVxdWVzdCAoc3luYyksIHRlc3Rpbmcg
c3RvcmVkIGF1dGhvcml6YXRpb24uIik7CisgICAgCisgICAgdmFyIHJlcSA9IG5ldyBYTUxIdHRw
UmVxdWVzdDsKKyAgICByZXEub3BlbigiR0VUIiwgImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC94bWxo
dHRwcmVxdWVzdC9yZXNvdXJjZXMvY3Jvc3Mtb3JpZ2luLWF1dGhvcml6YXRpb24ucGhwIiwgZmFs
c2UpOworICAgIHJlcS53aXRoQ3JlZGVudGlhbHMgPSB0cnVlOworICAgIHRyeSB7CisgICAgICAg
IHJlcS5zZW5kKCk7CisgICAgICAgIGxvZygocmVxLnN0YXR1cyA9PSA0MDEpID8gIkZBSUw6IDQw
MSBBdXRob3JpemF0aW9uIHJlcXVpcmVkIiA6ICJQQVNTIik7CisgICAgfSBjYXRjaCAoZXgpIHsK
KyAgICAgICAgbG9nKCJGQUlMOiBHb3QgYW4gZXhjZXB0aW9uLiAiICsgZXgpOworICAgIH0KKyAg
ICB0ZXN0X3N5bmNfY29va2llcygpOworfQorCitmdW5jdGlvbiB0ZXN0X3N5bmNfY29va2llcygp
Cit7CisgICAgbG9nKCJDcm9zcy1vcmlnaW4gWE1MSHR0cFJlcXVlc3QgKHN5bmMpLCB0ZXN0aW5n
IGNvb2tpZXMuIik7CisgICAgCisgICAgdmFyIHJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdDsKKyAg
ICByZXEub3BlbigiR0VUIiwgImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC94bWxodHRwcmVxdWVzdC9y
ZXNvdXJjZXMvY3Jvc3Mtb3JpZ2luLWNoZWNrLWNvb2tpZXMucGhwIiwgZmFsc2UpOworICAgIHJl
cS53aXRoQ3JlZGVudGlhbHMgPSB0cnVlOworICAgIHJlcS5zZW5kKCk7CisgICAgbG9nKHJlcS5y
ZXNwb25zZVRleHQubWF0Y2goL1dLXC1jcm9zc1wtb3JpZ2luLykgPyAiUEFTUyIgOiAiRkFJTCIp
OworICAgIHRlc3RfYXN5bmNfYXV0aF9zdG9yZWQoKTsKK30KKworZnVuY3Rpb24gdGVzdF9hc3lu
Y19hdXRoX3N0b3JlZCgpCit7CisgICAgbG9nKCJDcm9zcy1vcmlnaW4gWE1MSHR0cFJlcXVlc3Qg
KGFzeW5jKSwgdGVzdGluZyBzdG9yZWQgYXV0aG9yaXphdGlvbi4iKTsKKworICAgIHZhciByZXEg
PSBuZXcgWE1MSHR0cFJlcXVlc3Q7CisgICAgcmVxLm9wZW4oIkdFVCIsICJodHRwOi8vbG9jYWxo
b3N0OjgwMDAveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL2Nyb3NzLW9yaWdpbi1hdXRob3JpemF0
aW9uLnBocCIsIHRydWUpOworICAgIHJlcS53aXRoQ3JlZGVudGlhbHMgPSB0cnVlOworICAgIHJl
cS5zZW5kKCk7CisgICAgcmVxLm9ubG9hZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICBsb2coKHJl
cS5zdGF0dXMgPT0gNDAxKSA/ICJGQUlMOiA0MDEgQXV0aG9yaXphdGlvbiByZXF1aXJlZCIgOiAi
UEFTUyIpOworICAgICAgICB0ZXN0X2FzeW5jX2Nvb2tpZXMoKTsKKyAgICB9CisgICAgcmVxLm9u
ZXJyb3IgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgbG9nKCJGQUlMOiBSZWNlaXZlZCBlcnJvciBl
dmVudC4iKTsKKyAgICAgICAgdGVzdF9hc3luY19jb29raWVzKCk7CisgICAgfQorfQorCitmdW5j
dGlvbiB0ZXN0X2FzeW5jX2Nvb2tpZXMoKQoreworICAgIGxvZygiQ3Jvc3Mtb3JpZ2luIFhNTEh0
dHBSZXF1ZXN0IChhc3luYyksIHRlc3RpbmcgY29va2llcy4iKTsKKworICAgIHZhciByZXEgPSBu
ZXcgWE1MSHR0cFJlcXVlc3Q7CisgICAgcmVxLm9wZW4oIkdFVCIsICJodHRwOi8vbG9jYWxob3N0
OjgwMDAveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL2Nyb3NzLW9yaWdpbi1jaGVjay1jb29raWVz
LnBocCIsIHRydWUpOworICAgIHJlcS53aXRoQ3JlZGVudGlhbHMgPSB0cnVlOworICAgIHJlcS5z
ZW5kKCk7CisgICAgcmVxLm9ubG9hZCA9IGZ1bmN0aW9uKCkgeworCSAgICBsb2cocmVxLnJlc3Bv
bnNlVGV4dC5tYXRjaCgvV0tcLWNyb3NzXC1vcmlnaW4vKSA/ICJQQVNTIiA6ICJGQUlMIik7Cisg
ICAgICAgIHRlc3Rfc3luY19hdXRoX2V4cGxpY2l0KCk7CisgICAgfQorfQorCitmdW5jdGlvbiB0
ZXN0X3N5bmNfYXV0aF9leHBsaWNpdCgpCit7CisgICAgbG9nKCJDcm9zcy1vcmlnaW4gWE1MSHR0
cFJlcXVlc3QgKHN5bmMpLCB0ZXN0aW5nIGF1dGhvcml6YXRpb24gd2l0aCBleHBsaWNpdGx5IHBy
b3ZpZGVkIGNyZWRlbnRpYWxzIHRoYXQgc2hvdWxkIGJlIGlnbm9yZWQuIik7CisgICAgCisgICAg
dmFyIHJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdDsKKyAgICByZXEub3BlbigiR0VUIiwgImh0dHA6
Ly9sb2NhbGhvc3Q6ODAwMC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvY3Jvc3Mtb3JpZ2luLWF1
dGhvcml6YXRpb24ucGhwIiwgZmFsc2UsICJ0ZXN0MiIsICJ0ZXN0MiIpOworICAgIHJlcS53aXRo
Q3JlZGVudGlhbHMgPSB0cnVlOworICAgIHRyeSB7CisgICAgICAgIHJlcS5zZW5kKCk7CisgICAg
ICAgIGxvZyhyZXEucmVzcG9uc2VUZXh0Lm1hdGNoKC90ZXN0Mi8pID8gIkZBSUw6IEV4cGxpY2l0
IGNyZWRlbnRpYWxzIHdlcmUgbm90IGlnbm9yZWQiIDogIlBBU1MiKTsKKyAgICB9IGNhdGNoIChl
eCkgeworICAgICAgICBsb2coIkZBSUw6IEdvdCBhbiBleGNlcHRpb24uICIgKyBleCk7CisgICAg
fQorICAgIHRlc3RfYXN5bmNfYXV0aF9leHBsaWNpdCgpOworfQorCisKK2Z1bmN0aW9uIHRlc3Rf
YXN5bmNfYXV0aF9leHBsaWNpdCgpCit7CisgICAgbG9nKCJDcm9zcy1vcmlnaW4gWE1MSHR0cFJl
cXVlc3QgKGFzeW5jKSwgdGVzdGluZyBhdXRob3JpemF0aW9uIHdpdGggZXhwbGljaXRseSBwcm92
aWRlZCBjcmVkZW50aWFscyB0aGF0IHNob3VsZCBiZSBpZ25vcmVkLiIpOworCisgICAgdmFyIHJl
cSA9IG5ldyBYTUxIdHRwUmVxdWVzdDsKKyAgICByZXEub3BlbigiR0VUIiwgImh0dHA6Ly9sb2Nh
bGhvc3Q6ODAwMC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvY3Jvc3Mtb3JpZ2luLWF1dGhvcml6
YXRpb24ucGhwIiwgdHJ1ZSwgInRlc3QyIiwgInRlc3QyIik7CisgICAgcmVxLndpdGhDcmVkZW50
aWFscyA9IHRydWU7CisgICAgcmVxLnNlbmQoKTsKKyAgICByZXEub25sb2FkID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIGxvZyhyZXEucmVzcG9uc2VUZXh0Lm1hdGNoKC90ZXN0Mi8pID8gIkZBSUw6
IEV4cGxpY2l0IGNyZWRlbnRpYWxzIHdlcmUgbm90IGlnbm9yZWQiIDogIlBBU1MiKTsKKyAgICAg
ICAgbG9nKCJET05FIik7CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
CisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgfQor
ICAgIHJlcS5vbmVycm9yID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGxvZygiRkFJTDogUmVjZWl2
ZWQgZXJyb3IgZXZlbnQuIik7CisgICAgICAgIGxvZygiRE9ORSIpOworICAgICAgICBpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIubm90aWZ5RG9uZSgpOworICAgIH0KK30KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikKKwlwcmVzZXRBdXRob3JpemF0aW9uKCk7Cis8L3NjcmlwdD4KClByb3BlcnR5IGNoYW5n
ZXMgb246IExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvY3Jvc3Mtb3JpZ2lu
LWF1dGhvcml6YXRpb24uaHRtbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjptaW1lLXR5cGUKICAgKyB0
ZXh0L2h0bWwKCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L2Ny
b3NzLW9yaWdpbi1uby1hdXRob3JpemF0aW9uLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L2Nyb3NzLW9yaWdpbi1uby1hdXRo
b3JpemF0aW9uLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAv
dGVzdHMveG1saHR0cHJlcXVlc3QvY3Jvc3Mtb3JpZ2luLW5vLWF1dGhvcml6YXRpb24tZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIzIEBACitTdGFydAorVHJ5aW5nIGRpZmZl
cmVudCB3YXlzIHRvIGFjY2VzcyBhIHBhc3N3b3JkIHByb3RlY3RlZCByZXNvdXJjZSBmcm9tIGFu
b3RoZXIgb3JpZ2luLiBUaGUgVUEgYWxyZWFkeSBoYXMgbG9naW4gYW5kIHBhc3N3b3JkIGZvciB0
aGlzIHByb3RlY3Rpb24gc3BhY2UuCisKK1NDUklQVCBTUkM9Jy4uLicgU2hvdWxkIHN1Y2NlZWQs
IHNpbmNlIGF1dGhvcml6YXRpb24gaXMgc2VudCBmb3IgY3Jvc3Mtb3JpZ2luIHN1YnJlc291cmNl
IGxvYWRzLgorUEFTUzogTG9hZGVkLCB1c2VyIHRlc3QKK0Nyb3NzLW9yaWdpbiBYTUxIdHRwUmVx
dWVzdCAoc3luYyksIGF1dGhvcml6YXRpb24gd2lsbCBub3QgYmUgc2VudCwgYmVjYXVzZSB3aXRo
Q3JlZGVudGlhbHMgaXMgZmFsc2UuCitQQVNTOiA0MDEgQXV0aG9yaXphdGlvbiByZXF1aXJlZAor
Q3Jvc3Mtb3JpZ2luIFhNTEh0dHBSZXF1ZXN0IChzeW5jKSwgdGVzdGluZyBhdXRob3JpemF0aW9u
IHRoYXQncyBub3QgYWxsb3dlZCBieSB0aGUgc2VydmVyICh3aXRoQ3JlZGVudGlhbHMgaXMgdHJ1
ZSwgYnV0IGFjY2VzcyBjb250cm9sIGhlYWRlcnMgYXJlIG5vdCBzZXQpLgorUEFTUzogR290IGFu
IGV4Y2VwdGlvbi4gRXJyb3I6IE5FVFdPUktfRVJSOiBYTUxIdHRwUmVxdWVzdCBFeGNlcHRpb24g
MTAxCitDcm9zcy1vcmlnaW4gWE1MSHR0cFJlcXVlc3QgKHN5bmMpLCB0ZXN0aW5nIGNvb2tpZXMu
CitQQVNTCitDcm9zcy1vcmlnaW4gWE1MSHR0cFJlcXVlc3QgKGFzeW5jKSwgYXV0aG9yaXphdGlv
biB3aWxsIG5vdCBiZSBzZW50LCBiZWNhdXNlIHdpdGhDcmVkZW50aWFscyBpcyBmYWxzZS4KK1BB
U1M6IFJlY2VpdmVkIGVycm9yIGV2ZW50LgorQ3Jvc3Mtb3JpZ2luIFhNTEh0dHBSZXF1ZXN0IChh
c3luYyksIHRlc3RpbmcgYXV0aG9yaXphdGlvbiB0aGF0J3Mgbm90IGFsbG93ZWQgYnkgdGhlIHNl
cnZlciAod2l0aENyZWRlbnRpYWxzIGlzIHRydWUsIGJ1dCBhY2Nlc3MgY29udHJvbCBoZWFkZXJz
IGFyZSBub3Qgc2V0KS4KK1BBU1M6IFJlY2VpdmVkIGVycm9yIGV2ZW50LgorQ3Jvc3Mtb3JpZ2lu
IFhNTEh0dHBSZXF1ZXN0IChhc3luYyksIHRlc3RpbmcgY29va2llcy4KK1BBU1MKK0Nyb3NzLW9y
aWdpbiBYTUxIdHRwUmVxdWVzdCAoc3luYyksIHRlc3RpbmcgYXV0aG9yaXphdGlvbiB3aXRoIGV4
cGxpY2l0bHkgcHJvdmlkZWQgY3JlZGVudGlhbHMgdGhhdCBzaG91bGQgYmUgaWdub3JlZC4KK1BB
U1M6IDQwMSBBdXRob3JpemF0aW9uIHJlcXVpcmVkCitDcm9zcy1vcmlnaW4gWE1MSHR0cFJlcXVl
c3QgKGFzeW5jKSwgdGVzdGluZyBhdXRob3JpemF0aW9uIHdpdGggZXhwbGljaXRseSBwcm92aWRl
ZCBjcmVkZW50aWFscyB0aGF0IHNob3VsZCBiZSBpZ25vcmVkLgorUEFTUzogUmVjZWl2ZWQgZXJy
b3IgZXZlbnQuCitET05FCisKClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2h0dHAv
dGVzdHMveG1saHR0cHJlcXVlc3QvY3Jvc3Mtb3JpZ2luLW5vLWF1dGhvcml6YXRpb24tZXhwZWN0
ZWQudHh0Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOm1pbWUtdHlwZQogICArIHRleHQvcGxhaW4KTmFt
ZTogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVz
dHMveG1saHR0cHJlcXVlc3QvY3Jvc3Mtb3JpZ2luLW5vLWF1dGhvcml6YXRpb24uaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L2Nyb3NzLW9y
aWdpbi1uby1hdXRob3JpemF0aW9uLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L2Nyb3NzLW9yaWdpbi1uby1hdXRob3JpemF0aW9uLmh0
bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTYwIEBACis8YnV0dG9uIG9uY2xpY2s9InByZXNl
dEF1dGhvcml6YXRpb24oKSI+U3RhcnQ8L2J1dHRvbj4KKzxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJl
PgorPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
d2FpdFVudGlsRG9uZSgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLnNldENhbk9wZW5XaW5k
b3dzKCk7Cit9CisKK2Z1bmN0aW9uIGxvZyhtZXNzYWdlKQoreworICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdjb25zb2xlJykuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUo
bWVzc2FnZSArICdcbicpKTsKK30KKworZnVuY3Rpb24gcHJlc2V0QXV0aG9yaXphdGlvbigpCit7
CisJd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCB0ZXN0LCBmYWxzZSk7CisJd2lu
ZG93Lm9wZW4oImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMv
Y3Jvc3Mtb3JpZ2luLXByZXNldC1hdXRob3JpemF0aW9uLWZyYW1lLmh0bWwiKTsKK30KKworZnVu
Y3Rpb24gdGVzdCgpCit7CisgICAgbG9nKCJUcnlpbmcgZGlmZmVyZW50IHdheXMgdG8gYWNjZXNz
IGEgcGFzc3dvcmQgcHJvdGVjdGVkIHJlc291cmNlIGZyb20gYW5vdGhlciBvcmlnaW4uIFRoZSBV
QSBhbHJlYWR5IGhhcyBsb2dpbiBhbmQgcGFzc3dvcmQgZm9yIHRoaXMgcHJvdGVjdGlvbiBzcGFj
ZS5cbiIpCisgICAgbG9nKCJTQ1JJUFQgU1JDPScuLi4nIFNob3VsZCBzdWNjZWVkLCBzaW5jZSBh
dXRob3JpemF0aW9uIGlzIHNlbnQgZm9yIGNyb3NzLW9yaWdpbiBzdWJyZXNvdXJjZSBsb2Fkcy4i
KTsKKyAgICB2YXIgc2NyaXB0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlw
dCIpOworICAgIHNjcmlwdEVsZW1lbnQuc2V0QXR0cmlidXRlKCJzcmMiLCAiaHR0cDovL2xvY2Fs
aG9zdDo4MDAwL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9jcm9zcy1vcmlnaW4tbm8tYXV0aG9y
aXphdGlvbi5waHAiKTsKKyAgICBzY3JpcHRFbGVtZW50LnNldEF0dHJpYnV0ZSgib25sb2FkIiwg
InRlc3Rfc3luY19hdXRoX3N0b3JlZCgpIik7CisgICAgc2NyaXB0RWxlbWVudC5zZXRBdHRyaWJ1
dGUoIm9uZXJyb3IiLCAidGVzdF9zeW5jX2F1dGhfc3RvcmVkKCkiKTsKKyAgICBkb2N1bWVudC5i
b2R5LmFwcGVuZENoaWxkKHNjcmlwdEVsZW1lbnQpOworfQorCitmdW5jdGlvbiB0ZXN0X3N5bmNf
YXV0aF9zdG9yZWQoKQoreworICAgIGxvZygiQ3Jvc3Mtb3JpZ2luIFhNTEh0dHBSZXF1ZXN0IChz
eW5jKSwgYXV0aG9yaXphdGlvbiB3aWxsIG5vdCBiZSBzZW50LCBiZWNhdXNlIHdpdGhDcmVkZW50
aWFscyBpcyBmYWxzZS4iKTsKKyAgICAKKyAgICB2YXIgcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0
OworICAgIHJlcS5vcGVuKCJHRVQiLCAiaHR0cDovL2xvY2FsaG9zdDo4MDAwL3htbGh0dHByZXF1
ZXN0L3Jlc291cmNlcy9jcm9zcy1vcmlnaW4tbm8tYXV0aG9yaXphdGlvbi5waHAiLCBmYWxzZSk7
CisgICAgdHJ5IHsKKyAgICAgICAgcmVxLnNlbmQoKTsKKyAgICAgICAgbG9nKChyZXEuc3RhdHVz
ID09IDQwMSkgPyAiUEFTUzogNDAxIEF1dGhvcml6YXRpb24gcmVxdWlyZWQiIDogIkZBSUw6IExv
YWRlZCIpOworICAgIH0gY2F0Y2ggKGV4KSB7CisgICAgICAgIGxvZygiUEFTUzogR290IGFuIGV4
Y2VwdGlvbi4gIiArIGV4KTsKKyAgICB9CisgICAgdGVzdF9zeW5jX2F1dGhfc3RvcmVkX3dpdGhf
Y3JlZGVudGlhbHMoKTsKK30KKworZnVuY3Rpb24gdGVzdF9zeW5jX2F1dGhfc3RvcmVkX3dpdGhf
Y3JlZGVudGlhbHMoKQoreworICAgIGxvZygiQ3Jvc3Mtb3JpZ2luIFhNTEh0dHBSZXF1ZXN0IChz
eW5jKSwgdGVzdGluZyBhdXRob3JpemF0aW9uIHRoYXQncyBub3QgYWxsb3dlZCBieSB0aGUgc2Vy
dmVyICh3aXRoQ3JlZGVudGlhbHMgaXMgdHJ1ZSwgYnV0IGFjY2VzcyBjb250cm9sIGhlYWRlcnMg
YXJlIG5vdCBzZXQpLiIpOworICAgIAorICAgIHZhciByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3Q7
CisgICAgcmVxLm9wZW4oIkdFVCIsICJodHRwOi8vbG9jYWxob3N0OjgwMDAveG1saHR0cHJlcXVl
c3QvcmVzb3VyY2VzL2Nyb3NzLW9yaWdpbi1uby1hdXRob3JpemF0aW9uLnBocCIsIGZhbHNlKTsK
KyAgICByZXEud2l0aENyZWRlbnRpYWxzID0gdHJ1ZTsKKyAgICB0cnkgeworICAgICAgICByZXEu
c2VuZCgpOworICAgICAgICBsb2coKHJlcS5zdGF0dXMgPT0gNDAxKSA/ICJQQVNTOiA0MDEgQXV0
aG9yaXphdGlvbiByZXF1aXJlZCIgOiAiRkFJTDogTG9hZGVkIik7CisgICAgfSBjYXRjaCAoZXgp
IHsKKyAgICAgICAgbG9nKCJQQVNTOiBHb3QgYW4gZXhjZXB0aW9uLiAiICsgZXgpOworICAgIH0K
KyAgICB0ZXN0X3N5bmNfY29va2llcygpOworfQorCitmdW5jdGlvbiB0ZXN0X3N5bmNfY29va2ll
cygpCit7CisgICAgbG9nKCJDcm9zcy1vcmlnaW4gWE1MSHR0cFJlcXVlc3QgKHN5bmMpLCB0ZXN0
aW5nIGNvb2tpZXMuIik7CisgICAgCisgICAgdmFyIHJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdDsK
KyAgICByZXEub3BlbigiR0VUIiwgImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC94bWxodHRwcmVxdWVz
dC9yZXNvdXJjZXMvY3Jvc3Mtb3JpZ2luLWNoZWNrLWNvb2tpZXMucGhwIiwgZmFsc2UpOworICAg
IHJlcS5zZW5kKCk7CisgICAgbG9nKHJlcS5yZXNwb25zZVRleHQubWF0Y2goL1dLXC1jcm9zc1wt
b3JpZ2luLykgPyAiRkFJTCIgOiAiUEFTUyIpOworICAgIHRlc3RfYXN5bmNfYXV0aF9zdG9yZWQo
KTsKK30KKworZnVuY3Rpb24gdGVzdF9hc3luY19hdXRoX3N0b3JlZCgpCit7CisgICAgbG9nKCJD
cm9zcy1vcmlnaW4gWE1MSHR0cFJlcXVlc3QgKGFzeW5jKSwgYXV0aG9yaXphdGlvbiB3aWxsIG5v
dCBiZSBzZW50LCBiZWNhdXNlIHdpdGhDcmVkZW50aWFscyBpcyBmYWxzZS4iKTsKKworICAgIHZh
ciByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3Q7CisgICAgcmVxLm9wZW4oIkdFVCIsICJodHRwOi8v
bG9jYWxob3N0OjgwMDAveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL2Nyb3NzLW9yaWdpbi1uby1h
dXRob3JpemF0aW9uLnBocCIsIHRydWUpOworICAgIHJlcS5zZW5kKCk7CisgICAgcmVxLm9ubG9h
ZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICBsb2coKHJlcS5zdGF0dXMgPT0gNDAxKSA/ICJQQVNT
OiA0MDEgQXV0aG9yaXphdGlvbiByZXF1aXJlZCIgOiAiRkFJTDogTG9hZGVkIik7CisgICAgICAg
IHRlc3RfYXN5bmNfYXV0aF9zdG9yZWRfd2l0aF9jcmVkZW50aWFscygpOworICAgIH0KKyAgICBy
ZXEub25lcnJvciA9IGZ1bmN0aW9uKCkgeworICAgICAgICBsb2coIlBBU1M6IFJlY2VpdmVkIGVy
cm9yIGV2ZW50LiIpOworICAgICAgICB0ZXN0X2FzeW5jX2F1dGhfc3RvcmVkX3dpdGhfY3JlZGVu
dGlhbHMoKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3RfYXN5bmNfYXV0aF9zdG9yZWRfd2l0
aF9jcmVkZW50aWFscygpCit7CisgICAgbG9nKCJDcm9zcy1vcmlnaW4gWE1MSHR0cFJlcXVlc3Qg
KGFzeW5jKSwgdGVzdGluZyBhdXRob3JpemF0aW9uIHRoYXQncyBub3QgYWxsb3dlZCBieSB0aGUg
c2VydmVyICh3aXRoQ3JlZGVudGlhbHMgaXMgdHJ1ZSwgYnV0IGFjY2VzcyBjb250cm9sIGhlYWRl
cnMgYXJlIG5vdCBzZXQpLiIpOworCisgICAgdmFyIHJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdDsK
KyAgICByZXEub3BlbigiR0VUIiwgImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC94bWxodHRwcmVxdWVz
dC9yZXNvdXJjZXMvY3Jvc3Mtb3JpZ2luLW5vLWF1dGhvcml6YXRpb24ucGhwIiwgdHJ1ZSk7Cisg
ICAgcmVxLndpdGhDcmVkZW50aWFscyA9IHRydWU7CisgICAgcmVxLnNlbmQoKTsKKyAgICByZXEu
b25sb2FkID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGxvZygocmVxLnN0YXR1cyA9PSA0MDEpID8g
IlBBU1M6IDQwMSBBdXRob3JpemF0aW9uIHJlcXVpcmVkIiA6ICJGQUlMOiBMb2FkZWQiKTsKKyAg
ICAgICAgdGVzdF9hc3luY19jb29raWVzKCk7CisgICAgfQorICAgIHJlcS5vbmVycm9yID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIGxvZygiUEFTUzogUmVjZWl2ZWQgZXJyb3IgZXZlbnQuIik7Cisg
ICAgICAgIHRlc3RfYXN5bmNfY29va2llcygpOworICAgIH0KK30KKworZnVuY3Rpb24gdGVzdF9h
c3luY19jb29raWVzKCkKK3sKKyAgICBsb2coIkNyb3NzLW9yaWdpbiBYTUxIdHRwUmVxdWVzdCAo
YXN5bmMpLCB0ZXN0aW5nIGNvb2tpZXMuIik7CisKKyAgICB2YXIgcmVxID0gbmV3IFhNTEh0dHBS
ZXF1ZXN0OworICAgIHJlcS5vcGVuKCJHRVQiLCAiaHR0cDovL2xvY2FsaG9zdDo4MDAwL3htbGh0
dHByZXF1ZXN0L3Jlc291cmNlcy9jcm9zcy1vcmlnaW4tY2hlY2stY29va2llcy5waHAiLCB0cnVl
KTsKKyAgICByZXEuc2VuZCgpOworICAgIHJlcS5vbmxvYWQgPSBmdW5jdGlvbigpIHsKKwkgICAg
bG9nKHJlcS5yZXNwb25zZVRleHQubWF0Y2goL1dLXC1jcm9zc1wtb3JpZ2luLykgPyAiRkFJTCIg
OiAiUEFTUyIpOworICAgICAgICB0ZXN0X3N5bmNfYXV0aF9leHBsaWNpdCgpOworICAgIH0KK30K
KworZnVuY3Rpb24gdGVzdF9zeW5jX2F1dGhfZXhwbGljaXQoKQoreworICAgIGxvZygiQ3Jvc3Mt
b3JpZ2luIFhNTEh0dHBSZXF1ZXN0IChzeW5jKSwgdGVzdGluZyBhdXRob3JpemF0aW9uIHdpdGgg
ZXhwbGljaXRseSBwcm92aWRlZCBjcmVkZW50aWFscyB0aGF0IHNob3VsZCBiZSBpZ25vcmVkLiIp
OworICAgIAorICAgIHZhciByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3Q7CisgICAgcmVxLm9wZW4o
IkdFVCIsICJodHRwOi8vbG9jYWxob3N0OjgwMDAveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL2Ny
b3NzLW9yaWdpbi1uby1hdXRob3JpemF0aW9uLnBocCIsIGZhbHNlLCAidGVzdCIsICJ0ZXN0Iik7
CisgICAgdHJ5IHsKKyAgICAgICAgcmVxLnNlbmQoKTsKKyAgICAgICAgbG9nKChyZXEuc3RhdHVz
ID09IDQwMSkgPyAiUEFTUzogNDAxIEF1dGhvcml6YXRpb24gcmVxdWlyZWQiIDogIkZBSUw6IExv
YWRlZCIpOworICAgIH0gY2F0Y2ggKGV4KSB7CisgICAgICAgIGxvZygiUEFTUzogR290IGFuIGV4
Y2VwdGlvbi4gIiArIGV4KTsKKyAgICB9CisgICAgdGVzdF9hc3luY19hdXRoX2V4cGxpY2l0KCk7
Cit9CisKKworZnVuY3Rpb24gdGVzdF9hc3luY19hdXRoX2V4cGxpY2l0KCkKK3sKKyAgICBsb2co
IkNyb3NzLW9yaWdpbiBYTUxIdHRwUmVxdWVzdCAoYXN5bmMpLCB0ZXN0aW5nIGF1dGhvcml6YXRp
b24gd2l0aCBleHBsaWNpdGx5IHByb3ZpZGVkIGNyZWRlbnRpYWxzIHRoYXQgc2hvdWxkIGJlIGln
bm9yZWQuIik7CisKKyAgICB2YXIgcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0OworICAgIHJlcS5v
cGVuKCJHRVQiLCAiaHR0cDovL2xvY2FsaG9zdDo4MDAwL3htbGh0dHByZXF1ZXN0L3Jlc291cmNl
cy9jcm9zcy1vcmlnaW4tbm8tYXV0aG9yaXphdGlvbi5waHAiLCB0cnVlLCAidGVzdCIsICJ0ZXN0
Iik7CisgICAgcmVxLnNlbmQoKTsKKyAgICByZXEub25sb2FkID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIGxvZygocmVxLnN0YXR1cyA9PSA0MDEpID8gIlBBU1M6IDQwMSBBdXRob3JpemF0aW9uIHJl
cXVpcmVkIiA6ICJGQUlMOiBMb2FkZWQiKTsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUo
KTsKKyAgICB9CisgICAgcmVxLm9uZXJyb3IgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgbG9nKCJQ
QVNTOiBSZWNlaXZlZCBlcnJvciBldmVudC4iKTsKKyAgICAgICAgbG9nKCJET05FIik7CisgICAg
ICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgfQorfQorCitpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKQorCXByZXNldEF1dGhvcml6YXRpb24oKTsKKzwvc2NyaXB0PgoKUHJv
cGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9j
cm9zcy1vcmlnaW4tbm8tYXV0aG9yaXphdGlvbi5odG1sCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOm1p
bWUtdHlwZQogICArIHRleHQvaHRtbAoKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1s
aHR0cHJlcXVlc3QvcmVzb3VyY2VzL2Nyb3NzLW9yaWdpbi1hdXRob3JpemF0aW9uLnBocAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3Jlc291cmNl
cy9jcm9zcy1vcmlnaW4tYXV0aG9yaXphdGlvbi5waHAJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9jcm9zcy1vcmlnaW4tYXV0
aG9yaXphdGlvbi5waHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUgQEAKKzw/cGhwCitoZWFk
ZXIoIlNldC1Db29raWU6IFdLLWNyb3NzLW9yaWdpbj0xIik7CitoZWFkZXIoIkNhY2hlLUNvbnRy
b2w6IG5vLXN0b3JlIik7CitoZWFkZXIoIkxhc3QtTW9kaWZpZWQ6IFRodSwgMTkgTWFyIDIwMDkg
MTE6MjI6MTEgR01UIik7CitoZWFkZXIoIkFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbjogaHR0
cDovLzEyNy4wLjAuMTo4MDAwIik7CitoZWFkZXIoIkFjY2Vzcy1Db250cm9sLUFsbG93LUNyZWRl
bnRpYWxzOiB0cnVlIik7CisKK2lmICghaXNzZXQoJF9TRVJWRVJbJ1BIUF9BVVRIX1VTRVInXSkp
IHsKKyAgICBoZWFkZXIoJ1dXVy1BdXRoZW50aWNhdGU6IEJhc2ljIHJlYWxtPSJXZWJLaXQgeG1s
aHR0cHJlcXVlc3QvY3Jvc3Mtb3JpZ2luLW5vLWF1dGhvcml6YXRpb24iJyk7CisgICAgaGVhZGVy
KCdIVFRQLzEuMCA0MDEgVW5hdXRob3JpemVkJyk7CisgICAgZWNobyAnQXV0aGVudGljYXRpb24g
Y2FuY2VsZWQnOworICAgIGV4aXQ7Cit9Cis/PgorbG9nKCdQQVNTOiBMb2FkZWQsIHVzZXIgPD9w
aHAgcHJpbnQgJF9TRVJWRVJbJ1BIUF9BVVRIX1VTRVInXSA/PicpOwpJbmRleDogTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvY3Jvc3Mtb3JpZ2luLWNoZWNr
LWNvb2tpZXMucGhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0
cHJlcXVlc3QvcmVzb3VyY2VzL2Nyb3NzLW9yaWdpbi1jaGVjay1jb29raWVzLnBocAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvcmVzb3VyY2Vz
L2Nyb3NzLW9yaWdpbi1jaGVjay1jb29raWVzLnBocAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
MiBAQAorPD9waHAKK2hlYWRlcigiQ2FjaGUtQ29udHJvbDogbm8tc3RvcmUiKTsKK2hlYWRlcigi
TGFzdC1Nb2RpZmllZDogVGh1LCAxOSBNYXIgMjAwOSAxMToyMjoxMSBHTVQiKTsKK2hlYWRlcigi
QWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luOiBodHRwOi8vMTI3LjAuMC4xOjgwMDAiKTsKK2hl
YWRlcigiQWNjZXNzLUNvbnRyb2wtQWxsb3ctQ3JlZGVudGlhbHM6IHRydWUiKTsKKworaWYgKGlz
c2V0KCRfQ09PS0lFWydXSy1jcm9zcy1vcmlnaW4nXSkpIHsKKyAgICBlY2hvICdXSy1jcm9zcy1v
cmlnaW46ICcgLiAkX0NPT0tJRVsnV0stY3Jvc3Mtb3JpZ2luJ107Cit9IGVsc2UgeworCWVjaG8g
J0Nyb3NzLW9yaWdpbiBjb29raWUgd2FzIG5vdCBzZW50Lic7Cit9Cis/PgpJbmRleDogTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvY3Jvc3Mtb3JpZ2luLW5v
LWF1dGhvcml6YXRpb24ucGhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMv
eG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL2Nyb3NzLW9yaWdpbi1uby1hdXRob3JpemF0aW9uLnBo
cAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qv
cmVzb3VyY2VzL2Nyb3NzLW9yaWdpbi1uby1hdXRob3JpemF0aW9uLnBocAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxNCBAQAorPD9waHAKK2hlYWRlcigiU2V0LUNvb2tpZTogV0stY3Jvc3Mtb3Jp
Z2luPTEiKTsKK2hlYWRlcigiQ2FjaGUtQ29udHJvbDogbm8tc3RvcmUiKTsKK2hlYWRlcigiTGFz
dC1Nb2RpZmllZDogVGh1LCAxOSBNYXIgMjAwOSAxMToyMjoxMSBHTVQiKTsKK2hlYWRlcigiQWNj
ZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luOiBodHRwOi8vMTI3LjAuMC4xOjgwMDAiKTsKKworaWYg
KCFpc3NldCgkX1NFUlZFUlsnUEhQX0FVVEhfVVNFUiddKSkgeworICAgIGhlYWRlcignV1dXLUF1
dGhlbnRpY2F0ZTogQmFzaWMgcmVhbG09IldlYktpdCB4bWxodHRwcmVxdWVzdC9jcm9zcy1vcmln
aW4tbm8tYXV0aG9yaXphdGlvbiInKTsKKyAgICBoZWFkZXIoJ0hUVFAvMS4wIDQwMSBVbmF1dGhv
cml6ZWQnKTsKKyAgICBlY2hvICdBdXRoZW50aWNhdGlvbiBjYW5jZWxlZCc7CisgICAgZXhpdDsK
K30KKz8+Citsb2coJ1BBU1M6IExvYWRlZCwgdXNlciA8P3BocCBwcmludCAkX1NFUlZFUlsnUEhQ
X0FVVEhfVVNFUiddID8+Jyk7CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHBy
ZXF1ZXN0L3Jlc291cmNlcy9jcm9zcy1vcmlnaW4tcHJlc2V0LWF1dGhvcml6YXRpb24tZnJhbWUu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0
L3Jlc291cmNlcy9jcm9zcy1vcmlnaW4tcHJlc2V0LWF1dGhvcml6YXRpb24tZnJhbWUuaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvcmVz
b3VyY2VzL2Nyb3NzLW9yaWdpbi1wcmVzZXQtYXV0aG9yaXphdGlvbi1mcmFtZS5odG1sCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDkgQEAKKzxzY3JpcHQ+CisvLyBHb29kIGZvciBib3RoIGNyb3Nz
LW9yaWdpbi1uby1hdXRob3JpemF0aW9uIGFuZCBjcm9zcy1vcmlnaW4tYXV0aG9yaXphdGlvbiwg
d2hpY2ggb25seSBkaWZmZXIgaW4gY3Jvc3Mtb3JpZ2luIGNhc2UuCit2YXIgcmVxID0gbmV3IFhN
TEh0dHBSZXF1ZXN0OworcmVxLm9wZW4oIkdFVCIsICJjcm9zcy1vcmlnaW4tbm8tYXV0aG9yaXph
dGlvbi5waHAiLCBmYWxzZSwgInRlc3QiLCAidGVzdCIpOworcmVxLnNlbmQoKTsKK29wZW5lci5w
b3N0TWVzc2FnZSgidGVzdCIsICIqIik7Cit3aW5kb3cuY2xvc2UoKTsKKzwvc2NyaXB0PgorPHA+
VGhpcyBmcmFtZSBzZXRzIHVwIGF1dGhvcml6YXRpb24gZm9yIGFub3RoZXIgb3JpZ2luLjwvcD4K
ClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVl
c3QvcmVzb3VyY2VzL2Nyb3NzLW9yaWdpbi1wcmVzZXQtYXV0aG9yaXphdGlvbi1mcmFtZS5odG1s
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KTmFtZTogc3ZuOm1pbWUtdHlwZQogICArIHRleHQvaHRtbAoKSW5kZXg6IExh
eW91dFRlc3RzL3BsYXRmb3JtL21hYy10aWdlci9Ta2lwcGVkCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL3BsYXRmb3JtL21hYy10aWdlci9Ta2lwcGVkCShyZXZpc2lvbiA0NDcxMykKKysrIExh
eW91dFRlc3RzL3BsYXRmb3JtL21hYy10aWdlci9Ta2lwcGVkCSh3b3JraW5nIGNvcHkpCkBAIC01
MSwzICs1MSw2IEBAIGh0dHAvdGVzdHMvY29va2llcy9zaW1wbGUtY29va2llcy1tYXgtYWcKICMg
PHJkYXI6Ly9wcm9ibGVtLzU2NjYwNzg+IENvb2tpZSBwYXJzaW5nIHRlcm1pbmF0ZXMgYXQgdGhl
IGZpcnN0IHNlbWljb2xvbiwgaWdub3JpbmcgcXVvdGVzICgxNjY5OSkKICMgVGlnZXIgd291bGQg
bmVlZCBhIG5ldyBDRk5ldHdvcmsgdG8gc3VwcG9ydCBzZXR0aW5nIGNvb2tpZXMgd2l0aCBkb3Vi
bGUtcXVvdGVkIHZhbHVlcyBjb250YWluaW5nIHNlbWktY29sb25zCiBodHRwL3Rlc3RzL2Nvb2tp
ZXMvZG91YmxlLXF1b3RlZC12YWx1ZS13aXRoLXNlbWktY29sb24uaHRtbAorCisjIFRpZ2VyIGRv
ZXMgbm90IHN1cHBvcnQgY29ubmVjdGlvblNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlOiBkZWxl
Z2F0ZSBjYWxsLgoraHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9jcm9zcy1vcmlnaW4tbm8tYXV0
aG9yaXphdGlvbi5odG1sCg==
</data>
<flag name="review"
          id="16147"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>