<?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>64189</bug_id>
          
          <creation_ts>2011-07-08 11:25:52 -0700</creation_ts>
          <short_desc>garden-o-matic should be able to determine which revisions caused a given failure</short_desc>
          <delta_ts>2011-07-11 11:54:18 -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>
          <dependson>64199</dependson>
          <blocked>64188</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>aroben</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>ojan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>434184</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-07-08 11:25:52 -0700</bug_when>
    <thetext>This will help the gardener determine the root cause of a test failure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434221</commentid>
    <comment_count>1</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-07-08 12:15:19 -0700</bug_when>
    <thetext>aroben: To fill you in on a discussion that dglazkov and I had this morning:

1) We think that being able to go back in time (like in TestFailures) and find the root cause of a test failure is important in order to figure out the best way to deal with a failure.

2) Having the tool hosted on a web site is also important so that the gardener can give links to folks.

Both those thoughts push us more towards the TestFailures design point, which means we might want to integrate sooner rather than later.  To access the local server (to preform backend actions), we&apos;re currently thinking about using XMLHttpRequest and CORS.  If you have the local server running, you&apos;ll see the actions and if you don&apos;t have it running, you&apos;ll see the &quot;read only&quot; view.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434228</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-07-08 12:22:53 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; aroben: To fill you in on a discussion that dglazkov and I had this morning:
&gt; 
&gt; 1) We think that being able to go back in time (like in TestFailures) and find the root cause of a test failure is important in order to figure out the best way to deal with a failure.
&gt; 
&gt; 2) Having the tool hosted on a web site is also important so that the gardener can give links to folks.

These both make sense to me.

&gt; Both those thoughts push us more towards the TestFailures design point, which means we might want to integrate sooner rather than later.

OK.

&gt; To access the local server (to preform backend actions), we&apos;re currently thinking about using XMLHttpRequest and CORS.  If you have the local server running, you&apos;ll see the actions and if you don&apos;t have it running, you&apos;ll see the &quot;read only&quot; view.

So TestFailures would send an XHR to your local server? How would that work? I didn&apos;t think the local server was publicly-addressable. Maybe you meant the local server would XHR TestFailures, but then I don&apos;t know what &quot;If you have the local server running, you&apos;ll see the actions&quot; means.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434241</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-07-08 12:34:25 -0700</bug_when>
    <thetext>&gt; So TestFailures would send an XHR to your local server?

Yes.

&gt; How would that work?

Using CORS.

&gt; I didn&apos;t think the local server was publicly-addressable.

It&apos;s not publicly addressable, but it is locally addressable (e.g., http://localhost:8570/blah/blah?efef

If you view the hosted page, it can fire off an XHR to see if the local server is running on your computer, and if so, show the action buttons.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434242</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-07-08 12:39:22 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; I didn&apos;t think the local server was publicly-addressable.
&gt; 
&gt; It&apos;s not publicly addressable, but it is locally addressable (e.g., http://localhost:8570/blah/blah?efef
&gt; 
&gt; If you view the hosted page, it can fire off an XHR to see if the local server is running on your computer, and if so, show the action buttons.

Ah, of course! Client-side FTW!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434362</commentid>
    <comment_count>5</comment_count>
      <attachid>100179</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-07-08 16:06:12 -0700</bug_when>
    <thetext>Created attachment 100179
Work in progres</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434407</commentid>
    <comment_count>6</comment_count>
      <attachid>100188</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-07-08 17:21:24 -0700</bug_when>
    <thetext>Created attachment 100188
Patch, now with tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434438</commentid>
    <comment_count>7</comment_count>
      <attachid>100188</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-07-08 18:40:28 -0700</bug_when>
    <thetext>Comment on attachment 100188
Patch, now with tests

I didn&apos;t realize that this was what you wanted old full_results.json files for. 

Did you consider using results-small.json to find this information? It has all the data in a single request for all the failing tests. You can do everything in two requests. 1. Grab full_results.json to find the list of failing tests at tip of tree. 2. Grab (in parallel) results-small.json to find when each test started failing.

Then you&apos;ll also have a lot more information and be better poised to add heuristics to determine if a test is flaky.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434455</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-07-08 19:26:45 -0700</bug_when>
    <thetext>Yeah, I considered that.  We might end up going that direction in the end.  I didn&apos;t realize when I started the patch how much complexity the asynchronous results fetch would add.

The main cost is becoming more reliant on test-results.appspot.com.  In principles, we could just use buildbot directly, which would remove one moving piece.  I don&apos;t have strong feelings either way.  We might have to experiment now and optimize later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434608</commentid>
    <comment_count>9</comment_count>
      <attachid>100188</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-07-10 12:31:57 -0700</bug_when>
    <thetext>Comment on attachment 100188
Patch, now with tests

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

I don&apos;t really feel like a very good reviewer for this patch.  I think you&apos;d do better with someone who spoke JS better than I do.

&gt; Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:66
&gt; +    return kTestResultsServer + &apos;testfile&apos; +
&gt; +          &apos;?builder=&apos; + builderName +
&gt; +          &apos;&amp;master=&apos; + kMasterName +
&gt; +          &apos;&amp;testtype=&apos; + kTestType +
&gt; +          &apos;&amp;name=&apos; + name;

It&apos;s sad that we don&apos;t have an easy way to build requests from a dictionary/object/map.  I would expect such to exist in jquery.

&gt; Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:76
&gt; +function ResultsCache() {
&gt; +    this.m_cache = {};
&gt; +}

style?

&gt; Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:79
&gt; +ResultsCache.prototype._fetch = function(key, callback) {
&gt; +    var self = this;

More style?  At least your inconsistent with above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434614</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-07-10 12:49:05 -0700</bug_when>
    <thetext>&gt; It&apos;s sad that we don&apos;t have an easy way to build requests from a dictionary/object/map.  I would expect such to exist in jquery.

It does exist in jquery.

&gt; style?

Yeah, I screw up the { placement a lot.  :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435025</commentid>
    <comment_count>11</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-07-11 11:11:03 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; &gt; style?
&gt; 
&gt; Yeah, I screw up the { placement a lot.  :(

I think Eric was referring to using m_ prefixes as opposed to just _</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435043</commentid>
    <comment_count>12</comment_count>
      <attachid>100336</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-07-11 11:36:41 -0700</bug_when>
    <thetext>Created attachment 100336
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435051</commentid>
    <comment_count>13</comment_count>
      <attachid>100188</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-07-11 11:39:55 -0700</bug_when>
    <thetext>Comment on attachment 100188
Patch, now with tests

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

&gt;&gt; Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:66
&gt;&gt; +          &apos;&amp;name=&apos; + name;
&gt; 
&gt; It&apos;s sad that we don&apos;t have an easy way to build requests from a dictionary/object/map.  I would expect such to exist in jquery.

Seems like you at least need to call encodeURIComponent.

&gt; Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:72
&gt; +function directoryOfResultsSummaryURL(builderName, name)
&gt; +{
&gt; +    return resultsSummaryURL(builderName, name) + &apos;&amp;dir=1&apos;;
&gt; +}

What is &quot;name&quot; naming here? Maybe it needs a better name. :-)

&gt;&gt; Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:79
&gt;&gt; +    var self = this;
&gt; 
&gt; More style?  At least your inconsistent with above.

I agree with Eric that it would be good to standardize on m_ vs _

&gt; Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:92
&gt; +        return callback(this.m_cache[key]);

&quot;return voidReturningFunction()&quot; is not a pattern I&apos;ve seen used much in WebKit, even in our JS code.

&gt; Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:176
&gt; +        $.each(keyList, function(index, element) {
&gt; +            self.m_keyList.push(element.key);
&gt; +        });

You could use Array.prototype.map here. Or maybe the jQuery equivalent.

&gt; Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:225
&gt; +                return true;
&gt; +            } else {

No need for &quot;else&quot; after &quot;return&quot;.

&gt; Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:239
&gt; +    var currentNode = resultsTree[&apos;tests&apos;];

Any particular reason why you&apos;re using [&apos;tests&apos;] instead of .tests?

&gt; Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/results_unittests.js:131
&gt; +    while (this.m_pendingCallbacks.length != 0) {

No need for the != 0 here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435057</commentid>
    <comment_count>14</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-07-11 11:46:03 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 100188 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=100188&amp;action=review
&gt; 
&gt; &gt;&gt; Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:66
&gt; &gt;&gt; +          &apos;&amp;name=&apos; + name;
&gt; &gt; 
&gt; &gt; It&apos;s sad that we don&apos;t have an easy way to build requests from a dictionary/object/map.  I would expect such to exist in jquery.
&gt; 
&gt; Seems like you at least need to call encodeURIComponent.

This should be fixed now that I&apos;m making jQuery do the hard work.

&gt; &gt; Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:72
&gt; &gt; +function directoryOfResultsSummaryURL(builderName, name)
&gt; &gt; +{
&gt; &gt; +    return resultsSummaryURL(builderName, name) + &apos;&amp;dir=1&apos;;
&gt; &gt; +}
&gt; 
&gt; What is &quot;name&quot; naming here? Maybe it needs a better name. :-)

Fixed.

&gt; &gt;&gt; Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:79
&gt; &gt;&gt; +    var self = this;
&gt; &gt; 
&gt; &gt; More style?  At least your inconsistent with above.
&gt; 
&gt; I agree with Eric that it would be good to standardize on m_ vs _

Ok.  Done.

&gt; &gt; Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:92
&gt; &gt; +        return callback(this.m_cache[key]);
&gt; 
&gt; &quot;return voidReturningFunction()&quot; is not a pattern I&apos;ve seen used much in WebKit, even in our JS code.

Fixed.

&gt; &gt; Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:176
&gt; &gt; +        $.each(keyList, function(index, element) {
&gt; &gt; +            self.m_keyList.push(element.key);
&gt; &gt; +        });
&gt; 
&gt; You could use Array.prototype.map here. Or maybe the jQuery equivalent.

Done.

&gt; &gt; Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:225
&gt; &gt; +                return true;
&gt; &gt; +            } else {
&gt; 
&gt; No need for &quot;else&quot; after &quot;return&quot;.

Done.

&gt; &gt; Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:239
&gt; &gt; +    var currentNode = resultsTree[&apos;tests&apos;];
&gt; 
&gt; Any particular reason why you&apos;re using [&apos;tests&apos;] instead of .tests?

Mostly a hold-over from python where objects and dictionaries are different.  In my mind resultsTree is a dictionary, not an object, but I&apos;m not sure it matters.

&gt; &gt; Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/results_unittests.js:131
&gt; &gt; +    while (this.m_pendingCallbacks.length != 0) {
&gt; 
&gt; No need for the != 0 here.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435059</commentid>
    <comment_count>15</comment_count>
      <attachid>100337</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-07-11 11:46:34 -0700</bug_when>
    <thetext>Created attachment 100337
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435066</commentid>
    <comment_count>16</comment_count>
      <attachid>100337</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-07-11 11:49:48 -0700</bug_when>
    <thetext>Comment on attachment 100337
Patch

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

&gt; Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:203
&gt; +    ++this._indexOfNextKeyToFetch;

Should use self instead of this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435075</commentid>
    <comment_count>17</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-07-11 11:54:18 -0700</bug_when>
    <thetext>Committed r90771: &lt;http://trac.webkit.org/changeset/90771&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100179</attachid>
            <date>2011-07-08 16:06:12 -0700</date>
            <delta_ts>2011-07-08 17:21:20 -0700</delta_ts>
            <desc>Work in progres</desc>
            <filename>bug-64189-20110708160610.patch</filename>
            <type>text/plain</type>
            <size>6888</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL2RhdGEvZ2FyZGVuaW5n
c2VydmVyL2Jhc2UuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29s
L3NlcnZlcnMvZGF0YS9nYXJkZW5pbmdzZXJ2ZXIvYmFzZS5qcwkocmV2aXNpb24gOTA2NjUpCisr
KyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2VydmVycy9kYXRhL2dhcmRlbmluZ3NlcnZl
ci9iYXNlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC02NCw0ICs2NCwxNSBAQCBiYXNlLnByb2JlID0g
ZnVuY3Rpb24odXJsLCBvcHRpb25zKQogICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2Ny
aXB0RWxlbWVudCk7CiB9OwogCisvLyBqUXVlcnkgbWFrZXMganNvbnAgcmVxdWVzdHMgc29tZXdo
YXQgdWdseSAod2hpY2ggaXMgZmFpciBnaXZlbiB0aGF0IHRoZXkncmUKKy8vIHRlcnJpYmxlIGZv
ciBzZWN1cml0eSkuIFdlIHVzZSB0aGlzIHdyYXBwZXIgdG8gbWFrZSBvdXIgbGl2ZXMgc2xpZ2h0
bHkgZWFzaWVyLgorYmFzZS5qc29ucCA9IGZ1bmN0aW9uKHVybCwgb25zdWNjZXNzKQoreworICAg
ICQuYWpheCh7CisgICAgICAgIHVybDogdXJsLAorICAgICAgICBkYXRhVHlwZTogJ2pzb25wJywK
KyAgICAgICAgc3VjY2Vzczogb25zdWNjZXNzCisgICAgfSk7Cit9OworCiB9KSgpOwpJbmRleDog
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMvZGF0YS9nYXJkZW5pbmdzZXJ2ZXIv
cmVzdWx0cy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2Vy
dmVycy9kYXRhL2dhcmRlbmluZ3NlcnZlci9yZXN1bHRzLmpzCShyZXZpc2lvbiA5MDY2NSkKKysr
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL2RhdGEvZ2FyZGVuaW5nc2VydmVy
L3Jlc3VsdHMuanMJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDQyIEBAIGZ1bmN0aW9uIGlz
U3VjY2VzcyhyZXN1bHQpCiAgICAgcmV0dXJuIHJlc3VsdCA9PT0gUEFTUzsKIH0KIAorZnVuY3Rp
b24gcmVzdWx0c1N1bW1hcnlVUkwoYnVpbGRlck5hbWUsIG5hbWUpCit7CisgICAgcmV0dXJuIGtU
ZXN0UmVzdWx0c1NlcnZlciArICd0ZXN0ZmlsZScgKworICAgICAgICAgICc/YnVpbGRlcj0nICsg
YnVpbGRlck5hbWUgKworICAgICAgICAgICcmbWFzdGVyPScgKyBrTWFzdGVyTmFtZSArCisgICAg
ICAgICAgJyZ0ZXN0dHlwZT0nICsga1Rlc3RUeXBlICsKKyAgICAgICAgICAnJm5hbWU9JyArIG5h
bWU7Cit9CisKK2Z1bmN0aW9uIGRpcmVjdG9yeU9mUmVzdWx0c1N1bW1hcnlVUkwoYnVpbGRlck5h
bWUsIG5hbWUpCit7CisgICAgcmV0dXJuIHJlc3VsdHNTdW1tYXJ5VVJMKGJ1aWxkZXJOYW1lLCBu
YW1lKSArICcmZGlyPTEnOworfQorCitmdW5jdGlvbiBSZXN1bHRzQ2FjaGUoKSB7CisgICAgdGhp
cy5tX2NhY2hlID0ge307Cit9CisKK1Jlc3VsdHNDYWNoZS5wcm90b3R5cGUuX2ZldGNoID0gZnVu
Y3Rpb24oa2V5LCBjYWxsYmFjaykgeworICAgIHZhciB1cmwgPSBrVGVzdFJlc3VsdHNTZXJ2ZXIg
KyAndGVzdGZpbGU/a2V5PScgKyBrZXk7CisgICAgYmFzZS5qc29ucCh1cmwsIGZ1bmN0aW9uIChy
ZXN1bHRzVHJlZSkgeworICAgICAgICB0aGlzLm1fY2FjaGVba2V5XSA9IHJlc3VsdHNUcmVlOwor
ICAgICAgICBjYWxsYmFjayhyZXN1bHRzVHJlZSk7CisgICAgfSk7Cit9OworCisvLyBXYXJuaW5n
ISBUaGlzIGZ1bmN0aW9uIGNhbiBjYWxsIGNhbGxiYWNrIGVpdGhlciBzeW5jaHJvbm91c2x5IG9y
IGFzeW5jaHJvbm91c2x5LgorLy8gRklYTUU6IENvbnNpZGVyIHVzaW5nIHNldFRpbWVvdXQgdG8g
bWFrZSB0aGlzIG1ldGhvZCBhbHdheXMgYXN5bmNocm9ub3VzLgorUmVzdWx0c0NhY2hlLnByb3Rv
dHlwZS5nZXQgPSBmdW5jdGlvbihrZXksIGNhbGxiYWNrKSB7CisgICAgaWYgKGtleSBpbiB0aGlz
Lm1fY2FjaGUpCisgICAgICAgIHJldHVybiBjYWxsYmFjayh0aGlzLm1fY2FjaGVba2V5XSk7Cisg
ICAgdGhpcy5fZmV0Y2goa2V5LCBjYWxsYmFjayk7Cit9OworCit2YXIgZ19yZXN1bHRzQ2FjaGUg
PSBuZXcgUmVzdWx0c0NhY2hlKCk7CisKIGZ1bmN0aW9uIGFueUlzRmFpbHVyZShyZXN1bHRzTGlz
dCkKIHsKICAgICByZXR1cm4gJC5ncmVwKHJlc3VsdHNMaXN0LCBpc0ZhaWx1cmUpLmxlbmd0aCA+
IDA7CkBAIC0xMTAsMTYgKzE0Niw5NyBAQCByZXN1bHRzLnVuZXhwZWN0ZWRGYWlsdXJlc0J5VGVz
dCA9IGZ1bmN0CiB7CiAgICAgdmFyIHVuZXhwZWN0ZWRGYWlsdXJlcyA9IHt9OwogCi0gICAgJC5l
YWNoKHJlc3VsdHNCeUJ1aWxkZXIsIGZ1bmN0aW9uKGJ1aWxkTmFtZSwgYnVpbGRlclJlc3VsdHMp
IHsKKyAgICAkLmVhY2gocmVzdWx0c0J5QnVpbGRlciwgZnVuY3Rpb24oYnVpbGRlck5hbWUsIGJ1
aWxkZXJSZXN1bHRzKSB7CiAgICAgICAgICQuZWFjaChidWlsZGVyUmVzdWx0cy51bmV4cGVjdGVk
RmFpbHVyZXMoKSwgZnVuY3Rpb24odGVzdE5hbWUsIHJlc3VsdE5vZGUpIHsKICAgICAgICAgICAg
IHVuZXhwZWN0ZWRGYWlsdXJlc1t0ZXN0TmFtZV0gPSB1bmV4cGVjdGVkRmFpbHVyZXNbdGVzdE5h
bWVdIHx8IHt9OwotICAgICAgICAgICAgdW5leHBlY3RlZEZhaWx1cmVzW3Rlc3ROYW1lXVtidWls
ZE5hbWVdID0gcmVzdWx0Tm9kZTsKKyAgICAgICAgICAgIHVuZXhwZWN0ZWRGYWlsdXJlc1t0ZXN0
TmFtZV1bYnVpbGRlck5hbWVdID0gcmVzdWx0Tm9kZTsKICAgICAgICAgfSk7CiAgICAgfSk7CiAK
ICAgICByZXR1cm4gdW5leHBlY3RlZEZhaWx1cmVzOwogfTsKIAorZnVuY3Rpb24gVGVzdEhpc3Rv
cnlXYWxrZXIoYnVpbGRlck5hbWUsIHRlc3ROYW1lKQoreworICAgIHRoaXMubV9idWlsZGVyTmFt
ZSA9IGJ1aWxkZXJOYW1lOworICAgIHRoaXMubV90ZXN0TmFtZSA9IHRlc3ROYW1lOworICAgIHRo
aXMubV9pbmRleE9mTmV4dEtleVRvRmV0Y2ggPSAwOworICAgIHRoaXMubV9rZXlMaXN0ID0gW107
Cit9CisKK1Rlc3RIaXN0b3J5V2Fsa2VyLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24oY2FsbGJh
Y2spCit7CisgICAgYmFzZS5qc29ucChkaXJlY3RvcnlPZlJlc3VsdHNTdW1tYXJ5VVJMKHRoaXMu
bV9idWlsZGVyTmFtZSwga1Jlc3VsdHNOYW1lKSwgZnVuY3Rpb24oa2V5TGlzdCkgeworICAgICAg
ICAkLmVhY2goa2V5TGlzdCwgZnVuY3Rpb24oaW5kZXgsIGVsZW1lbnQpIHsKKyAgICAgICAgICAg
IHRoaXMubV9rZXlMaXN0LnB1c2goZWxlbWVudC5rZXkpOworICAgICAgICB9KTsKKyAgICAgICAg
Y2FsbGJhY2soKTsKKyAgICB9KTsKK307CisKK1Rlc3RIaXN0b3J5V2Fsa2VyLnByb3RvdHlwZS5f
ZmV0Y2hOZXh0UmVzdWx0Tm9kZSA9IGZ1bmN0aW9uKGNhbGxiYWNrKQoreworICAgIGlmICh0aGlz
Lm1faW5kZXhPZk5leHRLZXlUb0ZldGNoID49IHRoaXMubV9rZXlMaXN0KSB7CisgICAgICAgIGNh
bGxiYWNrKDAsIG51bGwpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdmFyIHNlbGYg
PSB0aGlzOworICAgIHZhciBrZXkgPSB0aGlzLm1fa2V5TGlzdFt0aGlzLm1faW5kZXhPZk5leHRL
ZXlUb0ZldGNoXTsKKyAgICArK3RoaXMubV9pbmRleE9mTmV4dEtleVRvRmV0Y2g7CisgICAgZ19y
ZXN1bHRzQ2FjaGUuZ2V0KGtleSwgZnVuY3Rpb24ocmVzdWx0c1RyZWUpIHsKKyAgICAgICAgdmFy
IHJlc3VsdE5vZGUgPSByZXN1bHRzLnJlc3VsdE5vZGVGb3JUZXN0KHJlc3VsdHNUcmVlLCBzZWxm
Lm1fdGVzdE5hbWUpOworICAgICAgICBjYWxsYmFjayhyZXN1bHRzVHJlZVsncmV2aXNpb24nXSwg
cmVzdWx0Tm9kZSk7CisgICAgfSk7Cit9OworCitUZXN0SGlzdG9yeVdhbGtlci5wcm90b3R5cGUu
d2Fsa0hpc3RvcnkgPSBmdW5jdGlvbihjYWxsYmFjaykKK3sKKyAgICB2YXIgc2VsZiA9IHRoaXM7
CisgICAgc2VsZi5fZmV0Y2hOZXh0UmVzdWx0Tm9kZShmdW5jdGlvbihyZXZpc2lvbiwgcmVzdWx0
Tm9kZSkgeworICAgICAgICB2YXIgc2hvdWxkQ29udGludWUgPSBjYWxsYmFjayhyZXZpc2lvbiwg
cmVzdWx0Tm9kZSk7CisgICAgICAgIGlmICghc2hvdWxkQ29udGludWUpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIHNlbGYud2Fsa0hpc3RvcnkoY2FsbGJhY2spOworICAgIH0pOworfQor
CityZXN1bHRzLnJlZ3Jlc3Npb25SYW5nZUZvckZhaWx1cmUgPSBmdW5jdGlvbihidWlsZGVyTmFt
ZSwgdGVzdE5hbWUsIGNhbGxiYWNrKQoreworICAgIHZhciBvbGRlc3RGYWlsaW5nUmV2aXNpb24g
PSAwOworCisgICAgdmFyIGhpc3RvcnlXYWxrZXIgPSBuZXcgVGVzdEhpc3RvcnlXYWxrZXIoYnVp
bGRlck5hbWUsIHRlc3ROYW1lKTsKKyAgICBoaXN0b3J5V2Fsa2VyLndhbGtIaXN0b3J5KGZ1bmN0
aW9uKHJldmlzaW9uLCByZXN1bHROb2RlKSB7CisgICAgICAgIGlmICghcmVzdWx0Tm9kZSkgewor
ICAgICAgICAgICAgLy8gV2UndmUgd2Fsa2VkIG9mZiB0aGUgZW5kIG9mIG91ciBoaXN0b3J5Lgor
ICAgICAgICAgICAgY2FsbGJhY2soMCwgMCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGlzVW5leHBlY3RlZEZhaWx1cmUocmVzdWx0Tm9kZSkpIHsK
KyAgICAgICAgICAgIG9sZGVzdEZhaWxpbmdSZXZpc2lvbiA9IHJldmlzaW9uOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoIW9sZGVz
dEZhaWxpbmdSZXZpc2lvbikKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgIC8vIFdlIG5l
ZWQgdG8ga2VlcCBsb29raW5nIGZvciBhIGZhaWxpbmcgcmV2aXNpb24uCisgICAgICAgICAgICB2
YXIgbmV3ZXN0UGFzc2luZ1JldmlzaW9uID0gcmV2aXNpb247CisgICAgICAgICAgICBjYWxsYmFj
ayhvbGRlc3RGYWlsaW5nUmV2aXNpb24sIG5ld2VzdFBhc3NpbmdSZXZpc2lvbik7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9KTsKK307CisKK3Jlc3VsdHMucmVz
dWx0Tm9kZUZvclRlc3QgPSBmdW5jdGlvbihyZXN1bHRzVHJlZSwgdGVzdE5hbWUpCit7CisgICAg
dmFyIHRlc3ROYW1lUGF0aCA9IHRlc3ROYW1lLnNwbGl0KCcvJyk7CisgICAgdmFyIGN1cnJlbnRO
b2RlID0gcmVzdWx0c1RyZWVbJ3Rlc3RzJ107CisgICAgJC5lYWNoKHRlc3ROYW1lUGF0aCwgZnVu
Y3Rpb24oaW5kZXgsIHNlZ21lbnROYW1lKSB7CisgICAgICAgIGlmICghKHNlZ21lbnROYW1lIGlu
IGN1cnJlbnROb2RlKSkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICBjdXJyZW50
Tm9kZSA9IGN1cnJlbnROb2RlW3NlZ21lbnROYW1lXTsKKyAgICB9KTsKKyAgICByZXR1cm4gY3Vy
cmVudE5vZGU7Cit9OworCiBmdW5jdGlvbiByZXN1bHRzRGlyZWN0b3J5Rm9yQnVpbGRlcihidWls
ZGVyTmFtZSkKIHsKICAgICByZXR1cm4gYnVpbGRlck5hbWUucmVwbGFjZSgvWyAuKCldL2csICdf
Jyk7CkBAIC0xODksMjMgKzMwNiwxMCBAQCByZXN1bHRzLmZldGNoUmVzdWx0c1VSTHMgPSBmdW5j
dGlvbihidWlsCiAgICAgfSk7CiB9OwogCi1mdW5jdGlvbiByZXN1bHRzU3VtbWFyeVVSTChidWls
ZGVyTmFtZSwgbmFtZSkKLXsKLSAgICByZXR1cm4ga1Rlc3RSZXN1bHRzU2VydmVyICsgJ3Rlc3Rm
aWxlJyArCi0gICAgICAgICAgJz9idWlsZGVyPScgKyBidWlsZGVyTmFtZSArCi0gICAgICAgICAg
JyZtYXN0ZXI9JyArIGtNYXN0ZXJOYW1lICsKLSAgICAgICAgICAnJnRlc3R0eXBlPScgKyBrVGVz
dFR5cGUgKwotICAgICAgICAgICcmbmFtZT0nICsgbmFtZTsKLX0KLQogcmVzdWx0cy5mZXRjaFJl
c3VsdHNGb3JCdWlsZGVyID0gZnVuY3Rpb24oYnVpbGRlck5hbWUsIG9uc3VjY2VzcykKIHsKLSAg
ICAkLmFqYXgoewotICAgICAgICB1cmw6IHJlc3VsdHNTdW1tYXJ5VVJMKGJ1aWxkZXJOYW1lLCBr
UmVzdWx0c05hbWUpLAotICAgICAgICBkYXRhVHlwZTogJ2pzb25wJywKLSAgICAgICAgc3VjY2Vz
czogZnVuY3Rpb24oZGF0YSkgewotICAgICAgICAgICAgb25zdWNjZXNzKG5ldyByZXN1bHRzLkJ1
aWxkZXJSZXN1bHRzKGRhdGEpKTsKLSAgICAgICAgfQorICAgIGJhc2UuanNvbnAocmVzdWx0c1N1
bW1hcnlVUkwoYnVpbGRlck5hbWUsIGtSZXN1bHRzTmFtZSksIGZ1bmN0aW9uKHJlc3VsdHNUcmVl
KSB7CisgICAgICAgIG9uc3VjY2VzcyhuZXcgcmVzdWx0cy5CdWlsZGVyUmVzdWx0cyhyZXN1bHRz
VHJlZSkpOwogICAgIH0pOwogfTsKIApAQCAtMjE0LDggKzMxOCw4IEBAIHJlc3VsdHMuZmV0Y2hS
ZXN1bHRzQnlCdWlsZGVyID0gZnVuY3Rpb24KICAgICB2YXIgcmVzdWx0c0J5QnVpbGRlciA9IHt9
CiAgICAgdmFyIHJlcXVlc3RzSW5GbGlnaHQgPSBidWlsZGVyTmFtZUxpc3QubGVuZ3RoOwogICAg
ICQuZWFjaChidWlsZGVyTmFtZUxpc3QsIGZ1bmN0aW9uKGluZGV4LCBidWlsZGVyTmFtZSkgewot
ICAgICAgICByZXN1bHRzLmZldGNoUmVzdWx0c0ZvckJ1aWxkZXIoYnVpbGRlck5hbWUsIGZ1bmN0
aW9uKGJ1aWxkZXJSZXN1bHRzKSB7Ci0gICAgICAgICAgICByZXN1bHRzQnlCdWlsZGVyW2J1aWxk
ZXJOYW1lXSA9IGJ1aWxkZXJSZXN1bHRzOworICAgICAgICByZXN1bHRzLmZldGNoUmVzdWx0c0Zv
ckJ1aWxkZXIoYnVpbGRlck5hbWUsIGZ1bmN0aW9uKHJlc3VsdHNUcmVlKSB7CisgICAgICAgICAg
ICByZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJOYW1lXSA9IHJlc3VsdHNUcmVlOwogICAgICAgICAg
ICAgLS1yZXF1ZXN0c0luRmxpZ2h0OwogICAgICAgICAgICAgaWYgKCFyZXF1ZXN0c0luRmxpZ2h0
KQogICAgICAgICAgICAgICAgIG9uc3VjY2VzcyhyZXN1bHRzQnlCdWlsZGVyKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100188</attachid>
            <date>2011-07-08 17:21:24 -0700</date>
            <delta_ts>2011-07-11 11:39:55 -0700</delta_ts>
            <desc>Patch, now with tests</desc>
            <filename>bug-64189-20110708172123.patch</filename>
            <type>text/plain</type>
            <size>15866</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDkwNjc0KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjIgQEAKKzIwMTEtMDctMDggIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKwor
ICAgICAgICBnYXJkZW4tby1tYXRpYyBzaG91bGQgYmUgYWJsZSB0byBkZXRlcm1pbmUgd2hpY2gg
cmV2aXNpb25zIGNhdXNlZCBhIGdpdmVuIGZhaWx1cmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0MTg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgV2Fsa2luZyB0aGUgZmFpbHVyZSBoaXN0b3J5IGxvb2tp
bmcgZm9yIGZhaWx1cmVzIHR1cm5zIG91dCB0byBiZQorICAgICAgICBzbGlnaHRseSB0cmlja3kg
YmVjYXVzZSB0aGUgbmV0d29yayByZXF1ZXN0cyBhcmUgYXN5bmNocm9ub3VzLgorICAgICAgICBD
dXJyZW50bHkgd2UgZG8gYWxsIHRoZSBmZXRjaGVzIHNlcmlhbGx5IGFuZCBvdXIgY2FjaGUgaXMg
dW5ib3VuZGVkLgorICAgICAgICBXZSdsbCBwcm9iYWJseSBvcHRpbWl6ZSBib3RoIHRob3NlIHBh
cmFtZXRlcnMgZXZlbnR1YWxseS4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gZ2VuZXJhbGl6
ZXMgc29tZSBmdW5jdGlvbmFsaXR5IGluIHRoZSB1bml0IHRlc3RpbmcKKyAgICAgICAgZnJhbWV3
b3JrIHRvIG1ha2UgdGVzdGluZyB0aGlzIHNvcnQgb2YgY29kZSBlYXNpZXIuCisKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2VydmVycy9kYXRhL2dhcmRlbmluZ3NlcnZlci9iYXNl
LmpzOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL2RhdGEvZ2FyZGVu
aW5nc2VydmVyL3Jlc3VsdHMuanM6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL3Nl
cnZlcnMvZGF0YS9nYXJkZW5pbmdzZXJ2ZXIvcmVzdWx0c191bml0dGVzdHMuanM6CisKIDIwMTEt
MDctMDggIE9qYW4gVmFmYWkgIDxvamFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBwdWxsIHN0
YXRpYyBkYXNoYm9hcmQgZmlsZXMgaW50byB0aGUgYXBwZW5naW5lIHNlcnZlciBmcm9tIHRoZSBj
aHJvbWl1bSByZXBvc2l0b3J5CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2Vy
dmVycy9kYXRhL2dhcmRlbmluZ3NlcnZlci9iYXNlLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL2RhdGEvZ2FyZGVuaW5nc2VydmVyL2Jhc2UuanMJ
KHJldmlzaW9uIDkwNjY1KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMv
ZGF0YS9nYXJkZW5pbmdzZXJ2ZXIvYmFzZS5qcwkod29ya2luZyBjb3B5KQpAQCAtNjQsNCArNjQs
MTUgQEAgYmFzZS5wcm9iZSA9IGZ1bmN0aW9uKHVybCwgb3B0aW9ucykKICAgICBkb2N1bWVudC5o
ZWFkLmFwcGVuZENoaWxkKHNjcmlwdEVsZW1lbnQpOwogfTsKIAorLy8galF1ZXJ5IG1ha2VzIGpz
b25wIHJlcXVlc3RzIHNvbWV3aGF0IHVnbHkgKHdoaWNoIGlzIGZhaXIgZ2l2ZW4gdGhhdCB0aGV5
J3JlCisvLyB0ZXJyaWJsZSBmb3Igc2VjdXJpdHkpLiBXZSB1c2UgdGhpcyB3cmFwcGVyIHRvIG1h
a2Ugb3VyIGxpdmVzIHNsaWdodGx5IGVhc2llci4KK2Jhc2UuanNvbnAgPSBmdW5jdGlvbih1cmws
IG9uc3VjY2VzcykKK3sKKyAgICAkLmFqYXgoeworICAgICAgICB1cmw6IHVybCwKKyAgICAgICAg
ZGF0YVR5cGU6ICdqc29ucCcsCisgICAgICAgIHN1Y2Nlc3M6IG9uc3VjY2VzcworICAgIH0pOwor
fTsKKwogfSkoKTsKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL2Rh
dGEvZ2FyZGVuaW5nc2VydmVyL3Jlc3VsdHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0
cy93ZWJraXRweS90b29sL3NlcnZlcnMvZGF0YS9nYXJkZW5pbmdzZXJ2ZXIvcmVzdWx0cy5qcwko
cmV2aXNpb24gOTA2NjUpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2VydmVycy9k
YXRhL2dhcmRlbmluZ3NlcnZlci9yZXN1bHRzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1
Nyw0NCBAQCBmdW5jdGlvbiBpc1N1Y2Nlc3MocmVzdWx0KQogICAgIHJldHVybiByZXN1bHQgPT09
IFBBU1M7CiB9CiAKK2Z1bmN0aW9uIHJlc3VsdHNTdW1tYXJ5VVJMKGJ1aWxkZXJOYW1lLCBuYW1l
KQoreworICAgIHJldHVybiBrVGVzdFJlc3VsdHNTZXJ2ZXIgKyAndGVzdGZpbGUnICsKKyAgICAg
ICAgICAnP2J1aWxkZXI9JyArIGJ1aWxkZXJOYW1lICsKKyAgICAgICAgICAnJm1hc3Rlcj0nICsg
a01hc3Rlck5hbWUgKworICAgICAgICAgICcmdGVzdHR5cGU9JyArIGtUZXN0VHlwZSArCisgICAg
ICAgICAgJyZuYW1lPScgKyBuYW1lOworfQorCitmdW5jdGlvbiBkaXJlY3RvcnlPZlJlc3VsdHNT
dW1tYXJ5VVJMKGJ1aWxkZXJOYW1lLCBuYW1lKQoreworICAgIHJldHVybiByZXN1bHRzU3VtbWFy
eVVSTChidWlsZGVyTmFtZSwgbmFtZSkgKyAnJmRpcj0xJzsKK30KKworZnVuY3Rpb24gUmVzdWx0
c0NhY2hlKCkgeworICAgIHRoaXMubV9jYWNoZSA9IHt9OworfQorCitSZXN1bHRzQ2FjaGUucHJv
dG90eXBlLl9mZXRjaCA9IGZ1bmN0aW9uKGtleSwgY2FsbGJhY2spIHsKKyAgICB2YXIgc2VsZiA9
IHRoaXM7CisKKyAgICB2YXIgdXJsID0ga1Rlc3RSZXN1bHRzU2VydmVyICsgJ3Rlc3RmaWxlP2tl
eT0nICsga2V5OworICAgIGJhc2UuanNvbnAodXJsLCBmdW5jdGlvbiAocmVzdWx0c1RyZWUpIHsK
KyAgICAgICAgc2VsZi5tX2NhY2hlW2tleV0gPSByZXN1bHRzVHJlZTsKKyAgICAgICAgY2FsbGJh
Y2socmVzdWx0c1RyZWUpOworICAgIH0pOworfTsKKworLy8gV2FybmluZyEgVGhpcyBmdW5jdGlv
biBjYW4gY2FsbCBjYWxsYmFjayBlaXRoZXIgc3luY2hyb25vdXNseSBvciBhc3luY2hyb25vdXNs
eS4KKy8vIEZJWE1FOiBDb25zaWRlciB1c2luZyBzZXRUaW1lb3V0IHRvIG1ha2UgdGhpcyBtZXRo
b2QgYWx3YXlzIGFzeW5jaHJvbm91cy4KK1Jlc3VsdHNDYWNoZS5wcm90b3R5cGUuZ2V0ID0gZnVu
Y3Rpb24oa2V5LCBjYWxsYmFjaykgeworICAgIGlmIChrZXkgaW4gdGhpcy5tX2NhY2hlKQorICAg
ICAgICByZXR1cm4gY2FsbGJhY2sodGhpcy5tX2NhY2hlW2tleV0pOworICAgIHRoaXMuX2ZldGNo
KGtleSwgY2FsbGJhY2spOworfTsKKwordmFyIGdfcmVzdWx0c0NhY2hlID0gbmV3IFJlc3VsdHND
YWNoZSgpOworCiBmdW5jdGlvbiBhbnlJc0ZhaWx1cmUocmVzdWx0c0xpc3QpCiB7CiAgICAgcmV0
dXJuICQuZ3JlcChyZXN1bHRzTGlzdCwgaXNGYWlsdXJlKS5sZW5ndGggPiAwOwpAQCAtMTEwLDE2
ICsxNDgsMTAzIEBAIHJlc3VsdHMudW5leHBlY3RlZEZhaWx1cmVzQnlUZXN0ID0gZnVuY3QKIHsK
ICAgICB2YXIgdW5leHBlY3RlZEZhaWx1cmVzID0ge307CiAKLSAgICAkLmVhY2gocmVzdWx0c0J5
QnVpbGRlciwgZnVuY3Rpb24oYnVpbGROYW1lLCBidWlsZGVyUmVzdWx0cykgeworICAgICQuZWFj
aChyZXN1bHRzQnlCdWlsZGVyLCBmdW5jdGlvbihidWlsZGVyTmFtZSwgYnVpbGRlclJlc3VsdHMp
IHsKICAgICAgICAgJC5lYWNoKGJ1aWxkZXJSZXN1bHRzLnVuZXhwZWN0ZWRGYWlsdXJlcygpLCBm
dW5jdGlvbih0ZXN0TmFtZSwgcmVzdWx0Tm9kZSkgewogICAgICAgICAgICAgdW5leHBlY3RlZEZh
aWx1cmVzW3Rlc3ROYW1lXSA9IHVuZXhwZWN0ZWRGYWlsdXJlc1t0ZXN0TmFtZV0gfHwge307Ci0g
ICAgICAgICAgICB1bmV4cGVjdGVkRmFpbHVyZXNbdGVzdE5hbWVdW2J1aWxkTmFtZV0gPSByZXN1
bHROb2RlOworICAgICAgICAgICAgdW5leHBlY3RlZEZhaWx1cmVzW3Rlc3ROYW1lXVtidWlsZGVy
TmFtZV0gPSByZXN1bHROb2RlOwogICAgICAgICB9KTsKICAgICB9KTsKIAogICAgIHJldHVybiB1
bmV4cGVjdGVkRmFpbHVyZXM7CiB9OwogCitmdW5jdGlvbiBUZXN0SGlzdG9yeVdhbGtlcihidWls
ZGVyTmFtZSwgdGVzdE5hbWUpCit7CisgICAgdGhpcy5tX2J1aWxkZXJOYW1lID0gYnVpbGRlck5h
bWU7CisgICAgdGhpcy5tX3Rlc3ROYW1lID0gdGVzdE5hbWU7CisgICAgdGhpcy5tX2luZGV4T2ZO
ZXh0S2V5VG9GZXRjaCA9IDA7CisgICAgdGhpcy5tX2tleUxpc3QgPSBbXTsKK30KKworVGVzdEhp
c3RvcnlXYWxrZXIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbihjYWxsYmFjaykKK3sKKyAgICB2
YXIgc2VsZiA9IHRoaXM7CisKKyAgICBiYXNlLmpzb25wKGRpcmVjdG9yeU9mUmVzdWx0c1N1bW1h
cnlVUkwoc2VsZi5tX2J1aWxkZXJOYW1lLCBrUmVzdWx0c05hbWUpLCBmdW5jdGlvbihrZXlMaXN0
KSB7CisgICAgICAgICQuZWFjaChrZXlMaXN0LCBmdW5jdGlvbihpbmRleCwgZWxlbWVudCkgewor
ICAgICAgICAgICAgc2VsZi5tX2tleUxpc3QucHVzaChlbGVtZW50LmtleSk7CisgICAgICAgIH0p
OworICAgICAgICBjYWxsYmFjaygpOworICAgIH0pOworfTsKKworVGVzdEhpc3RvcnlXYWxrZXIu
cHJvdG90eXBlLl9mZXRjaE5leHRSZXN1bHROb2RlID0gZnVuY3Rpb24oY2FsbGJhY2spCit7Cisg
ICAgdmFyIHNlbGYgPSB0aGlzOworCisgICAgaWYgKHNlbGYubV9pbmRleE9mTmV4dEtleVRvRmV0
Y2ggPj0gc2VsZi5tX2tleUxpc3QpIHsKKyAgICAgICAgY2FsbGJhY2soMCwgbnVsbCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2YXIga2V5ID0gc2VsZi5tX2tleUxpc3Rbc2VsZi5t
X2luZGV4T2ZOZXh0S2V5VG9GZXRjaF07CisgICAgKyt0aGlzLm1faW5kZXhPZk5leHRLZXlUb0Zl
dGNoOworICAgIGdfcmVzdWx0c0NhY2hlLmdldChrZXksIGZ1bmN0aW9uKHJlc3VsdHNUcmVlKSB7
CisgICAgICAgIHZhciByZXN1bHROb2RlID0gcmVzdWx0cy5yZXN1bHROb2RlRm9yVGVzdChyZXN1
bHRzVHJlZSwgc2VsZi5tX3Rlc3ROYW1lKTsKKyAgICAgICAgY2FsbGJhY2socmVzdWx0c1RyZWVb
J3JldmlzaW9uJ10sIHJlc3VsdE5vZGUpOworICAgIH0pOworfTsKKworVGVzdEhpc3RvcnlXYWxr
ZXIucHJvdG90eXBlLndhbGtIaXN0b3J5ID0gZnVuY3Rpb24oY2FsbGJhY2spCit7CisgICAgdmFy
IHNlbGYgPSB0aGlzOworICAgIHNlbGYuX2ZldGNoTmV4dFJlc3VsdE5vZGUoZnVuY3Rpb24ocmV2
aXNpb24sIHJlc3VsdE5vZGUpIHsKKyAgICAgICAgdmFyIHNob3VsZENvbnRpbnVlID0gY2FsbGJh
Y2socmV2aXNpb24sIHJlc3VsdE5vZGUpOworICAgICAgICBpZiAoIXNob3VsZENvbnRpbnVlKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBzZWxmLndhbGtIaXN0b3J5KGNhbGxiYWNrKTsK
KyAgICB9KTsKK30KKworcmVzdWx0cy5yZWdyZXNzaW9uUmFuZ2VGb3JGYWlsdXJlID0gZnVuY3Rp
b24oYnVpbGRlck5hbWUsIHRlc3ROYW1lLCBjYWxsYmFjaykKK3sKKyAgICB2YXIgb2xkZXN0RmFp
bGluZ1JldmlzaW9uID0gMDsKKyAgICB2YXIgbmV3ZXN0UGFzc2luZ1JldmlzaW9uID0gMDsKKwor
ICAgIHZhciBoaXN0b3J5V2Fsa2VyID0gbmV3IFRlc3RIaXN0b3J5V2Fsa2VyKGJ1aWxkZXJOYW1l
LCB0ZXN0TmFtZSk7CisgICAgaGlzdG9yeVdhbGtlci5pbml0KGZ1bmN0aW9uKCkgeworICAgICAg
ICBoaXN0b3J5V2Fsa2VyLndhbGtIaXN0b3J5KGZ1bmN0aW9uKHJldmlzaW9uLCByZXN1bHROb2Rl
KSB7CisgICAgICAgICAgICBpZiAoIXJlc3VsdE5vZGUpIHsKKyAgICAgICAgICAgICAgICBuZXdl
c3RQYXNzaW5nUmV2aXNpb24gPSByZXZpc2lvbjsKKyAgICAgICAgICAgICAgICBjYWxsYmFjayhv
bGRlc3RGYWlsaW5nUmV2aXNpb24sIG5ld2VzdFBhc3NpbmdSZXZpc2lvbik7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGlzVW5l
eHBlY3RlZEZhaWx1cmUocmVzdWx0Tm9kZSkpIHsKKyAgICAgICAgICAgICAgICBvbGRlc3RGYWls
aW5nUmV2aXNpb24gPSByZXZpc2lvbjsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKCFvbGRlc3RGYWlsaW5nUmV2
aXNpb24pCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOyAgLy8gV2UgbmVlZCB0byBr
ZWVwIGxvb2tpbmcgZm9yIGEgZmFpbGluZyByZXZpc2lvbi4KKyAgICAgICAgICAgICAgICBuZXdl
c3RQYXNzaW5nUmV2aXNpb24gPSByZXZpc2lvbjsKKyAgICAgICAgICAgICAgICBjYWxsYmFjayhv
bGRlc3RGYWlsaW5nUmV2aXNpb24sIG5ld2VzdFBhc3NpbmdSZXZpc2lvbik7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9KTsK
K307CisKK3Jlc3VsdHMucmVzdWx0Tm9kZUZvclRlc3QgPSBmdW5jdGlvbihyZXN1bHRzVHJlZSwg
dGVzdE5hbWUpCit7CisgICAgdmFyIHRlc3ROYW1lUGF0aCA9IHRlc3ROYW1lLnNwbGl0KCcvJyk7
CisgICAgdmFyIGN1cnJlbnROb2RlID0gcmVzdWx0c1RyZWVbJ3Rlc3RzJ107CisgICAgJC5lYWNo
KHRlc3ROYW1lUGF0aCwgZnVuY3Rpb24oaW5kZXgsIHNlZ21lbnROYW1lKSB7CisgICAgICAgIGlm
ICghY3VycmVudE5vZGUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGN1cnJlbnROb2Rl
ID0gKHNlZ21lbnROYW1lIGluIGN1cnJlbnROb2RlKSA/IGN1cnJlbnROb2RlW3NlZ21lbnROYW1l
XSA6IG51bGw7CisgICAgfSk7CisgICAgcmV0dXJuIGN1cnJlbnROb2RlOworfTsKKwogZnVuY3Rp
b24gcmVzdWx0c0RpcmVjdG9yeUZvckJ1aWxkZXIoYnVpbGRlck5hbWUpCiB7CiAgICAgcmV0dXJu
IGJ1aWxkZXJOYW1lLnJlcGxhY2UoL1sgLigpXS9nLCAnXycpOwpAQCAtMTg5LDIzICszMTQsMTAg
QEAgcmVzdWx0cy5mZXRjaFJlc3VsdHNVUkxzID0gZnVuY3Rpb24oYnVpbAogICAgIH0pOwogfTsK
IAotZnVuY3Rpb24gcmVzdWx0c1N1bW1hcnlVUkwoYnVpbGRlck5hbWUsIG5hbWUpCi17Ci0gICAg
cmV0dXJuIGtUZXN0UmVzdWx0c1NlcnZlciArICd0ZXN0ZmlsZScgKwotICAgICAgICAgICc/YnVp
bGRlcj0nICsgYnVpbGRlck5hbWUgKwotICAgICAgICAgICcmbWFzdGVyPScgKyBrTWFzdGVyTmFt
ZSArCi0gICAgICAgICAgJyZ0ZXN0dHlwZT0nICsga1Rlc3RUeXBlICsKLSAgICAgICAgICAnJm5h
bWU9JyArIG5hbWU7Ci19Ci0KIHJlc3VsdHMuZmV0Y2hSZXN1bHRzRm9yQnVpbGRlciA9IGZ1bmN0
aW9uKGJ1aWxkZXJOYW1lLCBvbnN1Y2Nlc3MpCiB7Ci0gICAgJC5hamF4KHsKLSAgICAgICAgdXJs
OiByZXN1bHRzU3VtbWFyeVVSTChidWlsZGVyTmFtZSwga1Jlc3VsdHNOYW1lKSwKLSAgICAgICAg
ZGF0YVR5cGU6ICdqc29ucCcsCi0gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEpIHsKLSAg
ICAgICAgICAgIG9uc3VjY2VzcyhuZXcgcmVzdWx0cy5CdWlsZGVyUmVzdWx0cyhkYXRhKSk7Ci0g
ICAgICAgIH0KKyAgICBiYXNlLmpzb25wKHJlc3VsdHNTdW1tYXJ5VVJMKGJ1aWxkZXJOYW1lLCBr
UmVzdWx0c05hbWUpLCBmdW5jdGlvbihyZXN1bHRzVHJlZSkgeworICAgICAgICBvbnN1Y2Nlc3Mo
bmV3IHJlc3VsdHMuQnVpbGRlclJlc3VsdHMocmVzdWx0c1RyZWUpKTsKICAgICB9KTsKIH07CiAK
QEAgLTIxNCw4ICszMjYsOCBAQCByZXN1bHRzLmZldGNoUmVzdWx0c0J5QnVpbGRlciA9IGZ1bmN0
aW9uCiAgICAgdmFyIHJlc3VsdHNCeUJ1aWxkZXIgPSB7fQogICAgIHZhciByZXF1ZXN0c0luRmxp
Z2h0ID0gYnVpbGRlck5hbWVMaXN0Lmxlbmd0aDsKICAgICAkLmVhY2goYnVpbGRlck5hbWVMaXN0
LCBmdW5jdGlvbihpbmRleCwgYnVpbGRlck5hbWUpIHsKLSAgICAgICAgcmVzdWx0cy5mZXRjaFJl
c3VsdHNGb3JCdWlsZGVyKGJ1aWxkZXJOYW1lLCBmdW5jdGlvbihidWlsZGVyUmVzdWx0cykgewot
ICAgICAgICAgICAgcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyTmFtZV0gPSBidWlsZGVyUmVzdWx0
czsKKyAgICAgICAgcmVzdWx0cy5mZXRjaFJlc3VsdHNGb3JCdWlsZGVyKGJ1aWxkZXJOYW1lLCBm
dW5jdGlvbihyZXN1bHRzVHJlZSkgeworICAgICAgICAgICAgcmVzdWx0c0J5QnVpbGRlcltidWls
ZGVyTmFtZV0gPSByZXN1bHRzVHJlZTsKICAgICAgICAgICAgIC0tcmVxdWVzdHNJbkZsaWdodDsK
ICAgICAgICAgICAgIGlmICghcmVxdWVzdHNJbkZsaWdodCkKICAgICAgICAgICAgICAgICBvbnN1
Y2Nlc3MocmVzdWx0c0J5QnVpbGRlcik7CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rv
b2wvc2VydmVycy9kYXRhL2dhcmRlbmluZ3NlcnZlci9yZXN1bHRzX3VuaXR0ZXN0cy5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2VydmVycy9kYXRhL2dhcmRl
bmluZ3NlcnZlci9yZXN1bHRzX3VuaXR0ZXN0cy5qcwkocmV2aXNpb24gOTA2NjUpCisrKyBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2VydmVycy9kYXRhL2dhcmRlbmluZ3NlcnZlci9yZXN1
bHRzX3VuaXR0ZXN0cy5qcwkod29ya2luZyBjb3B5KQpAQCAtOTMsMzMgKzkzLDE1NSBAQCB0ZXN0
KCJyZXN1bHRUeXBlIiwgMTIsIGZ1bmN0aW9uKCkgewogICAgIGVxdWFscyhyZXN1bHRzLnJlc3Vs
dFR5cGUoImh0dHA6Ly9leGFtcGxlLmNvbS9mb28ueHl6IiksICJ0ZXh0Iik7CiB9KTsKIAotdGVz
dCgiZmV0Y2hSZXN1bHRzVVJMcyIsIDMsIGZ1bmN0aW9uKCkgewordGVzdCgicmVzdWx0Tm9kZUZv
clRlc3QiLCA0LCBmdW5jdGlvbigpIHsKKyAgICBkZWVwRXF1YWwocmVzdWx0cy5yZXN1bHROb2Rl
Rm9yVGVzdChrRXhhbXBsZVJlc3VsdHNKU09OLCAidXNlcnNjcmlwdHMvYW5vdGhlci10ZXN0Lmh0
bWwiKSwgeworICAgICAgICAiZXhwZWN0ZWQiOiAiUEFTUyIsCisgICAgICAgICJhY3R1YWwiOiAi
VEVYVCIKKyAgICB9KTsKKyAgICBlcXVhbHMocmVzdWx0cy5yZXN1bHROb2RlRm9yVGVzdChrRXhh
bXBsZVJlc3VsdHNKU09OLCAiZm9vLmh0bWwiKSwgbnVsbCk7CisgICAgZXF1YWxzKHJlc3VsdHMu
cmVzdWx0Tm9kZUZvclRlc3Qoa0V4YW1wbGVSZXN1bHRzSlNPTiwgInVzZXJzY3JpcHRzL2Zvby5o
dG1sIiksIG51bGwpOworICAgIGVxdWFscyhyZXN1bHRzLnJlc3VsdE5vZGVGb3JUZXN0KGtFeGFt
cGxlUmVzdWx0c0pTT04sICJ1c2Vyc2NyaXB0cy9mb28vYmFyLmh0bWwiKSwgbnVsbCk7Cit9KTsK
KworZnVuY3Rpb24gTmV0d29ya1NpbXVsYXRvcigpCit7CisgICAgdGhpcy5tX3BlbmRpbmdDYWxs
YmFja3MgPSBbXTsKK307CisKK05ldHdvcmtTaW11bGF0b3IucHJvdG90eXBlLnNjaGVkdWxlQ2Fs
bGJhY2sgPSBmdW5jdGlvbihjYWxsYmFjaykKK3sKKyAgICB0aGlzLm1fcGVuZGluZ0NhbGxiYWNr
cy5wdXNoKGNhbGxiYWNrKTsKK30KKworTmV0d29ya1NpbXVsYXRvci5wcm90b3R5cGUucnVuVGVz
dCA9IGZ1bmN0aW9uKHRlc3RDYXNlKQoreworICAgIHZhciBzZWxmID0gdGhpczsKICAgICB2YXIg
cmVhbEJhc2UgPSB3aW5kb3cuYmFzZTsKIAotICAgIHZhciBwZW5kaW5nQ2FsbGJhY2tzID0ge307
CiAgICAgd2luZG93LmJhc2UgPSB7fTsKLSAgICBiYXNlLnByb2JlID0gZnVuY3Rpb24odXJsLCBv
cHRpb25zKSB7Ci0gICAgICAgIHBlbmRpbmdDYWxsYmFja3NbdXJsXSA9IG9wdGlvbnM7Ci0gICAg
fTsKICAgICBiYXNlLmVuZHNXaXRoID0gcmVhbEJhc2UuZW5kc1dpdGg7CiAgICAgYmFzZS50cmlt
RXh0ZW5zaW9uID0gcmVhbEJhc2UudHJpbUV4dGVuc2lvbjsKKyAgICBpZiAoc2VsZi5wcm9iZUhv
b2spCisgICAgICAgIGJhc2UucHJvYmUgPSBzZWxmLnByb2JlSG9vazsKKyAgICBpZiAoc2VsZi5q
c29ucEhvb2spCisgICAgICAgIGJhc2UuanNvbnAgPSBzZWxmLmpzb25wSG9vazsKKworICAgIHRl
c3RDYXNlKCk7CisKKyAgICB3aGlsZSAodGhpcy5tX3BlbmRpbmdDYWxsYmFja3MubGVuZ3RoICE9
IDApIHsKKyAgICAgICAgdmFyIGNhbGxiYWNrID0gdGhpcy5tX3BlbmRpbmdDYWxsYmFja3Muc2hp
ZnQoKTsKKyAgICAgICAgY2FsbGJhY2soKTsKKyAgICB9CisKKyAgICB3aW5kb3cuYmFzZSA9IHJl
YWxCYXNlOworICAgIGVxdWFsKHdpbmRvdy5iYXNlLCByZWFsQmFzZSwgIkZhaWxlZCB0byByZXN0
b3JlIHJlYWwgYmFzZSEiKTsKK30KKwordGVzdCgicmVncmVzc2lvblJhbmdlRm9yRmFpbHVyZSIs
IDMsIGZ1bmN0aW9uKCkgeworICAgIHNpbXVsYXRvciA9IG5ldyBOZXR3b3JrU2ltdWxhdG9yKCk7
CisKKyAgICB2YXIga2V5TWFwID0geworICAgICAgICAiYWd4MFpYTjBMWEpsYzNWc2RITnlFQXNT
Q0ZSbGMzUkdhV3hsR0xuY1VBdyI6IHsKKyAgICAgICAgICAgICJ0ZXN0cyI6IHsKKyAgICAgICAg
ICAgICAgICAidXNlcnNjcmlwdHMiOiB7CisgICAgICAgICAgICAgICAgICAgICJhbm90aGVyLXRl
c3QuaHRtbCI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCI6ICJQQVNTIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICJhY3R1YWwiOiAiVEVYVCIKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICB9LAorICAgICAgICAgICAg
InJldmlzaW9uIjogIjkwNDMwIgorICAgICAgICB9LAorICAgICAgICAiYWd4MFpYTjBMWEpsYzNW
c2RITnlFQXNTQ0ZSbGMzUkdhV3hsR05mVFVBdyI6eworICAgICAgICAgICAgInRlc3RzIjogewor
ICAgICAgICAgICAgICAgICJ1c2Vyc2NyaXB0cyI6IHsKKyAgICAgICAgICAgICAgICAgICAgInVz
ZXItc2NyaXB0LXZpZGVvLWRvY3VtZW50Lmh0bWwiOiB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAiZXhwZWN0ZWQiOiAiRkFJTCIsCisgICAgICAgICAgICAgICAgICAgICAgICAiYWN0dWFsIjog
IlRFWFQiCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICJhbm90
aGVyLXRlc3QuaHRtbCI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCI6ICJQ
QVNTIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJhY3R1YWwiOiAiVEVYVCIKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICB9LAorICAgICAg
ICAgICAgInJldmlzaW9uIjogIjkwNDI5IgorICAgICAgICB9LAorICAgICAgICAiYWd4MFpYTjBM
WEpsYzNWc2RITnlFQXNTQ0ZSbGMzUkdhV3hsR0pXQ1VRdyI6eworICAgICAgICAgICAgInRlc3Rz
IjogeworICAgICAgICAgICAgICAgICJ1c2Vyc2NyaXB0cyI6IHsKKyAgICAgICAgICAgICAgICAg
ICAgImFub3RoZXItdGVzdC5odG1sIjogeworICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVj
dGVkIjogIlBBU1MiLAorICAgICAgICAgICAgICAgICAgICAgICAgImFjdHVhbCI6ICJURVhUIgor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIH0s
CisgICAgICAgICAgICAicmV2aXNpb24iOiAiOTA0MjYiCisgICAgICAgIH0sCisgICAgICAgICJh
Z3gwWlhOMExYSmxjM1ZzZEhOeUVBc1NDRlJsYzNSR2FXeGxHS2JMVUF3Ijp7CisgICAgICAgICAg
ICAidGVzdHMiOiB7CisgICAgICAgICAgICAgICAgInVzZXJzY3JpcHRzIjogeworICAgICAgICAg
ICAgICAgICAgICAidXNlci1zY3JpcHQtdmlkZW8tZG9jdW1lbnQuaHRtbCI6IHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICJleHBlY3RlZCI6ICJGQUlMIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICJhY3R1YWwiOiAiVEVYVCIKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAg
ICAgICB9LAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJyZXZpc2lvbiI6ICI5MDQyNCIK
KyAgICAgICAgfQorICAgIH07CiAKLSAgICByZXN1bHRzLmZldGNoUmVzdWx0c1VSTHMoIk1vY2sg
QnVpbGRlciIsICJ1c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QuaHRtbCIsIGZ1bmN0aW9uKHJlc3Vs
dFVSTHMpIHsKLSAgICAgICAgZGVlcEVxdWFsKHJlc3VsdFVSTHMsIFsKLSAgICAgICAgICAgICJo
dHRwOi8vYnVpbGQuY2hyb21pdW0ub3JnL2YvY2hyb21pdW0vbGF5b3V0X3Rlc3RfcmVzdWx0cy9N
b2NrX0J1aWxkZXIvcmVzdWx0cy9sYXlvdXQtdGVzdC1yZXN1bHRzL3VzZXJzY3JpcHRzL2Fub3Ro
ZXItdGVzdC1leHBlY3RlZC50eHQiLAotICAgICAgICAgICAgImh0dHA6Ly9idWlsZC5jaHJvbWl1
bS5vcmcvZi9jaHJvbWl1bS9sYXlvdXRfdGVzdF9yZXN1bHRzL01vY2tfQnVpbGRlci9yZXN1bHRz
L2xheW91dC10ZXN0LXJlc3VsdHMvdXNlcnNjcmlwdHMvYW5vdGhlci10ZXN0LWFjdHVhbC50eHQi
LAotICAgICAgICAgICAgImh0dHA6Ly9idWlsZC5jaHJvbWl1bS5vcmcvZi9jaHJvbWl1bS9sYXlv
dXRfdGVzdF9yZXN1bHRzL01vY2tfQnVpbGRlci9yZXN1bHRzL2xheW91dC10ZXN0LXJlc3VsdHMv
dXNlcnNjcmlwdHMvYW5vdGhlci10ZXN0LWRpZmYudHh0IiwKLSAgICAgICAgXSk7CisgICAgc2lt
dWxhdG9yLmpzb25wSG9vayA9IGZ1bmN0aW9uKHVybCwgY2FsbGJhY2spIHsKKyAgICAgICAgc2lt
dWxhdG9yLnNjaGVkdWxlQ2FsbGJhY2soZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBpZiAoL2Rp
cj0xLy50ZXN0KHVybCkpIHsKKyAgICAgICAgICAgICAgICBjYWxsYmFjayhbCisgICAgICAgICAg
ICAgICAgICAgIHsgImtleSI6ICJhZ3gwWlhOMExYSmxjM1ZzZEhOeUVBc1NDRlJsYzNSR2FXeGxH
TG5jVUF3IiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJrZXkiOiAiYWd4MFpYTjBMWEpsYzNW
c2RITnlFQXNTQ0ZSbGMzUkdhV3hsR05mVFVBdyIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAi
a2V5IjogImFneDBaWE4wTFhKbGMzVnNkSE55RUFzU0NGUmxjM1JHYVd4bEdKV0NVUXciIH0sCisg
ICAgICAgICAgICAgICAgICAgIHsgImtleSI6ICJhZ3gwWlhOMExYSmxjM1ZzZEhOeUVBc1NDRlJs
YzNSR2FXeGxHS2JMVUF3IiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJrZXkiOiAiYWd4MFpY
TjBMWEpsYzNWc2RITnlFQXNTQ0ZSbGMzUkdhV3hsR09qNVVBdyIgfSwKKyAgICAgICAgICAgICAg
ICAgICAgeyAia2V5IjogImFneDBaWE4wTFhKbGMzVnNkSE55RUFzU0NGUmxjM1JHYVd4bEdQLUFV
UXciIH0sCisgICAgICAgICAgICAgICAgICAgIHsgImtleSI6ICJhZ3gwWlhOMExYSmxjM1ZzZEhO
eUVBc1NDRlJsYzNSR2FXeGxHUEwzVUF3IiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJrZXki
OiAiYWd4MFpYTjBMWEpsYzNWc2RITnlFQXNTQ0ZSbGMzUkdhV3hsR05ISlFBdyIgfSwKKyAgICAg
ICAgICAgICAgICBdKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFy
IGtleSA9IHVybC5tYXRjaCgva2V5PShbXiZdKykvKVsxXTsKKyAgICAgICAgICAgICAgICBjYWxs
YmFjayhrZXlNYXBba2V5XSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH07Cisg
ICAgc2ltdWxhdG9yLnJ1blRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHJlc3VsdHMucmVncmVz
c2lvblJhbmdlRm9yRmFpbHVyZSgiTW9jayBCdWlsZGVyIiwgInVzZXJzY3JpcHRzL2Fub3RoZXIt
dGVzdC5odG1sIiwgZnVuY3Rpb24ob2xkZXN0RmFpbGluZ1JldmlzaW9uLCBuZXdlc3RQYXNzaW5n
UmV2aXNpb24pIHsKKyAgICAgICAgICAgIGVxdWFscyhvbGRlc3RGYWlsaW5nUmV2aXNpb24sICI5
MDQyNiIpOworICAgICAgICAgICAgZXF1YWxzKG5ld2VzdFBhc3NpbmdSZXZpc2lvbiwgIjkwNDI0
Iik7CisgICAgICAgIH0pOwogICAgIH0pOworfSk7CisKK3Rlc3QoImZldGNoUmVzdWx0c1VSTHMi
LCAzLCBmdW5jdGlvbigpIHsKKyAgICB2YXIgc2ltdWxhdG9yID0gbmV3IE5ldHdvcmtTaW11bGF0
b3IoKTsKIAogICAgIHZhciBwcm9iZWRVUkxzID0gW107Ci0gICAgZm9yICh2YXIgdXJsIGluIHBl
bmRpbmdDYWxsYmFja3MpIHsKLSAgICAgICAgcHJvYmVkVVJMcy5wdXNoKHVybCk7Ci0gICAgICAg
IGlmIChyZWFsQmFzZS5lbmRzV2l0aCh1cmwsICcudHh0JykpCi0gICAgICAgICAgICBwZW5kaW5n
Q2FsbGJhY2tzW3VybF0uc3VjY2Vzcy5jYWxsKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHBlbmRpbmdDYWxsYmFja3NbdXJsXS5lcnJvci5jYWxsKCk7Ci0gICAgfQorICAgIHNpbXVsYXRv
ci5wcm9iZUhvb2sgPSBmdW5jdGlvbih1cmwsIG9wdGlvbnMpCisgICAgeworICAgICAgICBzaW11
bGF0b3Iuc2NoZWR1bGVDYWxsYmFjayhmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHByb2JlZFVS
THMucHVzaCh1cmwpOworICAgICAgICAgICAgaWYgKGJhc2UuZW5kc1dpdGgodXJsLCAnLnR4dCcp
KQorICAgICAgICAgICAgICAgIG9wdGlvbnMuc3VjY2Vzcy5jYWxsKCk7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgb3B0aW9ucy5lcnJvci5jYWxsKCk7CisgICAgICAgIH0pOwor
ICAgIH07CisKKyAgICBzaW11bGF0b3IucnVuVGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgcmVz
dWx0cy5mZXRjaFJlc3VsdHNVUkxzKCJNb2NrIEJ1aWxkZXIiLCAidXNlcnNjcmlwdHMvYW5vdGhl
ci10ZXN0Lmh0bWwiLCBmdW5jdGlvbihyZXN1bHRVUkxzKSB7CisgICAgICAgICAgICBkZWVwRXF1
YWwocmVzdWx0VVJMcywgWworICAgICAgICAgICAgICAgICJodHRwOi8vYnVpbGQuY2hyb21pdW0u
b3JnL2YvY2hyb21pdW0vbGF5b3V0X3Rlc3RfcmVzdWx0cy9Nb2NrX0J1aWxkZXIvcmVzdWx0cy9s
YXlvdXQtdGVzdC1yZXN1bHRzL3VzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC1leHBlY3RlZC50eHQi
LAorICAgICAgICAgICAgICAgICJodHRwOi8vYnVpbGQuY2hyb21pdW0ub3JnL2YvY2hyb21pdW0v
bGF5b3V0X3Rlc3RfcmVzdWx0cy9Nb2NrX0J1aWxkZXIvcmVzdWx0cy9sYXlvdXQtdGVzdC1yZXN1
bHRzL3VzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC1hY3R1YWwudHh0IiwKKyAgICAgICAgICAgICAg
ICAiaHR0cDovL2J1aWxkLmNocm9taXVtLm9yZy9mL2Nocm9taXVtL2xheW91dF90ZXN0X3Jlc3Vs
dHMvTW9ja19CdWlsZGVyL3Jlc3VsdHMvbGF5b3V0LXRlc3QtcmVzdWx0cy91c2Vyc2NyaXB0cy9h
bm90aGVyLXRlc3QtZGlmZi50eHQiLAorICAgICAgICAgICAgXSk7CisgICAgICAgIH0pOworICAg
IH0pOwogCiAgICAgZGVlcEVxdWFsKHByb2JlZFVSTHMsIFsKICAgICAgICAgImh0dHA6Ly9idWls
ZC5jaHJvbWl1bS5vcmcvZi9jaHJvbWl1bS9sYXlvdXRfdGVzdF9yZXN1bHRzL01vY2tfQnVpbGRl
ci9yZXN1bHRzL2xheW91dC10ZXN0LXJlc3VsdHMvdXNlcnNjcmlwdHMvYW5vdGhlci10ZXN0LWV4
cGVjdGVkLnBuZyIsCkBAIC0xMjksNyArMjUxLDQgQEAgdGVzdCgiZmV0Y2hSZXN1bHRzVVJMcyIs
IDMsIGZ1bmN0aW9uKCkgewogICAgICAgICAiaHR0cDovL2J1aWxkLmNocm9taXVtLm9yZy9mL2No
cm9taXVtL2xheW91dF90ZXN0X3Jlc3VsdHMvTW9ja19CdWlsZGVyL3Jlc3VsdHMvbGF5b3V0LXRl
c3QtcmVzdWx0cy91c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QtYWN0dWFsLnR4dCIsCiAgICAgICAg
ICJodHRwOi8vYnVpbGQuY2hyb21pdW0ub3JnL2YvY2hyb21pdW0vbGF5b3V0X3Rlc3RfcmVzdWx0
cy9Nb2NrX0J1aWxkZXIvcmVzdWx0cy9sYXlvdXQtdGVzdC1yZXN1bHRzL3VzZXJzY3JpcHRzL2Fu
b3RoZXItdGVzdC1kaWZmLnR4dCIsCiAgICAgXSk7Ci0KLSAgICB3aW5kb3cuYmFzZSA9IHJlYWxC
YXNlOwotICAgIGVxdWFsKHdpbmRvdy5iYXNlLCByZWFsQmFzZSwgIkZhaWxlZCB0byByZXN0b3Jl
IHJlYWwgYmFzZSEiKTsKIH0pOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100336</attachid>
            <date>2011-07-11 11:36:41 -0700</date>
            <delta_ts>2011-07-11 11:46:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-64189-20110711113640.patch</filename>
            <type>text/plain</type>
            <size>16308</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDkwNzY2KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjIgQEAKKzIwMTEtMDctMTEgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKwor
ICAgICAgICBnYXJkZW4tby1tYXRpYyBzaG91bGQgYmUgYWJsZSB0byBkZXRlcm1pbmUgd2hpY2gg
cmV2aXNpb25zIGNhdXNlZCBhIGdpdmVuIGZhaWx1cmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0MTg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgV2Fsa2luZyB0aGUgZmFpbHVyZSBoaXN0b3J5IGxvb2tp
bmcgZm9yIGZhaWx1cmVzIHR1cm5zIG91dCB0byBiZQorICAgICAgICBzbGlnaHRseSB0cmlja3kg
YmVjYXVzZSB0aGUgbmV0d29yayByZXF1ZXN0cyBhcmUgYXN5bmNocm9ub3VzLgorICAgICAgICBD
dXJyZW50bHkgd2UgZG8gYWxsIHRoZSBmZXRjaGVzIHNlcmlhbGx5IGFuZCBvdXIgY2FjaGUgaXMg
dW5ib3VuZGVkLgorICAgICAgICBXZSdsbCBwcm9iYWJseSBvcHRpbWl6ZSBib3RoIHRob3NlIHBh
cmFtZXRlcnMgZXZlbnR1YWxseS4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gZ2VuZXJhbGl6
ZXMgc29tZSBmdW5jdGlvbmFsaXR5IGluIHRoZSB1bml0IHRlc3RpbmcKKyAgICAgICAgZnJhbWV3
b3JrIHRvIG1ha2UgdGVzdGluZyB0aGlzIHNvcnQgb2YgY29kZSBlYXNpZXIuCisKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2VydmVycy9kYXRhL2dhcmRlbmluZ3NlcnZlci9iYXNl
LmpzOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL2RhdGEvZ2FyZGVu
aW5nc2VydmVyL3Jlc3VsdHMuanM6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL3Nl
cnZlcnMvZGF0YS9nYXJkZW5pbmdzZXJ2ZXIvcmVzdWx0c191bml0dGVzdHMuanM6CisKIDIwMTEt
MDctMTEgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBnYXJkZW4t
by1tYXRpYyBzaG91bGQgYmUgYWJsZSB0byByb2xsIG91dCBwYXRjaGVzCkluZGV4OiBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2VydmVycy9kYXRhL2dhcmRlbmluZ3NlcnZlci9iYXNlLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL2RhdGEv
Z2FyZGVuaW5nc2VydmVyL2Jhc2UuanMJKHJldmlzaW9uIDkwNzY2KQorKysgVG9vbHMvU2NyaXB0
cy93ZWJraXRweS90b29sL3NlcnZlcnMvZGF0YS9nYXJkZW5pbmdzZXJ2ZXIvYmFzZS5qcwkod29y
a2luZyBjb3B5KQpAQCAtNjQsNCArNjQsMTUgQEAgYmFzZS5wcm9iZSA9IGZ1bmN0aW9uKHVybCwg
b3B0aW9ucykKICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHNjcmlwdEVsZW1lbnQpOwog
fTsKIAorLy8galF1ZXJ5IG1ha2VzIGpzb25wIHJlcXVlc3RzIHNvbWV3aGF0IHVnbHkgKHdoaWNo
IGlzIGZhaXIgZ2l2ZW4gdGhhdCB0aGV5J3JlCisvLyB0ZXJyaWJsZSBmb3Igc2VjdXJpdHkpLiBX
ZSB1c2UgdGhpcyB3cmFwcGVyIHRvIG1ha2Ugb3VyIGxpdmVzIHNsaWdodGx5IGVhc2llci4KK2Jh
c2UuanNvbnAgPSBmdW5jdGlvbih1cmwsIG9uc3VjY2VzcykKK3sKKyAgICAkLmFqYXgoeworICAg
ICAgICB1cmw6IHVybCwKKyAgICAgICAgZGF0YVR5cGU6ICdqc29ucCcsCisgICAgICAgIHN1Y2Nl
c3M6IG9uc3VjY2VzcworICAgIH0pOworfTsKKwogfSkoKTsKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvdG9vbC9zZXJ2ZXJzL2RhdGEvZ2FyZGVuaW5nc2VydmVyL3Jlc3VsdHMuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMvZGF0YS9nYXJk
ZW5pbmdzZXJ2ZXIvcmVzdWx0cy5qcwkocmV2aXNpb24gOTA3NjYpCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3Rvb2wvc2VydmVycy9kYXRhL2dhcmRlbmluZ3NlcnZlci9yZXN1bHRzLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0zLDYgKzMsNyBAQCB2YXIgcmVzdWx0cyA9IHJlc3VsdHMgfHwge307
CiAoZnVuY3Rpb24oKSB7CiAKIHZhciBrVGVzdFJlc3VsdHNTZXJ2ZXIgPSAnaHR0cDovL3Rlc3Qt
cmVzdWx0cy5hcHBzcG90LmNvbS8nOwordmFyIGtUZXN0UmVzdWx0c1F1ZXJ5ID0ga1Rlc3RSZXN1
bHRzU2VydmVyICsgJ3Rlc3RmaWxlPycKIHZhciBrVGVzdFR5cGUgPSAnbGF5b3V0LXRlc3RzJzsK
IHZhciBrUmVzdWx0c05hbWUgPSAnZnVsbF9yZXN1bHRzLmpzb24nOwogdmFyIGtNYXN0ZXJOYW1l
ID0gJ0Nocm9taXVtV2Via2l0JzsKQEAgLTU3LDYgKzU4LDU1IEBAIGZ1bmN0aW9uIGlzU3VjY2Vz
cyhyZXN1bHQpCiAgICAgcmV0dXJuIHJlc3VsdCA9PT0gUEFTUzsKIH0KIAorZnVuY3Rpb24gcmVz
dWx0c1BhcmFtZXRlcnMoYnVpbGRlck5hbWUsIHRlc3ROYW1lKQoreworICAgIHJldHVybiB7Cisg
ICAgICAgIGJ1aWxkZXI6IGJ1aWxkZXJOYW1lLAorICAgICAgICBtYXN0ZXI6IGtNYXN0ZXJOYW1l
LAorICAgICAgICB0ZXN0dHlwZToga1Rlc3RUeXBlLAorICAgICAgICBuYW1lOiBuYW1lLAorICAg
IH07Cit9CisKK2Z1bmN0aW9uIHJlc3VsdHNTdW1tYXJ5VVJMKGJ1aWxkZXJOYW1lLCB0ZXN0TmFt
ZSkKK3sKKyAgICByZXR1cm4ga1Rlc3RSZXN1bHRzUXVlcnkgKyAkLnBhcmFtKHJlc3VsdHNQYXJh
bWV0ZXJzKGJ1aWxkZXJOYW1lLCB0ZXN0TmFtZSkpOworfQorCitmdW5jdGlvbiBkaXJlY3RvcnlP
ZlJlc3VsdHNTdW1tYXJ5VVJMKGJ1aWxkZXJOYW1lLCB0ZXN0TmFtZSkKK3sKKyAgICB2YXIgcGFy
YW1ldGVycyA9IHJlc3VsdHNQYXJhbWV0ZXJzKGJ1aWxkZXJOYW1lLCB0ZXN0TmFtZSk7CisgICAg
cGFyYW1ldGVyc1snZGlyJ10gPSAxOworICAgIHJldHVybiBrVGVzdFJlc3VsdHNRdWVyeSArICQu
cGFyYW0ocGFyYW1ldGVycyk7Cit9CisKK2Z1bmN0aW9uIFJlc3VsdHNDYWNoZSgpCit7CisgICAg
dGhpcy5tX2NhY2hlID0ge307Cit9CisKK1Jlc3VsdHNDYWNoZS5wcm90b3R5cGUuX2ZldGNoID0g
ZnVuY3Rpb24oa2V5LCBjYWxsYmFjaykKK3sKKyAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICB2
YXIgdXJsID0ga1Rlc3RSZXN1bHRzU2VydmVyICsgJ3Rlc3RmaWxlP2tleT0nICsga2V5OworICAg
IGJhc2UuanNvbnAodXJsLCBmdW5jdGlvbiAocmVzdWx0c1RyZWUpIHsKKyAgICAgICAgc2VsZi5t
X2NhY2hlW2tleV0gPSByZXN1bHRzVHJlZTsKKyAgICAgICAgY2FsbGJhY2socmVzdWx0c1RyZWUp
OworICAgIH0pOworfTsKKworLy8gV2FybmluZyEgVGhpcyBmdW5jdGlvbiBjYW4gY2FsbCBjYWxs
YmFjayBlaXRoZXIgc3luY2hyb25vdXNseSBvciBhc3luY2hyb25vdXNseS4KKy8vIEZJWE1FOiBD
b25zaWRlciB1c2luZyBzZXRUaW1lb3V0IHRvIG1ha2UgdGhpcyBtZXRob2QgYWx3YXlzIGFzeW5j
aHJvbm91cy4KK1Jlc3VsdHNDYWNoZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24oa2V5LCBjYWxs
YmFjaykKK3sKKyAgICBpZiAoa2V5IGluIHRoaXMubV9jYWNoZSkKKyAgICAgICAgcmV0dXJuIGNh
bGxiYWNrKHRoaXMubV9jYWNoZVtrZXldKTsKKyAgICB0aGlzLl9mZXRjaChrZXksIGNhbGxiYWNr
KTsKK307CisKK3ZhciBnX3Jlc3VsdHNDYWNoZSA9IG5ldyBSZXN1bHRzQ2FjaGUoKTsKKwogZnVu
Y3Rpb24gYW55SXNGYWlsdXJlKHJlc3VsdHNMaXN0KQogewogICAgIHJldHVybiAkLmdyZXAocmVz
dWx0c0xpc3QsIGlzRmFpbHVyZSkubGVuZ3RoID4gMDsKQEAgLTExMCwxNiArMTYwLDEwMyBAQCBy
ZXN1bHRzLnVuZXhwZWN0ZWRGYWlsdXJlc0J5VGVzdCA9IGZ1bmN0CiB7CiAgICAgdmFyIHVuZXhw
ZWN0ZWRGYWlsdXJlcyA9IHt9OwogCi0gICAgJC5lYWNoKHJlc3VsdHNCeUJ1aWxkZXIsIGZ1bmN0
aW9uKGJ1aWxkTmFtZSwgYnVpbGRlclJlc3VsdHMpIHsKKyAgICAkLmVhY2gocmVzdWx0c0J5QnVp
bGRlciwgZnVuY3Rpb24oYnVpbGRlck5hbWUsIGJ1aWxkZXJSZXN1bHRzKSB7CiAgICAgICAgICQu
ZWFjaChidWlsZGVyUmVzdWx0cy51bmV4cGVjdGVkRmFpbHVyZXMoKSwgZnVuY3Rpb24odGVzdE5h
bWUsIHJlc3VsdE5vZGUpIHsKICAgICAgICAgICAgIHVuZXhwZWN0ZWRGYWlsdXJlc1t0ZXN0TmFt
ZV0gPSB1bmV4cGVjdGVkRmFpbHVyZXNbdGVzdE5hbWVdIHx8IHt9OwotICAgICAgICAgICAgdW5l
eHBlY3RlZEZhaWx1cmVzW3Rlc3ROYW1lXVtidWlsZE5hbWVdID0gcmVzdWx0Tm9kZTsKKyAgICAg
ICAgICAgIHVuZXhwZWN0ZWRGYWlsdXJlc1t0ZXN0TmFtZV1bYnVpbGRlck5hbWVdID0gcmVzdWx0
Tm9kZTsKICAgICAgICAgfSk7CiAgICAgfSk7CiAKICAgICByZXR1cm4gdW5leHBlY3RlZEZhaWx1
cmVzOwogfTsKIAorZnVuY3Rpb24gVGVzdEhpc3RvcnlXYWxrZXIoYnVpbGRlck5hbWUsIHRlc3RO
YW1lKQoreworICAgIHRoaXMubV9idWlsZGVyTmFtZSA9IGJ1aWxkZXJOYW1lOworICAgIHRoaXMu
bV90ZXN0TmFtZSA9IHRlc3ROYW1lOworICAgIHRoaXMubV9pbmRleE9mTmV4dEtleVRvRmV0Y2gg
PSAwOworICAgIHRoaXMubV9rZXlMaXN0ID0gW107Cit9CisKK1Rlc3RIaXN0b3J5V2Fsa2VyLnBy
b3RvdHlwZS5pbml0ID0gZnVuY3Rpb24oY2FsbGJhY2spCit7CisgICAgdmFyIHNlbGYgPSB0aGlz
OworCisgICAgYmFzZS5qc29ucChkaXJlY3RvcnlPZlJlc3VsdHNTdW1tYXJ5VVJMKHNlbGYubV9i
dWlsZGVyTmFtZSwga1Jlc3VsdHNOYW1lKSwgZnVuY3Rpb24oa2V5TGlzdCkgeworICAgICAgICAk
LmVhY2goa2V5TGlzdCwgZnVuY3Rpb24oaW5kZXgsIGVsZW1lbnQpIHsKKyAgICAgICAgICAgIHNl
bGYubV9rZXlMaXN0LnB1c2goZWxlbWVudC5rZXkpOworICAgICAgICB9KTsKKyAgICAgICAgY2Fs
bGJhY2soKTsKKyAgICB9KTsKK307CisKK1Rlc3RIaXN0b3J5V2Fsa2VyLnByb3RvdHlwZS5fZmV0
Y2hOZXh0UmVzdWx0Tm9kZSA9IGZ1bmN0aW9uKGNhbGxiYWNrKQoreworICAgIHZhciBzZWxmID0g
dGhpczsKKworICAgIGlmIChzZWxmLm1faW5kZXhPZk5leHRLZXlUb0ZldGNoID49IHNlbGYubV9r
ZXlMaXN0KSB7CisgICAgICAgIGNhbGxiYWNrKDAsIG51bGwpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgdmFyIGtleSA9IHNlbGYubV9rZXlMaXN0W3NlbGYubV9pbmRleE9mTmV4dEtl
eVRvRmV0Y2hdOworICAgICsrdGhpcy5tX2luZGV4T2ZOZXh0S2V5VG9GZXRjaDsKKyAgICBnX3Jl
c3VsdHNDYWNoZS5nZXQoa2V5LCBmdW5jdGlvbihyZXN1bHRzVHJlZSkgeworICAgICAgICB2YXIg
cmVzdWx0Tm9kZSA9IHJlc3VsdHMucmVzdWx0Tm9kZUZvclRlc3QocmVzdWx0c1RyZWUsIHNlbGYu
bV90ZXN0TmFtZSk7CisgICAgICAgIGNhbGxiYWNrKHJlc3VsdHNUcmVlWydyZXZpc2lvbiddLCBy
ZXN1bHROb2RlKTsKKyAgICB9KTsKK307CisKK1Rlc3RIaXN0b3J5V2Fsa2VyLnByb3RvdHlwZS53
YWxrSGlzdG9yeSA9IGZ1bmN0aW9uKGNhbGxiYWNrKQoreworICAgIHZhciBzZWxmID0gdGhpczsK
KyAgICBzZWxmLl9mZXRjaE5leHRSZXN1bHROb2RlKGZ1bmN0aW9uKHJldmlzaW9uLCByZXN1bHRO
b2RlKSB7CisgICAgICAgIHZhciBzaG91bGRDb250aW51ZSA9IGNhbGxiYWNrKHJldmlzaW9uLCBy
ZXN1bHROb2RlKTsKKyAgICAgICAgaWYgKCFzaG91bGRDb250aW51ZSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgc2VsZi53YWxrSGlzdG9yeShjYWxsYmFjayk7CisgICAgfSk7Cit9CisK
K3Jlc3VsdHMucmVncmVzc2lvblJhbmdlRm9yRmFpbHVyZSA9IGZ1bmN0aW9uKGJ1aWxkZXJOYW1l
LCB0ZXN0TmFtZSwgY2FsbGJhY2spCit7CisgICAgdmFyIG9sZGVzdEZhaWxpbmdSZXZpc2lvbiA9
IDA7CisgICAgdmFyIG5ld2VzdFBhc3NpbmdSZXZpc2lvbiA9IDA7CisKKyAgICB2YXIgaGlzdG9y
eVdhbGtlciA9IG5ldyBUZXN0SGlzdG9yeVdhbGtlcihidWlsZGVyTmFtZSwgdGVzdE5hbWUpOwor
ICAgIGhpc3RvcnlXYWxrZXIuaW5pdChmdW5jdGlvbigpIHsKKyAgICAgICAgaGlzdG9yeVdhbGtl
ci53YWxrSGlzdG9yeShmdW5jdGlvbihyZXZpc2lvbiwgcmVzdWx0Tm9kZSkgeworICAgICAgICAg
ICAgaWYgKCFyZXN1bHROb2RlKSB7CisgICAgICAgICAgICAgICAgbmV3ZXN0UGFzc2luZ1Jldmlz
aW9uID0gcmV2aXNpb247CisgICAgICAgICAgICAgICAgY2FsbGJhY2sob2xkZXN0RmFpbGluZ1Jl
dmlzaW9uLCBuZXdlc3RQYXNzaW5nUmV2aXNpb24pOworICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpc1VuZXhwZWN0ZWRGYWlsdXJl
KHJlc3VsdE5vZGUpKSB7CisgICAgICAgICAgICAgICAgb2xkZXN0RmFpbGluZ1JldmlzaW9uID0g
cmV2aXNpb247CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIGlmICghb2xkZXN0RmFpbGluZ1JldmlzaW9uKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgIC8vIFdlIG5lZWQgdG8ga2VlcCBsb29raW5nIGZv
ciBhIGZhaWxpbmcgcmV2aXNpb24uCisgICAgICAgICAgICAgICAgbmV3ZXN0UGFzc2luZ1Jldmlz
aW9uID0gcmV2aXNpb247CisgICAgICAgICAgICAgICAgY2FsbGJhY2sob2xkZXN0RmFpbGluZ1Jl
dmlzaW9uLCBuZXdlc3RQYXNzaW5nUmV2aXNpb24pOworICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfSk7Cit9OworCityZXN1bHRz
LnJlc3VsdE5vZGVGb3JUZXN0ID0gZnVuY3Rpb24ocmVzdWx0c1RyZWUsIHRlc3ROYW1lKQorewor
ICAgIHZhciB0ZXN0TmFtZVBhdGggPSB0ZXN0TmFtZS5zcGxpdCgnLycpOworICAgIHZhciBjdXJy
ZW50Tm9kZSA9IHJlc3VsdHNUcmVlWyd0ZXN0cyddOworICAgICQuZWFjaCh0ZXN0TmFtZVBhdGgs
IGZ1bmN0aW9uKGluZGV4LCBzZWdtZW50TmFtZSkgeworICAgICAgICBpZiAoIWN1cnJlbnROb2Rl
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjdXJyZW50Tm9kZSA9IChzZWdtZW50TmFt
ZSBpbiBjdXJyZW50Tm9kZSkgPyBjdXJyZW50Tm9kZVtzZWdtZW50TmFtZV0gOiBudWxsOworICAg
IH0pOworICAgIHJldHVybiBjdXJyZW50Tm9kZTsKK307CisKIGZ1bmN0aW9uIHJlc3VsdHNEaXJl
Y3RvcnlGb3JCdWlsZGVyKGJ1aWxkZXJOYW1lKQogewogICAgIHJldHVybiBidWlsZGVyTmFtZS5y
ZXBsYWNlKC9bIC4oKV0vZywgJ18nKTsKQEAgLTE4OSwyMyArMzI2LDEwIEBAIHJlc3VsdHMuZmV0
Y2hSZXN1bHRzVVJMcyA9IGZ1bmN0aW9uKGJ1aWwKICAgICB9KTsKIH07CiAKLWZ1bmN0aW9uIHJl
c3VsdHNTdW1tYXJ5VVJMKGJ1aWxkZXJOYW1lLCBuYW1lKQotewotICAgIHJldHVybiBrVGVzdFJl
c3VsdHNTZXJ2ZXIgKyAndGVzdGZpbGUnICsKLSAgICAgICAgICAnP2J1aWxkZXI9JyArIGJ1aWxk
ZXJOYW1lICsKLSAgICAgICAgICAnJm1hc3Rlcj0nICsga01hc3Rlck5hbWUgKwotICAgICAgICAg
ICcmdGVzdHR5cGU9JyArIGtUZXN0VHlwZSArCi0gICAgICAgICAgJyZuYW1lPScgKyBuYW1lOwot
fQotCiByZXN1bHRzLmZldGNoUmVzdWx0c0ZvckJ1aWxkZXIgPSBmdW5jdGlvbihidWlsZGVyTmFt
ZSwgb25zdWNjZXNzKQogewotICAgICQuYWpheCh7Ci0gICAgICAgIHVybDogcmVzdWx0c1N1bW1h
cnlVUkwoYnVpbGRlck5hbWUsIGtSZXN1bHRzTmFtZSksCi0gICAgICAgIGRhdGFUeXBlOiAnanNv
bnAnLAotICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7Ci0gICAgICAgICAgICBvbnN1
Y2Nlc3MobmV3IHJlc3VsdHMuQnVpbGRlclJlc3VsdHMoZGF0YSkpOwotICAgICAgICB9CisgICAg
YmFzZS5qc29ucChyZXN1bHRzU3VtbWFyeVVSTChidWlsZGVyTmFtZSwga1Jlc3VsdHNOYW1lKSwg
ZnVuY3Rpb24ocmVzdWx0c1RyZWUpIHsKKyAgICAgICAgb25zdWNjZXNzKG5ldyByZXN1bHRzLkJ1
aWxkZXJSZXN1bHRzKHJlc3VsdHNUcmVlKSk7CiAgICAgfSk7CiB9OwogCkBAIC0yMTQsOCArMzM4
LDggQEAgcmVzdWx0cy5mZXRjaFJlc3VsdHNCeUJ1aWxkZXIgPSBmdW5jdGlvbgogICAgIHZhciBy
ZXN1bHRzQnlCdWlsZGVyID0ge30KICAgICB2YXIgcmVxdWVzdHNJbkZsaWdodCA9IGJ1aWxkZXJO
YW1lTGlzdC5sZW5ndGg7CiAgICAgJC5lYWNoKGJ1aWxkZXJOYW1lTGlzdCwgZnVuY3Rpb24oaW5k
ZXgsIGJ1aWxkZXJOYW1lKSB7Ci0gICAgICAgIHJlc3VsdHMuZmV0Y2hSZXN1bHRzRm9yQnVpbGRl
cihidWlsZGVyTmFtZSwgZnVuY3Rpb24oYnVpbGRlclJlc3VsdHMpIHsKLSAgICAgICAgICAgIHJl
c3VsdHNCeUJ1aWxkZXJbYnVpbGRlck5hbWVdID0gYnVpbGRlclJlc3VsdHM7CisgICAgICAgIHJl
c3VsdHMuZmV0Y2hSZXN1bHRzRm9yQnVpbGRlcihidWlsZGVyTmFtZSwgZnVuY3Rpb24ocmVzdWx0
c1RyZWUpIHsKKyAgICAgICAgICAgIHJlc3VsdHNCeUJ1aWxkZXJbYnVpbGRlck5hbWVdID0gcmVz
dWx0c1RyZWU7CiAgICAgICAgICAgICAtLXJlcXVlc3RzSW5GbGlnaHQ7CiAgICAgICAgICAgICBp
ZiAoIXJlcXVlc3RzSW5GbGlnaHQpCiAgICAgICAgICAgICAgICAgb25zdWNjZXNzKHJlc3VsdHNC
eUJ1aWxkZXIpOwpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMvZGF0
YS9nYXJkZW5pbmdzZXJ2ZXIvcmVzdWx0c191bml0dGVzdHMuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvU2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMvZGF0YS9nYXJkZW5pbmdzZXJ2ZXIvcmVz
dWx0c191bml0dGVzdHMuanMJKHJldmlzaW9uIDkwNzY2KQorKysgVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS90b29sL3NlcnZlcnMvZGF0YS9nYXJkZW5pbmdzZXJ2ZXIvcmVzdWx0c191bml0dGVzdHMu
anMJKHdvcmtpbmcgY29weSkKQEAgLTkzLDMzICs5MywxNTUgQEAgdGVzdCgicmVzdWx0VHlwZSIs
IDEyLCBmdW5jdGlvbigpIHsKICAgICBlcXVhbHMocmVzdWx0cy5yZXN1bHRUeXBlKCJodHRwOi8v
ZXhhbXBsZS5jb20vZm9vLnh5eiIpLCAidGV4dCIpOwogfSk7CiAKLXRlc3QoImZldGNoUmVzdWx0
c1VSTHMiLCAzLCBmdW5jdGlvbigpIHsKK3Rlc3QoInJlc3VsdE5vZGVGb3JUZXN0IiwgNCwgZnVu
Y3Rpb24oKSB7CisgICAgZGVlcEVxdWFsKHJlc3VsdHMucmVzdWx0Tm9kZUZvclRlc3Qoa0V4YW1w
bGVSZXN1bHRzSlNPTiwgInVzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC5odG1sIiksIHsKKyAgICAg
ICAgImV4cGVjdGVkIjogIlBBU1MiLAorICAgICAgICAiYWN0dWFsIjogIlRFWFQiCisgICAgfSk7
CisgICAgZXF1YWxzKHJlc3VsdHMucmVzdWx0Tm9kZUZvclRlc3Qoa0V4YW1wbGVSZXN1bHRzSlNP
TiwgImZvby5odG1sIiksIG51bGwpOworICAgIGVxdWFscyhyZXN1bHRzLnJlc3VsdE5vZGVGb3JU
ZXN0KGtFeGFtcGxlUmVzdWx0c0pTT04sICJ1c2Vyc2NyaXB0cy9mb28uaHRtbCIpLCBudWxsKTsK
KyAgICBlcXVhbHMocmVzdWx0cy5yZXN1bHROb2RlRm9yVGVzdChrRXhhbXBsZVJlc3VsdHNKU09O
LCAidXNlcnNjcmlwdHMvZm9vL2Jhci5odG1sIiksIG51bGwpOworfSk7CisKK2Z1bmN0aW9uIE5l
dHdvcmtTaW11bGF0b3IoKQoreworICAgIHRoaXMubV9wZW5kaW5nQ2FsbGJhY2tzID0gW107Cit9
OworCitOZXR3b3JrU2ltdWxhdG9yLnByb3RvdHlwZS5zY2hlZHVsZUNhbGxiYWNrID0gZnVuY3Rp
b24oY2FsbGJhY2spCit7CisgICAgdGhpcy5tX3BlbmRpbmdDYWxsYmFja3MucHVzaChjYWxsYmFj
ayk7Cit9CisKK05ldHdvcmtTaW11bGF0b3IucHJvdG90eXBlLnJ1blRlc3QgPSBmdW5jdGlvbih0
ZXN0Q2FzZSkKK3sKKyAgICB2YXIgc2VsZiA9IHRoaXM7CiAgICAgdmFyIHJlYWxCYXNlID0gd2lu
ZG93LmJhc2U7CiAKLSAgICB2YXIgcGVuZGluZ0NhbGxiYWNrcyA9IHt9OwogICAgIHdpbmRvdy5i
YXNlID0ge307Ci0gICAgYmFzZS5wcm9iZSA9IGZ1bmN0aW9uKHVybCwgb3B0aW9ucykgewotICAg
ICAgICBwZW5kaW5nQ2FsbGJhY2tzW3VybF0gPSBvcHRpb25zOwotICAgIH07CiAgICAgYmFzZS5l
bmRzV2l0aCA9IHJlYWxCYXNlLmVuZHNXaXRoOwogICAgIGJhc2UudHJpbUV4dGVuc2lvbiA9IHJl
YWxCYXNlLnRyaW1FeHRlbnNpb247CisgICAgaWYgKHNlbGYucHJvYmVIb29rKQorICAgICAgICBi
YXNlLnByb2JlID0gc2VsZi5wcm9iZUhvb2s7CisgICAgaWYgKHNlbGYuanNvbnBIb29rKQorICAg
ICAgICBiYXNlLmpzb25wID0gc2VsZi5qc29ucEhvb2s7CisKKyAgICB0ZXN0Q2FzZSgpOworCisg
ICAgd2hpbGUgKHRoaXMubV9wZW5kaW5nQ2FsbGJhY2tzLmxlbmd0aCAhPSAwKSB7CisgICAgICAg
IHZhciBjYWxsYmFjayA9IHRoaXMubV9wZW5kaW5nQ2FsbGJhY2tzLnNoaWZ0KCk7CisgICAgICAg
IGNhbGxiYWNrKCk7CisgICAgfQorCisgICAgd2luZG93LmJhc2UgPSByZWFsQmFzZTsKKyAgICBl
cXVhbCh3aW5kb3cuYmFzZSwgcmVhbEJhc2UsICJGYWlsZWQgdG8gcmVzdG9yZSByZWFsIGJhc2Uh
Iik7Cit9CisKK3Rlc3QoInJlZ3Jlc3Npb25SYW5nZUZvckZhaWx1cmUiLCAzLCBmdW5jdGlvbigp
IHsKKyAgICBzaW11bGF0b3IgPSBuZXcgTmV0d29ya1NpbXVsYXRvcigpOworCisgICAgdmFyIGtl
eU1hcCA9IHsKKyAgICAgICAgImFneDBaWE4wTFhKbGMzVnNkSE55RUFzU0NGUmxjM1JHYVd4bEdM
bmNVQXciOiB7CisgICAgICAgICAgICAidGVzdHMiOiB7CisgICAgICAgICAgICAgICAgInVzZXJz
Y3JpcHRzIjogeworICAgICAgICAgICAgICAgICAgICAiYW5vdGhlci10ZXN0Lmh0bWwiOiB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQiOiAiUEFTUyIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAiYWN0dWFsIjogIlRFWFQiCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9LAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJyZXZpc2lvbiI6ICI5
MDQzMCIKKyAgICAgICAgfSwKKyAgICAgICAgImFneDBaWE4wTFhKbGMzVnNkSE55RUFzU0NGUmxj
M1JHYVd4bEdOZlRVQXciOnsKKyAgICAgICAgICAgICJ0ZXN0cyI6IHsKKyAgICAgICAgICAgICAg
ICAidXNlcnNjcmlwdHMiOiB7CisgICAgICAgICAgICAgICAgICAgICJ1c2VyLXNjcmlwdC12aWRl
by1kb2N1bWVudC5odG1sIjogeworICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIjog
IkZBSUwiLAorICAgICAgICAgICAgICAgICAgICAgICAgImFjdHVhbCI6ICJURVhUIgorICAgICAg
ICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAiYW5vdGhlci10ZXN0Lmh0bWwi
OiB7CisgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQiOiAiUEFTUyIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAiYWN0dWFsIjogIlRFWFQiCisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJyZXZpc2lv
biI6ICI5MDQyOSIKKyAgICAgICAgfSwKKyAgICAgICAgImFneDBaWE4wTFhKbGMzVnNkSE55RUFz
U0NGUmxjM1JHYVd4bEdKV0NVUXciOnsKKyAgICAgICAgICAgICJ0ZXN0cyI6IHsKKyAgICAgICAg
ICAgICAgICAidXNlcnNjcmlwdHMiOiB7CisgICAgICAgICAgICAgICAgICAgICJhbm90aGVyLXRl
c3QuaHRtbCI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCI6ICJQQVNTIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICJhY3R1YWwiOiAiVEVYVCIKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICB9LAorICAgICAgICAgICAg
InJldmlzaW9uIjogIjkwNDI2IgorICAgICAgICB9LAorICAgICAgICAiYWd4MFpYTjBMWEpsYzNW
c2RITnlFQXNTQ0ZSbGMzUkdhV3hsR0tiTFVBdyI6eworICAgICAgICAgICAgInRlc3RzIjogewor
ICAgICAgICAgICAgICAgICJ1c2Vyc2NyaXB0cyI6IHsKKyAgICAgICAgICAgICAgICAgICAgInVz
ZXItc2NyaXB0LXZpZGVvLWRvY3VtZW50Lmh0bWwiOiB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAiZXhwZWN0ZWQiOiAiRkFJTCIsCisgICAgICAgICAgICAgICAgICAgICAgICAiYWN0dWFsIjog
IlRFWFQiCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgfSwKKyAgICAg
ICAgICAgIH0sCisgICAgICAgICAgICAicmV2aXNpb24iOiAiOTA0MjQiCisgICAgICAgIH0KKyAg
ICB9OwogCi0gICAgcmVzdWx0cy5mZXRjaFJlc3VsdHNVUkxzKCJNb2NrIEJ1aWxkZXIiLCAidXNl
cnNjcmlwdHMvYW5vdGhlci10ZXN0Lmh0bWwiLCBmdW5jdGlvbihyZXN1bHRVUkxzKSB7Ci0gICAg
ICAgIGRlZXBFcXVhbChyZXN1bHRVUkxzLCBbCi0gICAgICAgICAgICAiaHR0cDovL2J1aWxkLmNo
cm9taXVtLm9yZy9mL2Nocm9taXVtL2xheW91dF90ZXN0X3Jlc3VsdHMvTW9ja19CdWlsZGVyL3Jl
c3VsdHMvbGF5b3V0LXRlc3QtcmVzdWx0cy91c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QtZXhwZWN0
ZWQudHh0IiwKLSAgICAgICAgICAgICJodHRwOi8vYnVpbGQuY2hyb21pdW0ub3JnL2YvY2hyb21p
dW0vbGF5b3V0X3Rlc3RfcmVzdWx0cy9Nb2NrX0J1aWxkZXIvcmVzdWx0cy9sYXlvdXQtdGVzdC1y
ZXN1bHRzL3VzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC1hY3R1YWwudHh0IiwKLSAgICAgICAgICAg
ICJodHRwOi8vYnVpbGQuY2hyb21pdW0ub3JnL2YvY2hyb21pdW0vbGF5b3V0X3Rlc3RfcmVzdWx0
cy9Nb2NrX0J1aWxkZXIvcmVzdWx0cy9sYXlvdXQtdGVzdC1yZXN1bHRzL3VzZXJzY3JpcHRzL2Fu
b3RoZXItdGVzdC1kaWZmLnR4dCIsCi0gICAgICAgIF0pOworICAgIHNpbXVsYXRvci5qc29ucEhv
b2sgPSBmdW5jdGlvbih1cmwsIGNhbGxiYWNrKSB7CisgICAgICAgIHNpbXVsYXRvci5zY2hlZHVs
ZUNhbGxiYWNrKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgaWYgKC9kaXI9MS8udGVzdCh1cmwp
KSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2soWworICAgICAgICAgICAgICAgICAgICB7ICJr
ZXkiOiAiYWd4MFpYTjBMWEpsYzNWc2RITnlFQXNTQ0ZSbGMzUkdhV3hsR0xuY1VBdyIgfSwKKyAg
ICAgICAgICAgICAgICAgICAgeyAia2V5IjogImFneDBaWE4wTFhKbGMzVnNkSE55RUFzU0NGUmxj
M1JHYVd4bEdOZlRVQXciIH0sCisgICAgICAgICAgICAgICAgICAgIHsgImtleSI6ICJhZ3gwWlhO
MExYSmxjM1ZzZEhOeUVBc1NDRlJsYzNSR2FXeGxHSldDVVF3IiB9LAorICAgICAgICAgICAgICAg
ICAgICB7ICJrZXkiOiAiYWd4MFpYTjBMWEpsYzNWc2RITnlFQXNTQ0ZSbGMzUkdhV3hsR0tiTFVB
dyIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAia2V5IjogImFneDBaWE4wTFhKbGMzVnNkSE55
RUFzU0NGUmxjM1JHYVd4bEdPajVVQXciIH0sCisgICAgICAgICAgICAgICAgICAgIHsgImtleSI6
ICJhZ3gwWlhOMExYSmxjM1ZzZEhOeUVBc1NDRlJsYzNSR2FXeGxHUC1BVVF3IiB9LAorICAgICAg
ICAgICAgICAgICAgICB7ICJrZXkiOiAiYWd4MFpYTjBMWEpsYzNWc2RITnlFQXNTQ0ZSbGMzUkdh
V3hsR1BMM1VBdyIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAia2V5IjogImFneDBaWE4wTFhK
bGMzVnNkSE55RUFzU0NGUmxjM1JHYVd4bEdOSEpRQXciIH0sCisgICAgICAgICAgICAgICAgXSk7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZhciBrZXkgPSB1cmwubWF0
Y2goL2tleT0oW14mXSspLylbMV07CisgICAgICAgICAgICAgICAgY2FsbGJhY2soa2V5TWFwW2tl
eV0pOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9OworICAgIHNpbXVsYXRvci5y
dW5UZXN0KGZ1bmN0aW9uKCkgeworICAgICAgICByZXN1bHRzLnJlZ3Jlc3Npb25SYW5nZUZvckZh
aWx1cmUoIk1vY2sgQnVpbGRlciIsICJ1c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QuaHRtbCIsIGZ1
bmN0aW9uKG9sZGVzdEZhaWxpbmdSZXZpc2lvbiwgbmV3ZXN0UGFzc2luZ1JldmlzaW9uKSB7Cisg
ICAgICAgICAgICBlcXVhbHMob2xkZXN0RmFpbGluZ1JldmlzaW9uLCAiOTA0MjYiKTsKKyAgICAg
ICAgICAgIGVxdWFscyhuZXdlc3RQYXNzaW5nUmV2aXNpb24sICI5MDQyNCIpOworICAgICAgICB9
KTsKICAgICB9KTsKK30pOworCit0ZXN0KCJmZXRjaFJlc3VsdHNVUkxzIiwgMywgZnVuY3Rpb24o
KSB7CisgICAgdmFyIHNpbXVsYXRvciA9IG5ldyBOZXR3b3JrU2ltdWxhdG9yKCk7CiAKICAgICB2
YXIgcHJvYmVkVVJMcyA9IFtdOwotICAgIGZvciAodmFyIHVybCBpbiBwZW5kaW5nQ2FsbGJhY2tz
KSB7Ci0gICAgICAgIHByb2JlZFVSTHMucHVzaCh1cmwpOwotICAgICAgICBpZiAocmVhbEJhc2Uu
ZW5kc1dpdGgodXJsLCAnLnR4dCcpKQotICAgICAgICAgICAgcGVuZGluZ0NhbGxiYWNrc1t1cmxd
LnN1Y2Nlc3MuY2FsbCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwZW5kaW5nQ2FsbGJh
Y2tzW3VybF0uZXJyb3IuY2FsbCgpOwotICAgIH0KKyAgICBzaW11bGF0b3IucHJvYmVIb29rID0g
ZnVuY3Rpb24odXJsLCBvcHRpb25zKQorICAgIHsKKyAgICAgICAgc2ltdWxhdG9yLnNjaGVkdWxl
Q2FsbGJhY2soZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBwcm9iZWRVUkxzLnB1c2godXJsKTsK
KyAgICAgICAgICAgIGlmIChiYXNlLmVuZHNXaXRoKHVybCwgJy50eHQnKSkKKyAgICAgICAgICAg
ICAgICBvcHRpb25zLnN1Y2Nlc3MuY2FsbCgpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIG9wdGlvbnMuZXJyb3IuY2FsbCgpOworICAgICAgICB9KTsKKyAgICB9OworCisgICAg
c2ltdWxhdG9yLnJ1blRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHJlc3VsdHMuZmV0Y2hSZXN1
bHRzVVJMcygiTW9jayBCdWlsZGVyIiwgInVzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC5odG1sIiwg
ZnVuY3Rpb24ocmVzdWx0VVJMcykgeworICAgICAgICAgICAgZGVlcEVxdWFsKHJlc3VsdFVSTHMs
IFsKKyAgICAgICAgICAgICAgICAiaHR0cDovL2J1aWxkLmNocm9taXVtLm9yZy9mL2Nocm9taXVt
L2xheW91dF90ZXN0X3Jlc3VsdHMvTW9ja19CdWlsZGVyL3Jlc3VsdHMvbGF5b3V0LXRlc3QtcmVz
dWx0cy91c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QtZXhwZWN0ZWQudHh0IiwKKyAgICAgICAgICAg
ICAgICAiaHR0cDovL2J1aWxkLmNocm9taXVtLm9yZy9mL2Nocm9taXVtL2xheW91dF90ZXN0X3Jl
c3VsdHMvTW9ja19CdWlsZGVyL3Jlc3VsdHMvbGF5b3V0LXRlc3QtcmVzdWx0cy91c2Vyc2NyaXB0
cy9hbm90aGVyLXRlc3QtYWN0dWFsLnR4dCIsCisgICAgICAgICAgICAgICAgImh0dHA6Ly9idWls
ZC5jaHJvbWl1bS5vcmcvZi9jaHJvbWl1bS9sYXlvdXRfdGVzdF9yZXN1bHRzL01vY2tfQnVpbGRl
ci9yZXN1bHRzL2xheW91dC10ZXN0LXJlc3VsdHMvdXNlcnNjcmlwdHMvYW5vdGhlci10ZXN0LWRp
ZmYudHh0IiwKKyAgICAgICAgICAgIF0pOworICAgICAgICB9KTsKKyAgICB9KTsKIAogICAgIGRl
ZXBFcXVhbChwcm9iZWRVUkxzLCBbCiAgICAgICAgICJodHRwOi8vYnVpbGQuY2hyb21pdW0ub3Jn
L2YvY2hyb21pdW0vbGF5b3V0X3Rlc3RfcmVzdWx0cy9Nb2NrX0J1aWxkZXIvcmVzdWx0cy9sYXlv
dXQtdGVzdC1yZXN1bHRzL3VzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC1leHBlY3RlZC5wbmciLApA
QCAtMTI5LDcgKzI1MSw0IEBAIHRlc3QoImZldGNoUmVzdWx0c1VSTHMiLCAzLCBmdW5jdGlvbigp
IHsKICAgICAgICAgImh0dHA6Ly9idWlsZC5jaHJvbWl1bS5vcmcvZi9jaHJvbWl1bS9sYXlvdXRf
dGVzdF9yZXN1bHRzL01vY2tfQnVpbGRlci9yZXN1bHRzL2xheW91dC10ZXN0LXJlc3VsdHMvdXNl
cnNjcmlwdHMvYW5vdGhlci10ZXN0LWFjdHVhbC50eHQiLAogICAgICAgICAiaHR0cDovL2J1aWxk
LmNocm9taXVtLm9yZy9mL2Nocm9taXVtL2xheW91dF90ZXN0X3Jlc3VsdHMvTW9ja19CdWlsZGVy
L3Jlc3VsdHMvbGF5b3V0LXRlc3QtcmVzdWx0cy91c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QtZGlm
Zi50eHQiLAogICAgIF0pOwotCi0gICAgd2luZG93LmJhc2UgPSByZWFsQmFzZTsKLSAgICBlcXVh
bCh3aW5kb3cuYmFzZSwgcmVhbEJhc2UsICJGYWlsZWQgdG8gcmVzdG9yZSByZWFsIGJhc2UhIik7
CiB9KTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100337</attachid>
            <date>2011-07-11 11:46:34 -0700</date>
            <delta_ts>2011-07-11 11:50:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-64189-20110711114633.patch</filename>
            <type>text/plain</type>
            <size>16670</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDkwNzY2KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjIgQEAKKzIwMTEtMDctMTEgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKwor
ICAgICAgICBnYXJkZW4tby1tYXRpYyBzaG91bGQgYmUgYWJsZSB0byBkZXRlcm1pbmUgd2hpY2gg
cmV2aXNpb25zIGNhdXNlZCBhIGdpdmVuIGZhaWx1cmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0MTg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgV2Fsa2luZyB0aGUgZmFpbHVyZSBoaXN0b3J5IGxvb2tp
bmcgZm9yIGZhaWx1cmVzIHR1cm5zIG91dCB0byBiZQorICAgICAgICBzbGlnaHRseSB0cmlja3kg
YmVjYXVzZSB0aGUgbmV0d29yayByZXF1ZXN0cyBhcmUgYXN5bmNocm9ub3VzLgorICAgICAgICBD
dXJyZW50bHkgd2UgZG8gYWxsIHRoZSBmZXRjaGVzIHNlcmlhbGx5IGFuZCBvdXIgY2FjaGUgaXMg
dW5ib3VuZGVkLgorICAgICAgICBXZSdsbCBwcm9iYWJseSBvcHRpbWl6ZSBib3RoIHRob3NlIHBh
cmFtZXRlcnMgZXZlbnR1YWxseS4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gZ2VuZXJhbGl6
ZXMgc29tZSBmdW5jdGlvbmFsaXR5IGluIHRoZSB1bml0IHRlc3RpbmcKKyAgICAgICAgZnJhbWV3
b3JrIHRvIG1ha2UgdGVzdGluZyB0aGlzIHNvcnQgb2YgY29kZSBlYXNpZXIuCisKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2VydmVycy9kYXRhL2dhcmRlbmluZ3NlcnZlci9iYXNl
LmpzOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL2RhdGEvZ2FyZGVu
aW5nc2VydmVyL3Jlc3VsdHMuanM6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL3Nl
cnZlcnMvZGF0YS9nYXJkZW5pbmdzZXJ2ZXIvcmVzdWx0c191bml0dGVzdHMuanM6CisKIDIwMTEt
MDctMTEgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBnYXJkZW4t
by1tYXRpYyBzaG91bGQgYmUgYWJsZSB0byByb2xsIG91dCBwYXRjaGVzCkluZGV4OiBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2VydmVycy9kYXRhL2dhcmRlbmluZ3NlcnZlci9iYXNlLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL2RhdGEv
Z2FyZGVuaW5nc2VydmVyL2Jhc2UuanMJKHJldmlzaW9uIDkwNzY2KQorKysgVG9vbHMvU2NyaXB0
cy93ZWJraXRweS90b29sL3NlcnZlcnMvZGF0YS9nYXJkZW5pbmdzZXJ2ZXIvYmFzZS5qcwkod29y
a2luZyBjb3B5KQpAQCAtNjQsNCArNjQsMTUgQEAgYmFzZS5wcm9iZSA9IGZ1bmN0aW9uKHVybCwg
b3B0aW9ucykKICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHNjcmlwdEVsZW1lbnQpOwog
fTsKIAorLy8galF1ZXJ5IG1ha2VzIGpzb25wIHJlcXVlc3RzIHNvbWV3aGF0IHVnbHkgKHdoaWNo
IGlzIGZhaXIgZ2l2ZW4gdGhhdCB0aGV5J3JlCisvLyB0ZXJyaWJsZSBmb3Igc2VjdXJpdHkpLiBX
ZSB1c2UgdGhpcyB3cmFwcGVyIHRvIG1ha2Ugb3VyIGxpdmVzIHNsaWdodGx5IGVhc2llci4KK2Jh
c2UuanNvbnAgPSBmdW5jdGlvbih1cmwsIG9uc3VjY2VzcykKK3sKKyAgICAkLmFqYXgoeworICAg
ICAgICB1cmw6IHVybCwKKyAgICAgICAgZGF0YVR5cGU6ICdqc29ucCcsCisgICAgICAgIHN1Y2Nl
c3M6IG9uc3VjY2VzcworICAgIH0pOworfTsKKwogfSkoKTsKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvdG9vbC9zZXJ2ZXJzL2RhdGEvZ2FyZGVuaW5nc2VydmVyL3Jlc3VsdHMuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMvZGF0YS9nYXJk
ZW5pbmdzZXJ2ZXIvcmVzdWx0cy5qcwkocmV2aXNpb24gOTA3NjYpCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3Rvb2wvc2VydmVycy9kYXRhL2dhcmRlbmluZ3NlcnZlci9yZXN1bHRzLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0zLDYgKzMsNyBAQCB2YXIgcmVzdWx0cyA9IHJlc3VsdHMgfHwge307
CiAoZnVuY3Rpb24oKSB7CiAKIHZhciBrVGVzdFJlc3VsdHNTZXJ2ZXIgPSAnaHR0cDovL3Rlc3Qt
cmVzdWx0cy5hcHBzcG90LmNvbS8nOwordmFyIGtUZXN0UmVzdWx0c1F1ZXJ5ID0ga1Rlc3RSZXN1
bHRzU2VydmVyICsgJ3Rlc3RmaWxlPycKIHZhciBrVGVzdFR5cGUgPSAnbGF5b3V0LXRlc3RzJzsK
IHZhciBrUmVzdWx0c05hbWUgPSAnZnVsbF9yZXN1bHRzLmpzb24nOwogdmFyIGtNYXN0ZXJOYW1l
ID0gJ0Nocm9taXVtV2Via2l0JzsKQEAgLTU3LDYgKzU4LDU3IEBAIGZ1bmN0aW9uIGlzU3VjY2Vz
cyhyZXN1bHQpCiAgICAgcmV0dXJuIHJlc3VsdCA9PT0gUEFTUzsKIH0KIAorZnVuY3Rpb24gcmVz
dWx0c1BhcmFtZXRlcnMoYnVpbGRlck5hbWUsIHRlc3ROYW1lKQoreworICAgIHJldHVybiB7Cisg
ICAgICAgIGJ1aWxkZXI6IGJ1aWxkZXJOYW1lLAorICAgICAgICBtYXN0ZXI6IGtNYXN0ZXJOYW1l
LAorICAgICAgICB0ZXN0dHlwZToga1Rlc3RUeXBlLAorICAgICAgICBuYW1lOiBuYW1lLAorICAg
IH07Cit9CisKK2Z1bmN0aW9uIHJlc3VsdHNTdW1tYXJ5VVJMKGJ1aWxkZXJOYW1lLCB0ZXN0TmFt
ZSkKK3sKKyAgICByZXR1cm4ga1Rlc3RSZXN1bHRzUXVlcnkgKyAkLnBhcmFtKHJlc3VsdHNQYXJh
bWV0ZXJzKGJ1aWxkZXJOYW1lLCB0ZXN0TmFtZSkpOworfQorCitmdW5jdGlvbiBkaXJlY3RvcnlP
ZlJlc3VsdHNTdW1tYXJ5VVJMKGJ1aWxkZXJOYW1lLCB0ZXN0TmFtZSkKK3sKKyAgICB2YXIgcGFy
YW1ldGVycyA9IHJlc3VsdHNQYXJhbWV0ZXJzKGJ1aWxkZXJOYW1lLCB0ZXN0TmFtZSk7CisgICAg
cGFyYW1ldGVyc1snZGlyJ10gPSAxOworICAgIHJldHVybiBrVGVzdFJlc3VsdHNRdWVyeSArICQu
cGFyYW0ocGFyYW1ldGVycyk7Cit9CisKK2Z1bmN0aW9uIFJlc3VsdHNDYWNoZSgpCit7CisgICAg
dGhpcy5fY2FjaGUgPSB7fTsKK30KKworUmVzdWx0c0NhY2hlLnByb3RvdHlwZS5fZmV0Y2ggPSBm
dW5jdGlvbihrZXksIGNhbGxiYWNrKQoreworICAgIHZhciBzZWxmID0gdGhpczsKKworICAgIHZh
ciB1cmwgPSBrVGVzdFJlc3VsdHNTZXJ2ZXIgKyAndGVzdGZpbGU/a2V5PScgKyBrZXk7CisgICAg
YmFzZS5qc29ucCh1cmwsIGZ1bmN0aW9uIChyZXN1bHRzVHJlZSkgeworICAgICAgICBzZWxmLl9j
YWNoZVtrZXldID0gcmVzdWx0c1RyZWU7CisgICAgICAgIGNhbGxiYWNrKHJlc3VsdHNUcmVlKTsK
KyAgICB9KTsKK307CisKKy8vIFdhcm5pbmchIFRoaXMgZnVuY3Rpb24gY2FuIGNhbGwgY2FsbGJh
Y2sgZWl0aGVyIHN5bmNocm9ub3VzbHkgb3IgYXN5bmNocm9ub3VzbHkuCisvLyBGSVhNRTogQ29u
c2lkZXIgdXNpbmcgc2V0VGltZW91dCB0byBtYWtlIHRoaXMgbWV0aG9kIGFsd2F5cyBhc3luY2hy
b25vdXMuCitSZXN1bHRzQ2FjaGUucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKGtleSwgY2FsbGJh
Y2spCit7CisgICAgaWYgKGtleSBpbiB0aGlzLl9jYWNoZSkgeworICAgICAgICBjYWxsYmFjayh0
aGlzLl9jYWNoZVtrZXldKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB0aGlzLl9mZXRj
aChrZXksIGNhbGxiYWNrKTsKK307CisKK3ZhciBnX3Jlc3VsdHNDYWNoZSA9IG5ldyBSZXN1bHRz
Q2FjaGUoKTsKKwogZnVuY3Rpb24gYW55SXNGYWlsdXJlKHJlc3VsdHNMaXN0KQogewogICAgIHJl
dHVybiAkLmdyZXAocmVzdWx0c0xpc3QsIGlzRmFpbHVyZSkubGVuZ3RoID4gMDsKQEAgLTk4LDI4
ICsxNTAsMTEyIEBAIGZ1bmN0aW9uIGlzUmVzdWx0Tm9kZShub2RlKQogCiByZXN1bHRzLkJ1aWxk
ZXJSZXN1bHRzID0gZnVuY3Rpb24ocmVzdWx0c0pTT04pCiB7Ci0gICAgdGhpcy5tX3Jlc3VsdHNK
U09OID0gcmVzdWx0c0pTT047CisgICAgdGhpcy5fcmVzdWx0c0pTT04gPSByZXN1bHRzSlNPTjsK
IH07CiAKIHJlc3VsdHMuQnVpbGRlclJlc3VsdHMucHJvdG90eXBlLnVuZXhwZWN0ZWRGYWlsdXJl
cyA9IGZ1bmN0aW9uKCkKIHsKLSAgICByZXR1cm4gYmFzZS5maWx0ZXJUcmVlKHRoaXMubV9yZXN1
bHRzSlNPTi50ZXN0cywgaXNSZXN1bHROb2RlLCBpc1VuZXhwZWN0ZWRGYWlsdXJlKTsKKyAgICBy
ZXR1cm4gYmFzZS5maWx0ZXJUcmVlKHRoaXMuX3Jlc3VsdHNKU09OLnRlc3RzLCBpc1Jlc3VsdE5v
ZGUsIGlzVW5leHBlY3RlZEZhaWx1cmUpOwogfTsKIAogcmVzdWx0cy51bmV4cGVjdGVkRmFpbHVy
ZXNCeVRlc3QgPSBmdW5jdGlvbihyZXN1bHRzQnlCdWlsZGVyKQogewogICAgIHZhciB1bmV4cGVj
dGVkRmFpbHVyZXMgPSB7fTsKIAotICAgICQuZWFjaChyZXN1bHRzQnlCdWlsZGVyLCBmdW5jdGlv
bihidWlsZE5hbWUsIGJ1aWxkZXJSZXN1bHRzKSB7CisgICAgJC5lYWNoKHJlc3VsdHNCeUJ1aWxk
ZXIsIGZ1bmN0aW9uKGJ1aWxkZXJOYW1lLCBidWlsZGVyUmVzdWx0cykgewogICAgICAgICAkLmVh
Y2goYnVpbGRlclJlc3VsdHMudW5leHBlY3RlZEZhaWx1cmVzKCksIGZ1bmN0aW9uKHRlc3ROYW1l
LCByZXN1bHROb2RlKSB7CiAgICAgICAgICAgICB1bmV4cGVjdGVkRmFpbHVyZXNbdGVzdE5hbWVd
ID0gdW5leHBlY3RlZEZhaWx1cmVzW3Rlc3ROYW1lXSB8fCB7fTsKLSAgICAgICAgICAgIHVuZXhw
ZWN0ZWRGYWlsdXJlc1t0ZXN0TmFtZV1bYnVpbGROYW1lXSA9IHJlc3VsdE5vZGU7CisgICAgICAg
ICAgICB1bmV4cGVjdGVkRmFpbHVyZXNbdGVzdE5hbWVdW2J1aWxkZXJOYW1lXSA9IHJlc3VsdE5v
ZGU7CiAgICAgICAgIH0pOwogICAgIH0pOwogCiAgICAgcmV0dXJuIHVuZXhwZWN0ZWRGYWlsdXJl
czsKIH07CiAKK2Z1bmN0aW9uIFRlc3RIaXN0b3J5V2Fsa2VyKGJ1aWxkZXJOYW1lLCB0ZXN0TmFt
ZSkKK3sKKyAgICB0aGlzLl9idWlsZGVyTmFtZSA9IGJ1aWxkZXJOYW1lOworICAgIHRoaXMuX3Rl
c3ROYW1lID0gdGVzdE5hbWU7CisgICAgdGhpcy5faW5kZXhPZk5leHRLZXlUb0ZldGNoID0gMDsK
KyAgICB0aGlzLl9rZXlMaXN0ID0gW107Cit9CisKK1Rlc3RIaXN0b3J5V2Fsa2VyLnByb3RvdHlw
ZS5pbml0ID0gZnVuY3Rpb24oY2FsbGJhY2spCit7CisgICAgdmFyIHNlbGYgPSB0aGlzOworCisg
ICAgYmFzZS5qc29ucChkaXJlY3RvcnlPZlJlc3VsdHNTdW1tYXJ5VVJMKHNlbGYuX2J1aWxkZXJO
YW1lLCBrUmVzdWx0c05hbWUpLCBmdW5jdGlvbihrZXlMaXN0KSB7CisgICAgICAgIHNlbGYuX2tl
eUxpc3QgPSBrZXlMaXN0Lm1hcChmdW5jdGlvbiAoZWxlbWVudCkgeyByZXR1cm4gZWxlbWVudC5r
ZXk7IH0pOworICAgICAgICBjYWxsYmFjaygpOworICAgIH0pOworfTsKKworVGVzdEhpc3RvcnlX
YWxrZXIucHJvdG90eXBlLl9mZXRjaE5leHRSZXN1bHROb2RlID0gZnVuY3Rpb24oY2FsbGJhY2sp
Cit7CisgICAgdmFyIHNlbGYgPSB0aGlzOworCisgICAgaWYgKHNlbGYuX2luZGV4T2ZOZXh0S2V5
VG9GZXRjaCA+PSBzZWxmLl9rZXlMaXN0KSB7CisgICAgICAgIGNhbGxiYWNrKDAsIG51bGwpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdmFyIGtleSA9IHNlbGYuX2tleUxpc3Rbc2Vs
Zi5faW5kZXhPZk5leHRLZXlUb0ZldGNoXTsKKyAgICArK3RoaXMuX2luZGV4T2ZOZXh0S2V5VG9G
ZXRjaDsKKyAgICBnX3Jlc3VsdHNDYWNoZS5nZXQoa2V5LCBmdW5jdGlvbihyZXN1bHRzVHJlZSkg
eworICAgICAgICB2YXIgcmVzdWx0Tm9kZSA9IHJlc3VsdHMucmVzdWx0Tm9kZUZvclRlc3QocmVz
dWx0c1RyZWUsIHNlbGYuX3Rlc3ROYW1lKTsKKyAgICAgICAgY2FsbGJhY2socmVzdWx0c1RyZWVb
J3JldmlzaW9uJ10sIHJlc3VsdE5vZGUpOworICAgIH0pOworfTsKKworVGVzdEhpc3RvcnlXYWxr
ZXIucHJvdG90eXBlLndhbGtIaXN0b3J5ID0gZnVuY3Rpb24oY2FsbGJhY2spCit7CisgICAgdmFy
IHNlbGYgPSB0aGlzOworICAgIHNlbGYuX2ZldGNoTmV4dFJlc3VsdE5vZGUoZnVuY3Rpb24ocmV2
aXNpb24sIHJlc3VsdE5vZGUpIHsKKyAgICAgICAgdmFyIHNob3VsZENvbnRpbnVlID0gY2FsbGJh
Y2socmV2aXNpb24sIHJlc3VsdE5vZGUpOworICAgICAgICBpZiAoIXNob3VsZENvbnRpbnVlKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBzZWxmLndhbGtIaXN0b3J5KGNhbGxiYWNrKTsK
KyAgICB9KTsKK30KKworcmVzdWx0cy5yZWdyZXNzaW9uUmFuZ2VGb3JGYWlsdXJlID0gZnVuY3Rp
b24oYnVpbGRlck5hbWUsIHRlc3ROYW1lLCBjYWxsYmFjaykKK3sKKyAgICB2YXIgb2xkZXN0RmFp
bGluZ1JldmlzaW9uID0gMDsKKyAgICB2YXIgbmV3ZXN0UGFzc2luZ1JldmlzaW9uID0gMDsKKwor
ICAgIHZhciBoaXN0b3J5V2Fsa2VyID0gbmV3IFRlc3RIaXN0b3J5V2Fsa2VyKGJ1aWxkZXJOYW1l
LCB0ZXN0TmFtZSk7CisgICAgaGlzdG9yeVdhbGtlci5pbml0KGZ1bmN0aW9uKCkgeworICAgICAg
ICBoaXN0b3J5V2Fsa2VyLndhbGtIaXN0b3J5KGZ1bmN0aW9uKHJldmlzaW9uLCByZXN1bHROb2Rl
KSB7CisgICAgICAgICAgICBpZiAoIXJlc3VsdE5vZGUpIHsKKyAgICAgICAgICAgICAgICBuZXdl
c3RQYXNzaW5nUmV2aXNpb24gPSByZXZpc2lvbjsKKyAgICAgICAgICAgICAgICBjYWxsYmFjayhv
bGRlc3RGYWlsaW5nUmV2aXNpb24sIG5ld2VzdFBhc3NpbmdSZXZpc2lvbik7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGlzVW5l
eHBlY3RlZEZhaWx1cmUocmVzdWx0Tm9kZSkpIHsKKyAgICAgICAgICAgICAgICBvbGRlc3RGYWls
aW5nUmV2aXNpb24gPSByZXZpc2lvbjsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghb2xkZXN0RmFpbGluZ1JldmlzaW9uKQorICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOyAgLy8gV2UgbmVlZCB0byBrZWVwIGxvb2tpbmcgZm9y
IGEgZmFpbGluZyByZXZpc2lvbi4KKyAgICAgICAgICAgIG5ld2VzdFBhc3NpbmdSZXZpc2lvbiA9
IHJldmlzaW9uOworICAgICAgICAgICAgY2FsbGJhY2sob2xkZXN0RmFpbGluZ1JldmlzaW9uLCBu
ZXdlc3RQYXNzaW5nUmV2aXNpb24pOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9KTsKKyAgICB9KTsKK307CisKK3Jlc3VsdHMucmVzdWx0Tm9kZUZvclRlc3QgPSBmdW5jdGlv
bihyZXN1bHRzVHJlZSwgdGVzdE5hbWUpCit7CisgICAgdmFyIHRlc3ROYW1lUGF0aCA9IHRlc3RO
YW1lLnNwbGl0KCcvJyk7CisgICAgdmFyIGN1cnJlbnROb2RlID0gcmVzdWx0c1RyZWVbJ3Rlc3Rz
J107CisgICAgJC5lYWNoKHRlc3ROYW1lUGF0aCwgZnVuY3Rpb24oaW5kZXgsIHNlZ21lbnROYW1l
KSB7CisgICAgICAgIGlmICghY3VycmVudE5vZGUpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIGN1cnJlbnROb2RlID0gKHNlZ21lbnROYW1lIGluIGN1cnJlbnROb2RlKSA/IGN1cnJlbnRO
b2RlW3NlZ21lbnROYW1lXSA6IG51bGw7CisgICAgfSk7CisgICAgcmV0dXJuIGN1cnJlbnROb2Rl
OworfTsKKwogZnVuY3Rpb24gcmVzdWx0c0RpcmVjdG9yeUZvckJ1aWxkZXIoYnVpbGRlck5hbWUp
CiB7CiAgICAgcmV0dXJuIGJ1aWxkZXJOYW1lLnJlcGxhY2UoL1sgLigpXS9nLCAnXycpOwpAQCAt
MTg5LDIzICszMjUsMTAgQEAgcmVzdWx0cy5mZXRjaFJlc3VsdHNVUkxzID0gZnVuY3Rpb24oYnVp
bAogICAgIH0pOwogfTsKIAotZnVuY3Rpb24gcmVzdWx0c1N1bW1hcnlVUkwoYnVpbGRlck5hbWUs
IG5hbWUpCi17Ci0gICAgcmV0dXJuIGtUZXN0UmVzdWx0c1NlcnZlciArICd0ZXN0ZmlsZScgKwot
ICAgICAgICAgICc/YnVpbGRlcj0nICsgYnVpbGRlck5hbWUgKwotICAgICAgICAgICcmbWFzdGVy
PScgKyBrTWFzdGVyTmFtZSArCi0gICAgICAgICAgJyZ0ZXN0dHlwZT0nICsga1Rlc3RUeXBlICsK
LSAgICAgICAgICAnJm5hbWU9JyArIG5hbWU7Ci19Ci0KIHJlc3VsdHMuZmV0Y2hSZXN1bHRzRm9y
QnVpbGRlciA9IGZ1bmN0aW9uKGJ1aWxkZXJOYW1lLCBvbnN1Y2Nlc3MpCiB7Ci0gICAgJC5hamF4
KHsKLSAgICAgICAgdXJsOiByZXN1bHRzU3VtbWFyeVVSTChidWlsZGVyTmFtZSwga1Jlc3VsdHNO
YW1lKSwKLSAgICAgICAgZGF0YVR5cGU6ICdqc29ucCcsCi0gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0
aW9uKGRhdGEpIHsKLSAgICAgICAgICAgIG9uc3VjY2VzcyhuZXcgcmVzdWx0cy5CdWlsZGVyUmVz
dWx0cyhkYXRhKSk7Ci0gICAgICAgIH0KKyAgICBiYXNlLmpzb25wKHJlc3VsdHNTdW1tYXJ5VVJM
KGJ1aWxkZXJOYW1lLCBrUmVzdWx0c05hbWUpLCBmdW5jdGlvbihyZXN1bHRzVHJlZSkgeworICAg
ICAgICBvbnN1Y2Nlc3MobmV3IHJlc3VsdHMuQnVpbGRlclJlc3VsdHMocmVzdWx0c1RyZWUpKTsK
ICAgICB9KTsKIH07CiAKQEAgLTIxNCw4ICszMzcsOCBAQCByZXN1bHRzLmZldGNoUmVzdWx0c0J5
QnVpbGRlciA9IGZ1bmN0aW9uCiAgICAgdmFyIHJlc3VsdHNCeUJ1aWxkZXIgPSB7fQogICAgIHZh
ciByZXF1ZXN0c0luRmxpZ2h0ID0gYnVpbGRlck5hbWVMaXN0Lmxlbmd0aDsKICAgICAkLmVhY2go
YnVpbGRlck5hbWVMaXN0LCBmdW5jdGlvbihpbmRleCwgYnVpbGRlck5hbWUpIHsKLSAgICAgICAg
cmVzdWx0cy5mZXRjaFJlc3VsdHNGb3JCdWlsZGVyKGJ1aWxkZXJOYW1lLCBmdW5jdGlvbihidWls
ZGVyUmVzdWx0cykgewotICAgICAgICAgICAgcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyTmFtZV0g
PSBidWlsZGVyUmVzdWx0czsKKyAgICAgICAgcmVzdWx0cy5mZXRjaFJlc3VsdHNGb3JCdWlsZGVy
KGJ1aWxkZXJOYW1lLCBmdW5jdGlvbihyZXN1bHRzVHJlZSkgeworICAgICAgICAgICAgcmVzdWx0
c0J5QnVpbGRlcltidWlsZGVyTmFtZV0gPSByZXN1bHRzVHJlZTsKICAgICAgICAgICAgIC0tcmVx
dWVzdHNJbkZsaWdodDsKICAgICAgICAgICAgIGlmICghcmVxdWVzdHNJbkZsaWdodCkKICAgICAg
ICAgICAgICAgICBvbnN1Y2Nlc3MocmVzdWx0c0J5QnVpbGRlcik7CkluZGV4OiBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3Rvb2wvc2VydmVycy9kYXRhL2dhcmRlbmluZ3NlcnZlci9yZXN1bHRzX3Vu
aXR0ZXN0cy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2Vy
dmVycy9kYXRhL2dhcmRlbmluZ3NlcnZlci9yZXN1bHRzX3VuaXR0ZXN0cy5qcwkocmV2aXNpb24g
OTA3NjYpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2VydmVycy9kYXRhL2dhcmRl
bmluZ3NlcnZlci9yZXN1bHRzX3VuaXR0ZXN0cy5qcwkod29ya2luZyBjb3B5KQpAQCAtOTMsMzMg
KzkzLDE1NSBAQCB0ZXN0KCJyZXN1bHRUeXBlIiwgMTIsIGZ1bmN0aW9uKCkgewogICAgIGVxdWFs
cyhyZXN1bHRzLnJlc3VsdFR5cGUoImh0dHA6Ly9leGFtcGxlLmNvbS9mb28ueHl6IiksICJ0ZXh0
Iik7CiB9KTsKIAotdGVzdCgiZmV0Y2hSZXN1bHRzVVJMcyIsIDMsIGZ1bmN0aW9uKCkgewordGVz
dCgicmVzdWx0Tm9kZUZvclRlc3QiLCA0LCBmdW5jdGlvbigpIHsKKyAgICBkZWVwRXF1YWwocmVz
dWx0cy5yZXN1bHROb2RlRm9yVGVzdChrRXhhbXBsZVJlc3VsdHNKU09OLCAidXNlcnNjcmlwdHMv
YW5vdGhlci10ZXN0Lmh0bWwiKSwgeworICAgICAgICAiZXhwZWN0ZWQiOiAiUEFTUyIsCisgICAg
ICAgICJhY3R1YWwiOiAiVEVYVCIKKyAgICB9KTsKKyAgICBlcXVhbHMocmVzdWx0cy5yZXN1bHRO
b2RlRm9yVGVzdChrRXhhbXBsZVJlc3VsdHNKU09OLCAiZm9vLmh0bWwiKSwgbnVsbCk7CisgICAg
ZXF1YWxzKHJlc3VsdHMucmVzdWx0Tm9kZUZvclRlc3Qoa0V4YW1wbGVSZXN1bHRzSlNPTiwgInVz
ZXJzY3JpcHRzL2Zvby5odG1sIiksIG51bGwpOworICAgIGVxdWFscyhyZXN1bHRzLnJlc3VsdE5v
ZGVGb3JUZXN0KGtFeGFtcGxlUmVzdWx0c0pTT04sICJ1c2Vyc2NyaXB0cy9mb28vYmFyLmh0bWwi
KSwgbnVsbCk7Cit9KTsKKworZnVuY3Rpb24gTmV0d29ya1NpbXVsYXRvcigpCit7CisgICAgdGhp
cy5fcGVuZGluZ0NhbGxiYWNrcyA9IFtdOworfTsKKworTmV0d29ya1NpbXVsYXRvci5wcm90b3R5
cGUuc2NoZWR1bGVDYWxsYmFjayA9IGZ1bmN0aW9uKGNhbGxiYWNrKQoreworICAgIHRoaXMuX3Bl
bmRpbmdDYWxsYmFja3MucHVzaChjYWxsYmFjayk7Cit9CisKK05ldHdvcmtTaW11bGF0b3IucHJv
dG90eXBlLnJ1blRlc3QgPSBmdW5jdGlvbih0ZXN0Q2FzZSkKK3sKKyAgICB2YXIgc2VsZiA9IHRo
aXM7CiAgICAgdmFyIHJlYWxCYXNlID0gd2luZG93LmJhc2U7CiAKLSAgICB2YXIgcGVuZGluZ0Nh
bGxiYWNrcyA9IHt9OwogICAgIHdpbmRvdy5iYXNlID0ge307Ci0gICAgYmFzZS5wcm9iZSA9IGZ1
bmN0aW9uKHVybCwgb3B0aW9ucykgewotICAgICAgICBwZW5kaW5nQ2FsbGJhY2tzW3VybF0gPSBv
cHRpb25zOwotICAgIH07CiAgICAgYmFzZS5lbmRzV2l0aCA9IHJlYWxCYXNlLmVuZHNXaXRoOwog
ICAgIGJhc2UudHJpbUV4dGVuc2lvbiA9IHJlYWxCYXNlLnRyaW1FeHRlbnNpb247CisgICAgaWYg
KHNlbGYucHJvYmVIb29rKQorICAgICAgICBiYXNlLnByb2JlID0gc2VsZi5wcm9iZUhvb2s7Cisg
ICAgaWYgKHNlbGYuanNvbnBIb29rKQorICAgICAgICBiYXNlLmpzb25wID0gc2VsZi5qc29ucEhv
b2s7CisKKyAgICB0ZXN0Q2FzZSgpOworCisgICAgd2hpbGUgKHRoaXMuX3BlbmRpbmdDYWxsYmFj
a3MubGVuZ3RoKSB7CisgICAgICAgIHZhciBjYWxsYmFjayA9IHRoaXMuX3BlbmRpbmdDYWxsYmFj
a3Muc2hpZnQoKTsKKyAgICAgICAgY2FsbGJhY2soKTsKKyAgICB9CisKKyAgICB3aW5kb3cuYmFz
ZSA9IHJlYWxCYXNlOworICAgIGVxdWFsKHdpbmRvdy5iYXNlLCByZWFsQmFzZSwgIkZhaWxlZCB0
byByZXN0b3JlIHJlYWwgYmFzZSEiKTsKK30KKwordGVzdCgicmVncmVzc2lvblJhbmdlRm9yRmFp
bHVyZSIsIDMsIGZ1bmN0aW9uKCkgeworICAgIHNpbXVsYXRvciA9IG5ldyBOZXR3b3JrU2ltdWxh
dG9yKCk7CisKKyAgICB2YXIga2V5TWFwID0geworICAgICAgICAiYWd4MFpYTjBMWEpsYzNWc2RI
TnlFQXNTQ0ZSbGMzUkdhV3hsR0xuY1VBdyI6IHsKKyAgICAgICAgICAgICJ0ZXN0cyI6IHsKKyAg
ICAgICAgICAgICAgICAidXNlcnNjcmlwdHMiOiB7CisgICAgICAgICAgICAgICAgICAgICJhbm90
aGVyLXRlc3QuaHRtbCI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCI6ICJQ
QVNTIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJhY3R1YWwiOiAiVEVYVCIKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICB9LAorICAgICAg
ICAgICAgInJldmlzaW9uIjogIjkwNDMwIgorICAgICAgICB9LAorICAgICAgICAiYWd4MFpYTjBM
WEpsYzNWc2RITnlFQXNTQ0ZSbGMzUkdhV3hsR05mVFVBdyI6eworICAgICAgICAgICAgInRlc3Rz
IjogeworICAgICAgICAgICAgICAgICJ1c2Vyc2NyaXB0cyI6IHsKKyAgICAgICAgICAgICAgICAg
ICAgInVzZXItc2NyaXB0LXZpZGVvLWRvY3VtZW50Lmh0bWwiOiB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAiZXhwZWN0ZWQiOiAiRkFJTCIsCisgICAgICAgICAgICAgICAgICAgICAgICAiYWN0
dWFsIjogIlRFWFQiCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAg
ICJhbm90aGVyLXRlc3QuaHRtbCI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3Rl
ZCI6ICJQQVNTIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJhY3R1YWwiOiAiVEVYVCIKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICB9LAor
ICAgICAgICAgICAgInJldmlzaW9uIjogIjkwNDI5IgorICAgICAgICB9LAorICAgICAgICAiYWd4
MFpYTjBMWEpsYzNWc2RITnlFQXNTQ0ZSbGMzUkdhV3hsR0pXQ1VRdyI6eworICAgICAgICAgICAg
InRlc3RzIjogeworICAgICAgICAgICAgICAgICJ1c2Vyc2NyaXB0cyI6IHsKKyAgICAgICAgICAg
ICAgICAgICAgImFub3RoZXItdGVzdC5odG1sIjogeworICAgICAgICAgICAgICAgICAgICAgICAg
ImV4cGVjdGVkIjogIlBBU1MiLAorICAgICAgICAgICAgICAgICAgICAgICAgImFjdHVhbCI6ICJU
RVhUIgorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAg
ICAgIH0sCisgICAgICAgICAgICAicmV2aXNpb24iOiAiOTA0MjYiCisgICAgICAgIH0sCisgICAg
ICAgICJhZ3gwWlhOMExYSmxjM1ZzZEhOeUVBc1NDRlJsYzNSR2FXeGxHS2JMVUF3Ijp7CisgICAg
ICAgICAgICAidGVzdHMiOiB7CisgICAgICAgICAgICAgICAgInVzZXJzY3JpcHRzIjogeworICAg
ICAgICAgICAgICAgICAgICAidXNlci1zY3JpcHQtdmlkZW8tZG9jdW1lbnQuaHRtbCI6IHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCI6ICJGQUlMIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICJhY3R1YWwiOiAiVEVYVCIKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAg
ICAgICAgICAgICB9LAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJyZXZpc2lvbiI6ICI5
MDQyNCIKKyAgICAgICAgfQorICAgIH07CiAKLSAgICByZXN1bHRzLmZldGNoUmVzdWx0c1VSTHMo
Ik1vY2sgQnVpbGRlciIsICJ1c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QuaHRtbCIsIGZ1bmN0aW9u
KHJlc3VsdFVSTHMpIHsKLSAgICAgICAgZGVlcEVxdWFsKHJlc3VsdFVSTHMsIFsKLSAgICAgICAg
ICAgICJodHRwOi8vYnVpbGQuY2hyb21pdW0ub3JnL2YvY2hyb21pdW0vbGF5b3V0X3Rlc3RfcmVz
dWx0cy9Nb2NrX0J1aWxkZXIvcmVzdWx0cy9sYXlvdXQtdGVzdC1yZXN1bHRzL3VzZXJzY3JpcHRz
L2Fub3RoZXItdGVzdC1leHBlY3RlZC50eHQiLAotICAgICAgICAgICAgImh0dHA6Ly9idWlsZC5j
aHJvbWl1bS5vcmcvZi9jaHJvbWl1bS9sYXlvdXRfdGVzdF9yZXN1bHRzL01vY2tfQnVpbGRlci9y
ZXN1bHRzL2xheW91dC10ZXN0LXJlc3VsdHMvdXNlcnNjcmlwdHMvYW5vdGhlci10ZXN0LWFjdHVh
bC50eHQiLAotICAgICAgICAgICAgImh0dHA6Ly9idWlsZC5jaHJvbWl1bS5vcmcvZi9jaHJvbWl1
bS9sYXlvdXRfdGVzdF9yZXN1bHRzL01vY2tfQnVpbGRlci9yZXN1bHRzL2xheW91dC10ZXN0LXJl
c3VsdHMvdXNlcnNjcmlwdHMvYW5vdGhlci10ZXN0LWRpZmYudHh0IiwKLSAgICAgICAgXSk7Cisg
ICAgc2ltdWxhdG9yLmpzb25wSG9vayA9IGZ1bmN0aW9uKHVybCwgY2FsbGJhY2spIHsKKyAgICAg
ICAgc2ltdWxhdG9yLnNjaGVkdWxlQ2FsbGJhY2soZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBp
ZiAoL2Rpcj0xLy50ZXN0KHVybCkpIHsKKyAgICAgICAgICAgICAgICBjYWxsYmFjayhbCisgICAg
ICAgICAgICAgICAgICAgIHsgImtleSI6ICJhZ3gwWlhOMExYSmxjM1ZzZEhOeUVBc1NDRlJsYzNS
R2FXeGxHTG5jVUF3IiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJrZXkiOiAiYWd4MFpYTjBM
WEpsYzNWc2RITnlFQXNTQ0ZSbGMzUkdhV3hsR05mVFVBdyIgfSwKKyAgICAgICAgICAgICAgICAg
ICAgeyAia2V5IjogImFneDBaWE4wTFhKbGMzVnNkSE55RUFzU0NGUmxjM1JHYVd4bEdKV0NVUXci
IH0sCisgICAgICAgICAgICAgICAgICAgIHsgImtleSI6ICJhZ3gwWlhOMExYSmxjM1ZzZEhOeUVB
c1NDRlJsYzNSR2FXeGxHS2JMVUF3IiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJrZXkiOiAi
YWd4MFpYTjBMWEpsYzNWc2RITnlFQXNTQ0ZSbGMzUkdhV3hsR09qNVVBdyIgfSwKKyAgICAgICAg
ICAgICAgICAgICAgeyAia2V5IjogImFneDBaWE4wTFhKbGMzVnNkSE55RUFzU0NGUmxjM1JHYVd4
bEdQLUFVUXciIH0sCisgICAgICAgICAgICAgICAgICAgIHsgImtleSI6ICJhZ3gwWlhOMExYSmxj
M1ZzZEhOeUVBc1NDRlJsYzNSR2FXeGxHUEwzVUF3IiB9LAorICAgICAgICAgICAgICAgICAgICB7
ICJrZXkiOiAiYWd4MFpYTjBMWEpsYzNWc2RITnlFQXNTQ0ZSbGMzUkdhV3hsR05ISlFBdyIgfSwK
KyAgICAgICAgICAgICAgICBdKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgdmFyIGtleSA9IHVybC5tYXRjaCgva2V5PShbXiZdKykvKVsxXTsKKyAgICAgICAgICAgICAg
ICBjYWxsYmFjayhrZXlNYXBba2V5XSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAg
IH07CisgICAgc2ltdWxhdG9yLnJ1blRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgIHJlc3VsdHMu
cmVncmVzc2lvblJhbmdlRm9yRmFpbHVyZSgiTW9jayBCdWlsZGVyIiwgInVzZXJzY3JpcHRzL2Fu
b3RoZXItdGVzdC5odG1sIiwgZnVuY3Rpb24ob2xkZXN0RmFpbGluZ1JldmlzaW9uLCBuZXdlc3RQ
YXNzaW5nUmV2aXNpb24pIHsKKyAgICAgICAgICAgIGVxdWFscyhvbGRlc3RGYWlsaW5nUmV2aXNp
b24sICI5MDQyNiIpOworICAgICAgICAgICAgZXF1YWxzKG5ld2VzdFBhc3NpbmdSZXZpc2lvbiwg
IjkwNDI0Iik7CisgICAgICAgIH0pOwogICAgIH0pOworfSk7CisKK3Rlc3QoImZldGNoUmVzdWx0
c1VSTHMiLCAzLCBmdW5jdGlvbigpIHsKKyAgICB2YXIgc2ltdWxhdG9yID0gbmV3IE5ldHdvcmtT
aW11bGF0b3IoKTsKIAogICAgIHZhciBwcm9iZWRVUkxzID0gW107Ci0gICAgZm9yICh2YXIgdXJs
IGluIHBlbmRpbmdDYWxsYmFja3MpIHsKLSAgICAgICAgcHJvYmVkVVJMcy5wdXNoKHVybCk7Ci0g
ICAgICAgIGlmIChyZWFsQmFzZS5lbmRzV2l0aCh1cmwsICcudHh0JykpCi0gICAgICAgICAgICBw
ZW5kaW5nQ2FsbGJhY2tzW3VybF0uc3VjY2Vzcy5jYWxsKCk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHBlbmRpbmdDYWxsYmFja3NbdXJsXS5lcnJvci5jYWxsKCk7Ci0gICAgfQorICAgIHNp
bXVsYXRvci5wcm9iZUhvb2sgPSBmdW5jdGlvbih1cmwsIG9wdGlvbnMpCisgICAgeworICAgICAg
ICBzaW11bGF0b3Iuc2NoZWR1bGVDYWxsYmFjayhmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHBy
b2JlZFVSTHMucHVzaCh1cmwpOworICAgICAgICAgICAgaWYgKGJhc2UuZW5kc1dpdGgodXJsLCAn
LnR4dCcpKQorICAgICAgICAgICAgICAgIG9wdGlvbnMuc3VjY2Vzcy5jYWxsKCk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgb3B0aW9ucy5lcnJvci5jYWxsKCk7CisgICAgICAg
IH0pOworICAgIH07CisKKyAgICBzaW11bGF0b3IucnVuVGVzdChmdW5jdGlvbigpIHsKKyAgICAg
ICAgcmVzdWx0cy5mZXRjaFJlc3VsdHNVUkxzKCJNb2NrIEJ1aWxkZXIiLCAidXNlcnNjcmlwdHMv
YW5vdGhlci10ZXN0Lmh0bWwiLCBmdW5jdGlvbihyZXN1bHRVUkxzKSB7CisgICAgICAgICAgICBk
ZWVwRXF1YWwocmVzdWx0VVJMcywgWworICAgICAgICAgICAgICAgICJodHRwOi8vYnVpbGQuY2hy
b21pdW0ub3JnL2YvY2hyb21pdW0vbGF5b3V0X3Rlc3RfcmVzdWx0cy9Nb2NrX0J1aWxkZXIvcmVz
dWx0cy9sYXlvdXQtdGVzdC1yZXN1bHRzL3VzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC1leHBlY3Rl
ZC50eHQiLAorICAgICAgICAgICAgICAgICJodHRwOi8vYnVpbGQuY2hyb21pdW0ub3JnL2YvY2hy
b21pdW0vbGF5b3V0X3Rlc3RfcmVzdWx0cy9Nb2NrX0J1aWxkZXIvcmVzdWx0cy9sYXlvdXQtdGVz
dC1yZXN1bHRzL3VzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC1hY3R1YWwudHh0IiwKKyAgICAgICAg
ICAgICAgICAiaHR0cDovL2J1aWxkLmNocm9taXVtLm9yZy9mL2Nocm9taXVtL2xheW91dF90ZXN0
X3Jlc3VsdHMvTW9ja19CdWlsZGVyL3Jlc3VsdHMvbGF5b3V0LXRlc3QtcmVzdWx0cy91c2Vyc2Ny
aXB0cy9hbm90aGVyLXRlc3QtZGlmZi50eHQiLAorICAgICAgICAgICAgXSk7CisgICAgICAgIH0p
OworICAgIH0pOwogCiAgICAgZGVlcEVxdWFsKHByb2JlZFVSTHMsIFsKICAgICAgICAgImh0dHA6
Ly9idWlsZC5jaHJvbWl1bS5vcmcvZi9jaHJvbWl1bS9sYXlvdXRfdGVzdF9yZXN1bHRzL01vY2tf
QnVpbGRlci9yZXN1bHRzL2xheW91dC10ZXN0LXJlc3VsdHMvdXNlcnNjcmlwdHMvYW5vdGhlci10
ZXN0LWV4cGVjdGVkLnBuZyIsCkBAIC0xMjksNyArMjUxLDQgQEAgdGVzdCgiZmV0Y2hSZXN1bHRz
VVJMcyIsIDMsIGZ1bmN0aW9uKCkgewogICAgICAgICAiaHR0cDovL2J1aWxkLmNocm9taXVtLm9y
Zy9mL2Nocm9taXVtL2xheW91dF90ZXN0X3Jlc3VsdHMvTW9ja19CdWlsZGVyL3Jlc3VsdHMvbGF5
b3V0LXRlc3QtcmVzdWx0cy91c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QtYWN0dWFsLnR4dCIsCiAg
ICAgICAgICJodHRwOi8vYnVpbGQuY2hyb21pdW0ub3JnL2YvY2hyb21pdW0vbGF5b3V0X3Rlc3Rf
cmVzdWx0cy9Nb2NrX0J1aWxkZXIvcmVzdWx0cy9sYXlvdXQtdGVzdC1yZXN1bHRzL3VzZXJzY3Jp
cHRzL2Fub3RoZXItdGVzdC1kaWZmLnR4dCIsCiAgICAgXSk7Ci0KLSAgICB3aW5kb3cuYmFzZSA9
IHJlYWxCYXNlOwotICAgIGVxdWFsKHdpbmRvdy5iYXNlLCByZWFsQmFzZSwgIkZhaWxlZCB0byBy
ZXN0b3JlIHJlYWwgYmFzZSEiKTsKIH0pOwo=
</data>
<flag name="review"
          id="95010"
          type_id="1"
          status="+"
          setter="aroben"
    />
    <flag name="commit-queue"
          id="95013"
          type_id="3"
          status="-"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>