<?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>71695</bug_id>
          
          <creation_ts>2011-11-07 08:35:11 -0800</creation_ts>
          <short_desc>Regression(r53595): Sync xhr requests in workers aren&apos;t terminated on worker close.</short_desc>
          <delta_ts>2012-01-04 03:35:47 -0800</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>Qt, QtTriaged</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>64002</blocked>
    
    <blocked>70619</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Csaba Osztrogonác">ossy</reporter>
          <assigned_to name="David Levin">levin</assigned_to>
          <cc>ap</cc>
    
    <cc>dimich</cc>
    
    <cc>ericu</cc>
    
    <cc>hnandor</cc>
    
    <cc>levin</cc>
    
    <cc>levin+threading</cc>
    
    <cc>ossy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zherczeg</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>497193</commentid>
    <comment_count>0</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-11-07 08:35:11 -0800</bug_when>
    <thetext>To reproduce these fail, use:
$ Tools/Scripts/old-run-webkit-tests --wait-for-httpd fast/workers/shared-worker-lifecycle.html fast/workers/shared-worker-frame-lifecycle.html fast/workers/worker-close-more.html fast/workers/storage/interrupt-database.html fast/workers/dedicated-worker-lifecycle.html fast/workers/worker-lifecycle.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497198</commentid>
    <comment_count>1</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-11-07 08:41:08 -0800</bug_when>
    <thetext>I meant: $ Tools/Scripts/old-run-webkit-tests --wait-for-httpd http/tests/xmlhttprequest/workers/abort-exception-assert.html fast/workers/shared-worker-lifecycle.html fast/workers/shared-worker-frame-lifecycle.html fast/workers/worker-close-more.html fast/workers/storage/interrupt-database.html fast/workers/dedicated-worker-lifecycle.html fast/workers/worker-lifecycle.html

fails: notifydone timeout after 30 secs
+FAIL: Timed out waiting for notifyDone to be called</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508651</commentid>
    <comment_count>2</comment_count>
    <who name="Nandor Huszka">hnandor</who>
    <bug_when>2011-11-24 00:00:02 -0800</bug_when>
    <thetext>In abort-exception-assert.html Worker is created which execute the 
LayoutTests/http/tests/xmlhttprequest/workers/resources/endless-sync-xhr.js 
script. There can be found the following line:

xhr.open(&quot;GET&quot;, &quot;endless-response.php&quot;, false);

If I overwrite the third parameter from false to true, the other 6 tests will be correct. As a result, I think the problem is about synchronous request.

After more examining, in the same file, after that request is executed there is a
layoutTestController.notifyDone();
calling. This command hasn&apos;t effect at all, what&apos;s more in my opinion it isn&apos;t called, however the preventing statement is true ( if (window.layoutTestController) ).

When we use the mentioned synchronous request, for example in interrupt-database.html
function finishTest()
{
    log(&quot;PASS: database operations interrupted.&quot;);
    if (window.layoutTestController)
        layoutTestController.notifyDone();
}
the window.layoutTestController will be null, that&apos;s why this test is fail with timeout.
I have no idea yet what&apos;s the problem exactly, but I&apos;m on it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508665</commentid>
    <comment_count>3</comment_count>
    <who name="Nandor Huszka">hnandor</who>
    <bug_when>2011-11-24 00:54:30 -0800</bug_when>
    <thetext>In abort-exception-assert.html, the mentioned Worker&apos;s terminating is called with 100 milliseconds latency. This Worker does an endless cycle: sleeping for 10 seconds and then send a synchronous request.

If we try to terminate this Worker with 2 seconds latency, and sleeping it for 1 second in every iteration before sending the request, the
layoutTestController.notifyDone();
will be called, so the Worker will terminate successfully. In this case the other 6 tests will be passed too.

Before terminating the Worker, there can be read a comment, it says:
&quot;This is an (unlikely) race condition here in that the worker may not have started the sync xhr call at this point, but it has been greatly lessened by the 100ms delay.&quot;
In spite of giving the 100ms delay, I think it&apos;s a race condition yet, it must be the cause of the bug...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509135</commentid>
    <comment_count>4</comment_count>
    <who name="Nandor Huszka">hnandor</who>
    <bug_when>2011-11-25 06:18:41 -0800</bug_when>
    <thetext>Problem isn&apos;t that I have mentioned... It seems it&apos;s that the worker in abort-exception-assert.html doesn&apos;t terminate, but the other 6 tests use the 

waitUntilWorkerThreadsExit(runTests);

function, which can be found in worker-utils.js.
This method calls the function they got, after there are no more workers. It try to fill the stack with lots of object (in and endless cycle), then remove them and the possible stucked workers with

GCController.collect();

call. But this call doesn&apos;t remove the worker, that&apos;s why the 6 tests stopped, and fail with timeout.
Therefore I think, the worker isn&apos;t seems garbage for the GC for some reason. I tried to kill the worker from itself, but it didn&apos;t solve the problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515054</commentid>
    <comment_count>5</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2011-12-05 06:59:34 -0800</bug_when>
    <thetext>Hi Alexey, David

your patch (http://trac.webkit.org/changeset/41216) introduced a complicated bug in the abort-exception-assert.html. You have added a mode string called &quot;loadResourceSynchronouslyMode&quot;, and the worker created by the test above does not stop until it receives a message with this mode string.

See WorkerRunLoop.cpp:155:
OwnPtr&lt;WorkerRunLoop::Task&gt; task = m_messageQueue.waitForMessageFilteredWithTimeout(result, predicate, absoluteTime);

The predicate is the following:

81	    bool operator()(WorkerRunLoop::Task* task) const
82	    {
83	        return m_defaultMode || m_mode == task-&gt;mode();
84	    }

and m_defaultMode is false in or case.

The abort-exception-assert.html sends a terminate message to this worker, and the worker should stop. However, this message does not have loadResourceSynchronouslyMode mode (its mode string is actually NULL), so the &quot;predicate&quot; rule filters it out which makes the worker run infinitely. The purpose of this test is testing the terminate message.

But the story does not end here. The test calls terminate, but it does not wait until it is successful (thus the abort-exception-assert.html seems successul). However, the next test waits until all workers quit. Since this particular worker does never stop, it cause a timeout error during the next test (which makes the next test flakey).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515074</commentid>
    <comment_count>6</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2011-12-05 07:41:37 -0800</bug_when>
    <thetext>Well, I try to simplify what is happening here

TEST1:

workerA = new worker
[ do thing here ]
workerA.terminate()
&lt;-- does not check whether the terminate is successful
exit_with(&quot;PASS&quot;)

&lt;-- workerA still waits here

TEST2:

workerB = new worker
&lt;-- workerB exits here on its own
&lt;-- workerA still waits
wait_until_ALL_worker_finish &lt;-- wait forever (until timeout reached)
&lt;-- it become a falkey test since it runs well on its own
exit_with(&quot;PASS&quot;)

Solution:
1) terminate message should override ANY filters. Add a new &quot;bool nofilter = false&quot; argument to message creaton.

2) DRT should check whether all workers are quit before starting a new test. I don&apos;t think any test should leave garbage after them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515086</commentid>
    <comment_count>7</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-12-05 08:02:16 -0800</bug_when>
    <thetext>If I&apos;m reading this correctly, I believe that the MessageQueue should terminate with MessageQueueTerminated due to being killed in this case.

btw, why is this just failing now when the patch referenced is about 3 years old?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515089</commentid>
    <comment_count>8</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-12-05 08:08:28 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; If I&apos;m reading this correctly, I believe that the MessageQueue should terminate with MessageQueueTerminated due to being killed in this case.
&gt; 
&gt; btw, why is this just failing now when the patch referenced is about 3 years old?

As the name of the bug says http/tests/xmlhttprequest/workers/abort-exception-assert.html makes 6 fast/workers test fail. We didn&apos;t catch this bug previously, because ORWT runs http tests at the end. But we use NRWT from this summer and NRWT starts testing with https tests. So this bug was revealed by ORWT/NRWT switch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515565</commentid>
    <comment_count>9</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-12-05 18:07:43 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; If I&apos;m reading this correctly, I believe that the MessageQueue should terminate with MessageQueueTerminated due to being killed in this case.
&gt; &gt; 
&gt; &gt; btw, why is this just failing now when the patch referenced is about 3 years old?
&gt; 
&gt; As the name of the bug says http/tests/xmlhttprequest/workers/abort-exception-assert.html makes 6 fast/workers test fail. We didn&apos;t catch this bug previously, because ORWT runs http tests at the end. But we use NRWT from this summer and NRWT starts testing with https tests. So this bug was revealed by ORWT/NRWT switch.

I&apos;m checking out what happens on OS X to see if there is the same issue or how it is addressed.

Thanks for investigating this issue down to this level!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515586</commentid>
    <comment_count>10</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-12-05 18:52:30 -0800</bug_when>
    <thetext>It looks like http://trac.webkit.org/changeset/53595 broke this.

Before that patch, WorkerThread::stop would always call m_runLoop.terminate();  which would break out of these nested loops. After that change, it no longer did.

I think this is because &quot;Worker thread shutdown got changed a bunch to handle Database cleanup&quot; but this was unfortunately a broken way to do this. Ideally the http/tests/xmlhttprequest/workers/abort-exception-assert.html or some other test would have caught this but I guess not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515682</commentid>
    <comment_count>11</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2011-12-05 23:38:55 -0800</bug_when>
    <thetext>Do you have any idea how to fix it? We spent days for searching this bug and we would really like to fix it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516088</commentid>
    <comment_count>12</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-12-06 11:35:16 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Do you have any idea how to fix it? We spent days for searching this bug and we would really like to fix it.

I&apos;m discussing it with ericu. The idea we&apos;re discussing is moving http://trac.webkit.org/changeset/53595/trunk/WebCore/workers/WorkerThread.cpp::performTask (http://trac.webkit.org/changeset/53595/trunk/WebCore/workers/WorkerThread.cpp) into the normal code path of WorkerContext shutdown and undo&apos;ing the changes done to WorkerThread::stop() in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516294</commentid>
    <comment_count>13</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-12-06 15:22:09 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Do you have any idea how to fix it? We spent days for searching this bug and we would really like to fix it.

If you&apos;d like to help the fix along, a single test which repros the issue would be nice as that will be needed with the final fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516950</commentid>
    <comment_count>14</comment_count>
      <attachid>118282</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-12-07 15:30:02 -0800</bug_when>
    <thetext>Created attachment 118282
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517235</commentid>
    <comment_count>15</comment_count>
      <attachid>118282</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2011-12-08 00:15:09 -0800</bug_when>
    <thetext>Comment on attachment 118282
Patch

r=me.

Looks like we were not fast enough. You should add more text to the changelog to describe the issue and why your change fix it.

I still think DRT should check if there is a hanging worker and throw some error message. But that coudl go into a differnt patch (I hope Nandi is up for the task).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517243</commentid>
    <comment_count>16</comment_count>
    <who name="Nandor Huszka">hnandor</who>
    <bug_when>2011-12-08 00:48:11 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 118282 [details])

&gt; I still think DRT should check if there is a hanging worker and throw some error message. But that coudl go into a differnt patch (I hope Nandi is up for the task).

I&apos;m working on it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517381</commentid>
    <comment_count>17</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-12-08 06:52:46 -0800</bug_when>
    <thetext>ap or dimich, any comments?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517446</commentid>
    <comment_count>18</comment_count>
      <attachid>118282</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-12-08 08:50:46 -0800</bug_when>
    <thetext>Comment on attachment 118282
Patch

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

I don&apos;t remember how this works sufficiently well to comment.

&gt; Source/WebCore/workers/WorkerThread.cpp:-257
&gt; -    // FIXME: Rudely killing the thread won&apos;t work when we allow nested workers, because they will try to post notifications of their destruction.
&gt; -    // This can likely use the same mechanism as used for databases above.

Why is this no longer an issue?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518342</commentid>
    <comment_count>19</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-12-09 10:49:51 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 118282 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=118282&amp;action=review
&gt; 
&gt; I don&apos;t remember how this works sufficiently well to comment.
&gt; 
&gt; &gt; Source/WebCore/workers/WorkerThread.cpp:-257
&gt; &gt; -    // FIXME: Rudely killing the thread won&apos;t work when we allow nested workers, because they will try to post notifications of their destruction.
&gt; &gt; -    // This can likely use the same mechanism as used for databases above.
&gt; 
&gt; Why is this no longer an issue?

The database comment didn&apos;t make sense to me (and given that the change that added the comment broke the shutdown process for workers, I didn&apos;t trust it as well). The other comment likely still applies. I was thinking there are lots of issues to tackle and examine when one does nested workers and this would naturally be one of them, so I&apos;d remove the FIXME... but I&apos;ll leave it in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518437</commentid>
    <comment_count>20</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-12-09 13:14:01 -0800</bug_when>
    <thetext>&gt; I was thinking there are lots of issues to tackle and examine when one does nested workers and this
&gt; would naturally be one of them, so I&apos;d remove the FIXME...

That makes sense to me. The comment was written at a time when nested workers seemed imminent, and now it&apos;s unclear if they will ever materialize.

A line in ChangeLog can explain the rationale for removal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518485</commentid>
    <comment_count>21</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-12-09 14:06:04 -0800</bug_when>
    <thetext>Committed as http://trac.webkit.org/changeset/102473</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529440</commentid>
    <comment_count>22</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-01-04 03:35:47 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; Committed as http://trac.webkit.org/changeset/102473
I unskipped the test: http://trac.webkit.org/changeset/104024</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118282</attachid>
            <date>2011-12-07 15:30:02 -0800</date>
            <delta_ts>2011-12-08 08:50:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71695-20111207153000.patch</filename>
            <type>text/plain</type>
            <size>13069</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyMDczCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAw
YzI3ZWRlZTI5OGQ4ZTlkOGRjMzU5ZmI5YzZkNTUxODRjY2ZmODNmLi43NjcyY2NiZTU2ZTg3OWNl
MmY5MzRiZDcyNDQxNjBkNTc2OGYwNWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNSBAQAorMjAxMS0xMi0wNyAgRGF2aWQgTGV2aW4gIDxsZXZpbkBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgUmVncmVzc2lvbihyNTM1OTUpOiBTeW5jIHhociByZXF1ZXN0cyBpbiB3b3Jr
ZXJzIGFyZW4ndCB0ZXJtaW5hdGVkIG9uIHdvcmtlciBjbG9zZS4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxNjk1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvTWVzc2FnZVF1ZXVlLmg6CisgICAg
ICAgIChXVEY6Ok1lc3NhZ2VRdWV1ZTo6dHJ5R2V0TWVzc2FnZUlnbm9yaW5nS2lsbGVkKTogQWRk
ZWQgYSB3YXkgdG8gZ2V0IG1lc3NhZ2VzCisgICAgICAgIGV2ZW4gYWZ0ZXIgdGhlIHF1ZXVlIGhh
cyBiZWVuIGtpbGxlZC4gVGhpcyBpcyB1c2VmdWwgd2hlbiBvbmUgd2FudHMgdG8KKyAgICAgICAg
a2lsbCBhIHF1ZXVlIGJ1dCB0aGVuIGdvIHRocm91Z2ggaXQgdG8gcnVuIGNsZWFuIHVwIHRhc2tz
IGZyb20gaXQuCisKIDIwMTEtMTItMDUgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgog
CiAgICAgICAgIENvbnZlcnQgSlNDbGFzc1JlZiB0byB1c2UgSGFzaE1hcDxPd25QdHI+CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKaW5kZXggN2U2MWEwYmFiYTAwM2RhNDFlYTJjNzEwNGJkMTgwZGFmNDhlOTcwYi4uMGQ0ZDIy
ODlmMTAyMGQyYzJlYTZkZDdmNjEwMDZlNjUxYjI3ODMxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDI0IEBACisyMDExLTEyLTA3ICBEYXZpZCBMZXZpbiAgPGxldmluQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBSZWdyZXNzaW9uKHI1MzU5NSk6IFN5bmMgeGhyIHJlcXVlc3RzIGluIHdvcmtlcnMg
YXJlbid0IHRlcm1pbmF0ZWQgb24gd29ya2VyIGNsb3NlLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE2OTUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHdvcmtlcnMvV29ya2VyUnVuTG9vcC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpXb3JrZXJSdW5Mb29wOjpydW4pOiBBZGRlZCB0aGUgY2FsbCB0byBy
dW4gY2xlYW4tdXAgdGFza3MuCisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJSdW5Mb29wOjpydW5J
bk1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyUnVuTG9vcDo6cnVuQ2xlYW51cFRhc2tz
KTogTG9vcCB0byBzaW1wbHkgY2xlYXIgb3V0IGFsbCBjbGVhbiB1cCB0YXNrcy4KKyAgICAgICAg
KFdlYkNvcmU6OldvcmtlclJ1bkxvb3A6OlRhc2s6OnBlcmZvcm1UYXNrKTogU3RvcCBub24tY2xl
YW4gdXAgdGFza3MKKyAgICAgICAgZnJvbSBydW5uaW5nIGFmdGVyIHRoZSBsb29wIGhhcyBiZWVu
IHRlcm1pbmF0ZWQuCisgICAgICAgICogd29ya2Vycy9Xb3JrZXJSdW5Mb29wLmg6CisgICAgICAg
IChXZWJDb3JlOjpXb3JrZXJSdW5Mb29wOjp0ZXJtaW5hdGVkKTogSnVzdCBtYWRlIGl0IGNvbnN0
LgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OldvcmtlclRocmVhZFNodXRkb3duRmluaXNoVGFzazo6cGVyZm9ybVRhc2spOiBSZW1vdmVkCisg
ICAgICAgIHRoZSB0ZXJtaW5hdGUgY2xhdXNlIHNpbmNlIGl0IHdhcyBwdXQgYmFjayBpbiBzdG9w
LgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkOjpzdG9wKTogVGVybWluYXRlIHRoZSBy
dW4gbG9vcCBzbworICAgICAgICB0aGF0IGFsbCBsb29wcyB3aWxsIGV4aXQgYW5kIGNsZWFuIHVw
IHRhc2tzIHdpbGwgcnVuLgorCiAyMDExLTEyLTA1ICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFt
aW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZW1vdmUgbWV0aG9kcyBkZWNsYXJlZCBidXQgbmV2
ZXIgaW1wbGVtZW50ZWQgd2l0aCBHT09HTEVVUkwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvTWVzc2FnZVF1ZXVlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01l
c3NhZ2VRdWV1ZS5oCmluZGV4IGZlMDQ3MjJmMTBlMGM0OGRjODllNGQxNzM0MTFlZWJiODE0MGQ3
MmMuLmRkYTg1MmZlMTI2NGVmYjJmZmEzZmM1YTdjYzBlNjYwZDg4OWVmODQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWVzc2FnZVF1ZXVlLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9NZXNzYWdlUXVldWUuaApAQCAtNjAsNiArNjAsNyBAQCBuYW1lc3Bh
Y2UgV1RGIHsKIAogICAgICAgICBQYXNzT3duUHRyPERhdGFUeXBlPiB3YWl0Rm9yTWVzc2FnZSgp
OwogICAgICAgICBQYXNzT3duUHRyPERhdGFUeXBlPiB0cnlHZXRNZXNzYWdlKCk7CisgICAgICAg
IFBhc3NPd25QdHI8RGF0YVR5cGU+IHRyeUdldE1lc3NhZ2VJZ25vcmluZ0tpbGxlZCgpOwogICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQcmVkaWNhdGU+CiAgICAgICAgIFBhc3NPd25QdHI8RGF0
YVR5cGU+IHdhaXRGb3JNZXNzYWdlRmlsdGVyZWRXaXRoVGltZW91dChNZXNzYWdlUXVldWVXYWl0
UmVzdWx0JiwgUHJlZGljYXRlJiwgZG91YmxlIGFic29sdXRlVGltZSk7CiAKQEAgLTE2OCw2ICsx
NjksMTYgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RGF0YVR5cGU+CisgICAgaW5saW5lIFBhc3NPd25QdHI8RGF0YVR5cGU+IE1lc3NhZ2VRdWV1ZTxE
YXRhVHlwZT46OnRyeUdldE1lc3NhZ2VJZ25vcmluZ0tpbGxlZCgpCisgICAgeworICAgICAgICBN
dXRleExvY2tlciBsb2NrKG1fbXV0ZXgpOworICAgICAgICBpZiAobV9xdWV1ZS5pc0VtcHR5KCkp
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICByZXR1cm4gYWRvcHRQdHIo
bV9xdWV1ZS50YWtlRmlyc3QoKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGF0
YVR5cGU+CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUHJlZGljYXRlPgogICAgIGlubGluZSB2b2lk
IE1lc3NhZ2VRdWV1ZTxEYXRhVHlwZT46OnJlbW92ZUlmKFByZWRpY2F0ZSYgcHJlZGljYXRlKQog
ICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyUnVuTG9vcC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclJ1bkxvb3AuY3BwCmluZGV4IGZjMTVm
MmIzODZlMjYwODI5YzIxNmExNjY1YTQ0NTgzMzg1NTQ0OGQuLjk5MmEwOWFlYjAwM2Y3ZGEzMzY1
ZTc0ZTAyYzk1Y2M0NjgxNDk0ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
V29ya2VyUnVuTG9vcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJSdW5M
b29wLmNwcApAQCAtMTM0LDYgKzEzNCw3IEBAIHZvaWQgV29ya2VyUnVuTG9vcDo6cnVuKFdvcmtl
ckNvbnRleHQqIGNvbnRleHQpCiAgICAgZG8gewogICAgICAgICByZXN1bHQgPSBydW5Jbk1vZGUo
Y29udGV4dCwgbW9kZVByZWRpY2F0ZSk7CiAgICAgfSB3aGlsZSAocmVzdWx0ICE9IE1lc3NhZ2VR
dWV1ZVRlcm1pbmF0ZWQpOworICAgIHJ1bkNsZWFudXBUYXNrcyhjb250ZXh0KTsKIH0KIAogTWVz
c2FnZVF1ZXVlV2FpdFJlc3VsdCBXb3JrZXJSdW5Mb29wOjpydW5Jbk1vZGUoV29ya2VyQ29udGV4
dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBtb2RlKQpAQCAtMTYxLDcgKzE2Miw3IEBAIE1lc3Nh
Z2VRdWV1ZVdhaXRSZXN1bHQgV29ya2VyUnVuTG9vcDo6cnVuSW5Nb2RlKFdvcmtlckNvbnRleHQq
IGNvbnRleHQsIGNvbnN0IE1vCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBNZXNzYWdlUXVl
dWVNZXNzYWdlUmVjZWl2ZWQ6Ci0gICAgICAgIHRhc2stPnBlcmZvcm1UYXNrKGNvbnRleHQpOwor
ICAgICAgICB0YXNrLT5wZXJmb3JtVGFzaygqdGhpcywgY29udGV4dCk7CiAgICAgICAgIGJyZWFr
OwogCiAgICAgY2FzZSBNZXNzYWdlUXVldWVUaW1lb3V0OgpAQCAtMTczLDYgKzE3NCwyMSBAQCBN
ZXNzYWdlUXVldWVXYWl0UmVzdWx0IFdvcmtlclJ1bkxvb3A6OnJ1bkluTW9kZShXb3JrZXJDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBNbwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3ZvaWQgV29y
a2VyUnVuTG9vcDo6cnVuQ2xlYW51cFRhc2tzKFdvcmtlckNvbnRleHQqIGNvbnRleHQpCit7Cisg
ICAgQVNTRVJUKGNvbnRleHQpOworICAgIEFTU0VSVChjb250ZXh0LT50aHJlYWQoKSk7CisgICAg
QVNTRVJUKGNvbnRleHQtPnRocmVhZCgpLT50aHJlYWRJRCgpID09IGN1cnJlbnRUaHJlYWQoKSk7
CisgICAgQVNTRVJUKG1fbWVzc2FnZVF1ZXVlLmtpbGxlZCgpKTsKKworICAgIHdoaWxlICh0cnVl
KSB7CisgICAgICAgIE93blB0cjxXb3JrZXJSdW5Mb29wOjpUYXNrPiB0YXNrID0gbV9tZXNzYWdl
UXVldWUudHJ5R2V0TWVzc2FnZUlnbm9yaW5nS2lsbGVkKCk7CisgICAgICAgIGlmICghdGFzaykK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGFzay0+cGVyZm9ybVRhc2soKnRoaXMsIGNv
bnRleHQpOworICAgIH0KK30KKwogdm9pZCBXb3JrZXJSdW5Mb29wOjp0ZXJtaW5hdGUoKQogewog
ICAgIG1fbWVzc2FnZVF1ZXVlLmtpbGwoKTsKQEAgLTE5MywxMCArMjA5LDEwIEBAIFBhc3NPd25Q
dHI8V29ya2VyUnVuTG9vcDo6VGFzaz4gV29ya2VyUnVuTG9vcDo6VGFzazo6Y3JlYXRlKFBhc3NP
d25QdHI8U2NyaXB0RXhlCiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBUYXNrKHRhc2ssIG1vZGUp
KTsKIH0KIAotdm9pZCBXb3JrZXJSdW5Mb29wOjpUYXNrOjpwZXJmb3JtVGFzayhTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0KQordm9pZCBXb3JrZXJSdW5Mb29wOjpUYXNrOjpwZXJmb3Jt
VGFzayhjb25zdCBXb3JrZXJSdW5Mb29wJiBydW5Mb29wLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0KQogewogICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBzdGF0aWNf
Y2FzdDxXb3JrZXJDb250ZXh0ICo+KGNvbnRleHQpOwotICAgIGlmICghd29ya2VyQ29udGV4dC0+
aXNDbG9zaW5nKCkgfHwgbV90YXNrLT5pc0NsZWFudXBUYXNrKCkpCisgICAgaWYgKCghd29ya2Vy
Q29udGV4dC0+aXNDbG9zaW5nKCkgJiYgIXJ1bkxvb3AudGVybWluYXRlZCgpKSB8fCBtX3Rhc2st
PmlzQ2xlYW51cFRhc2soKSkKICAgICAgICAgbV90YXNrLT5wZXJmb3JtVGFzayhjb250ZXh0KTsK
IH0KIApAQCAtMjA2LDcgKzIyMiw2IEBAIFdvcmtlclJ1bkxvb3A6OlRhc2s6OlRhc2soUGFzc093
blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrLCBjb25zdCBTCiB7CiB9CiAK
LQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclJ1bkxvb3AuaCBiL1NvdXJj
ZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyUnVuTG9vcC5oCmluZGV4IDNmZWI0ZTg0YTMxY2YyOWI5
MTc1YzM4MDU1NjczMWIyYjYzZTRjZjUuLjg0MmM2MjEyNzkwYTJlNmE4YTM5ODZhNGRlNWI1Zjgz
MjM5ODIzZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyUnVuTG9v
cC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyUnVuTG9vcC5oCkBAIC01Niw3
ICs1Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgTWVzc2FnZVF1ZXVlV2FpdFJl
c3VsdCBydW5Jbk1vZGUoV29ya2VyQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbW9kZSk7CiAKICAg
ICAgICAgdm9pZCB0ZXJtaW5hdGUoKTsKLSAgICAgICAgYm9vbCB0ZXJtaW5hdGVkKCkgeyByZXR1
cm4gbV9tZXNzYWdlUXVldWUua2lsbGVkKCk7IH0KKyAgICAgICAgYm9vbCB0ZXJtaW5hdGVkKCkg
Y29uc3QgeyByZXR1cm4gbV9tZXNzYWdlUXVldWUua2lsbGVkKCk7IH0KIAogICAgICAgICB2b2lk
IHBvc3RUYXNrKFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4pOwogICAg
ICAgICB2b2lkIHBvc3RUYXNrRm9yTW9kZShQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ6OlRhc2s+LCBjb25zdCBTdHJpbmcmIG1vZGUpOwpAQCAtNzEsNyArNzEsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgICAgICBzdGF0aWMgUGFzc093blB0cjxUYXNrPiBjcmVhdGUo
UGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrLCBjb25zdCBTdHJp
bmcmIG1vZGUpOwogICAgICAgICAgICAgflRhc2soKSB7IH0KICAgICAgICAgICAgIGNvbnN0IFN0
cmluZyYgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQotICAgICAgICAgICAgdm9pZCBw
ZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KTsKKyAgICAgICAgICAg
IHZvaWQgcGVyZm9ybVRhc2soY29uc3QgV29ya2VyUnVuTG9vcCYsIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqKTsKIAogICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgVGFzayhQYXNzT3duUHRy
PFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2ssIGNvbnN0IFN0cmluZyYgbW9kZSk7
CkBAIC04NCw2ICs4NCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGZyaWVuZCBj
bGFzcyBSdW5Mb29wU2V0dXA7CiAgICAgICAgIE1lc3NhZ2VRdWV1ZVdhaXRSZXN1bHQgcnVuSW5N
b2RlKFdvcmtlckNvbnRleHQqLCBjb25zdCBNb2RlUHJlZGljYXRlJik7CiAKKyAgICAgICAgLy8g
UnVucyBhbnkgY2xlYW4gdXAgdGFza3MgdGhhdCBhcmUgY3VycmVudGx5IGluIHRoZSBxdWV1ZSBh
bmQgcmV0dXJucy4KKyAgICAgICAgLy8gVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiB0
aGUgY29udGV4dCBpcyBjbG9zZWQgb3IgbG9vcCBoYXMgYmVlbiB0ZXJtaW5hdGVkLgorICAgICAg
ICB2b2lkIHJ1bkNsZWFudXBUYXNrcyhXb3JrZXJDb250ZXh0Kik7CisKICAgICAgICAgTWVzc2Fn
ZVF1ZXVlPFRhc2s+IG1fbWVzc2FnZVF1ZXVlOwogICAgICAgICBPd25QdHI8V29ya2VyU2hhcmVk
VGltZXI+IG1fc2hhcmVkVGltZXI7CiAgICAgICAgIGludCBtX25lc3RlZENvdW50OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwIGIvU291cmNlL1dl
YkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwCmluZGV4IGZmNWRmNjY2YzZhNWM2NzM1YjE4
YWFlNGU3YzRlN2FjMzk5NmIzZWEuLjk2ODJjZDU4M2I5YmUwODljN2RmYWJlMDUzYjMyMDk2MjVj
Mzk1MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5jcHAKQEAgLTE5NSw3
ICsxOTUsNiBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICAgICAgLy8gSXQncyBub3Qgc2FmZSB0byBj
YWxsIGNsZWFyU2NyaXB0IHVudGlsIGFsbCB0aGUgY2xlYW51cCB0YXNrcyBwb3N0ZWQgYnkgZnVu
Y3Rpb25zIGluaXRpYXRlZCBieSBXb3JrZXJUaHJlYWRTaHV0ZG93blN0YXJ0VGFzayBoYXZlIGNv
bXBsZXRlZC4KICAgICAgICAgd29ya2VyQ29udGV4dC0+Y2xlYXJTY3JpcHQoKTsKLSAgICAgICAg
d29ya2VyQ29udGV4dC0+dGhyZWFkKCktPnJ1bkxvb3AoKS50ZXJtaW5hdGUoKTsKICAgICB9CiAK
ICAgICB2aXJ0dWFsIGJvb2wgaXNDbGVhbnVwVGFzaygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
QEAgLTI1MiwxMyArMjUxLDkgQEAgdm9pZCBXb3JrZXJUaHJlYWQ6OnN0b3AoKQogI2lmIEVOQUJM
RShTUUxfREFUQUJBU0UpCiAgICAgICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmludGVy
cnVwdEFsbERhdGFiYXNlc0ZvckNvbnRleHQobV93b3JrZXJDb250ZXh0LmdldCgpKTsKICNlbmRp
ZgotCi0gICAgLy8gRklYTUU6IFJ1ZGVseSBraWxsaW5nIHRoZSB0aHJlYWQgd29uJ3Qgd29yayB3
aGVuIHdlIGFsbG93IG5lc3RlZCB3b3JrZXJzLCBiZWNhdXNlIHRoZXkgd2lsbCB0cnkgdG8gcG9z
dCBub3RpZmljYXRpb25zIG9mIHRoZWlyIGRlc3RydWN0aW9uLgotICAgIC8vIFRoaXMgY2FuIGxp
a2VseSB1c2UgdGhlIHNhbWUgbWVjaGFuaXNtIGFzIHVzZWQgZm9yIGRhdGFiYXNlcyBhYm92ZS4K
LQogICAgICAgICBtX3J1bkxvb3AucG9zdFRhc2soV29ya2VyVGhyZWFkU2h1dGRvd25TdGFydFRh
c2s6OmNyZWF0ZSgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbV9ydW5Mb29wLnRlcm1pbmF0ZSgp
OworICAgIH0KKyAgICBtX3J1bkxvb3AudGVybWluYXRlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwppbmRleCA1Zjk0YTg0MjUwNTZiMzIzYmFkYzkzNGI3OWRiMjI3MmIwODA4ZGFj
Li41NmI0OGRlZjdmZDc5NjRhMWQwMGU2NDZhMGMzNzFmMTY4MDA5NzVhIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTUgQEAKKzIwMTEtMTItMDcgIERhdmlkIExldmluICA8bGV2aW5AY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJlZ3Jlc3Npb24ocjUzNTk1KTogU3luYyB4aHIgcmVxdWVzdHMgaW4gd29ya2Vy
cyBhcmVuJ3QgdGVybWluYXRlZCBvbiB3b3JrZXIgY2xvc2UuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTY5NQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogaHR0cC90ZXN0cy93b3JrZXJzL3Jlc291cmNl
cy93b3JrZXItdXRpbC5qczogQWRkZWQuCisgICAgICAgIENvcGllZCBmcm9tIGZhc3Qvd29ya2Vy
cy9yZXNvdXJjZXMvd29ya2VyLXV0aWwuanMKKyAgICAgICAgKiBodHRwL3Rlc3RzL3htbGh0dHBy
ZXF1ZXN0L3dvcmtlcnMvYWJvcnQtZXhjZXB0aW9uLWFzc2VydC5odG1sOgorICAgICAgICBNYWtl
IHRoZSB0ZXN0IHdhaXQgZm9yIGFsbCB3b3JrZXJzIHRvIGV4aXQgYmVmb3JlIGZpbmlzaGluZy4K
KwogMjAxMS0xMi0wNSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAg
ICBSRUdSRVNTSU9OKHIxMDE5NDkpOiBjc3MzL2JkaS1lbGVtZW50Lmh0bWwgZmFpbHMgb24gTGlv
bgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93b3JrZXJzL3Jlc291cmNlcy93
b3JrZXItdXRpbC5qcyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd29ya2Vycy9yZXNvdXJjZXMv
d29ya2VyLXV0aWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjBlNzk5YTA5ZWNiOTM4ZGVlZmQ5ODQ1YzAwZjUz
YjgwZTc5YzZhNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvd29y
a2Vycy9yZXNvdXJjZXMvd29ya2VyLXV0aWwuanMKQEAgLTAsMCArMSw3MCBAQAorLy8gVXNlZnVs
IHV0aWxpdGllcyBmb3Igd29ya2VyIHRlc3RzCisKK2Z1bmN0aW9uIGxvZyhtZXNzYWdlKQorewor
ICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQiKS5pbm5lckhUTUwgKz0gbWVzc2Fn
ZSArICI8YnI+IjsKK30KKworZnVuY3Rpb24gZ2MoZm9yY2VBbGxvYykKK3sKKyAgICBpZiAodHlw
ZW9mIEdDQ29udHJvbGxlciAhPT0gInVuZGVmaW5lZCIpCisgICAgICAgIEdDQ29udHJvbGxlci5j
b2xsZWN0KCk7CisKKyAgICBpZiAodHlwZW9mIEdDQ29udHJvbGxlciA9PSAidW5kZWZpbmVkIiB8
fCBmb3JjZUFsbG9jKSB7CisgICAgICAgIGZ1bmN0aW9uIGdjUmVjKG4pIHsKKyAgICAgICAgICAg
IGlmIChuIDwgMSkKKyAgICAgICAgICAgICAgICByZXR1cm4ge307CisgICAgICAgICAgICB2YXIg
dGVtcCA9IHtpOiAiYWIiICsgaSArIChpIC8gMTAwMDAwKX07CisgICAgICAgICAgICB0ZW1wICs9
ICJmb28iOworICAgICAgICAgICAgZ2NSZWMobi0xKTsKKyAgICAgICAgfQorICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IDEwMDA7IGkrKykKKyAgICAgICAgICAgIGdjUmVjKDEwKQorICAgIH0K
K30KKworZnVuY3Rpb24gd2FpdFVudGlsV29ya2VyVGhyZWFkc0V4aXQoY2FsbGJhY2spCit7Cisg
ICAgd2FpdFVudGlsVGhyZWFkQ291bnRNYXRjaGVzKGNhbGxiYWNrLCAwKTsKK30KKworZnVuY3Rp
b24gd2FpdFVudGlsVGhyZWFkQ291bnRNYXRjaGVzKGNhbGxiYWNrLCBjb3VudCkKK3sKKyAgICAv
LyBXaGVuIHJ1bm5pbmcgaW4gYSBicm93c2VyLCBqdXN0IHdhaXQgZm9yIG9uZSBzZWNvbmQgdGhl
biBjYWxsIHRoZSBjYWxsYmFjay4KKyAgICBpZiAoIXdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikgeworICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBnYyh0cnVlKTsgY2FsbGJhY2so
KTsgfSwgMTAwMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobGF5b3V0VGVz
dENvbnRyb2xsZXIud29ya2VyVGhyZWFkQ291bnQgPT0gY291bnQpIHsKKyAgICAgICAgLy8gV29y
a2VyIHRocmVhZHMgaGF2ZSBleGl0ZWQuCisgICAgICAgIGNhbGxiYWNrKCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgLy8gUG9sbCB1bnRpbCB3b3JrZXIgdGhyZWFkcyBoYXZlIGJlZW4gR0MnZC9l
eGl0ZWQuCisgICAgICAgIC8vIEZvcmNlIGEgR0Mgd2l0aCBhIGJ1bmNoIG9mIGFsbG9jYXRpb25z
IHRvIHRyeSB0byBzY3JhbWJsZSB0aGUgc3RhY2sgYW5kIGZvcmNlIHdvcmtlciBvYmplY3RzIHRv
IGJlIGNvbGxlY3RlZC4KKyAgICAgICAgZ2ModHJ1ZSk7CisgICAgICAgIHNldFRpbWVvdXQoZnVu
Y3Rpb24oKSB7IHdhaXRVbnRpbFRocmVhZENvdW50TWF0Y2hlcyhjYWxsYmFjaywgY291bnQpOyB9
LCAxMCk7CisgICAgfQorfQorCitmdW5jdGlvbiBlbnN1cmVUaHJlYWRDb3VudE1hdGNoZXMoY2Fs
bGJhY2ssIGNvdW50KQoreworICAgIC8vIEp1c3Qgd2FpdCB1bnRpbCB0aGUgdGhyZWFkIGNvdW50
IG1hdGNoZXMsIHRoZW4gd2FpdCBhbm90aGVyIDEwMG1zIHRvIHNlZSBpZiBpdCBjaGFuZ2VzLCB0
aGVuIGZpcmUgdGhlIGNhbGxiYWNrLgorICAgIHdhaXRVbnRpbFRocmVhZENvdW50TWF0Y2hlcyhm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHdhaXRVbnRp
bFRocmVhZENvdW50TWF0Y2hlcyhjYWxsYmFjaywgY291bnQpOyB9LCAxMDApOworICAgICAgICB9
LCBjb3VudCk7Cit9CisKK2Z1bmN0aW9uIGRvbmUoKQoreworICAgIGlmICh3aW5kb3cuZGVidWcp
CisgICAgICAgIGRlYnVnKCc8YnI+PHNwYW4gY2xhc3M9InBhc3MiPlRFU1QgQ09NUExFVEU8L3Nw
YW4+Jyk7CisgICAgZWxzZQorICAgICAgICBsb2coIkRPTkUiKTsKKworICAgIC8vIENhbGwgbm90
aWZ5RG9uZSB2aWEgdGhlIHF1ZXVlIHNvIGFueSBwZW5kaW5nIGNvbnNvbGUgbWVzc2FnZXMvZXhj
ZXB0aW9ucyBhcmUgd3JpdHRlbiBvdXQgZmlyc3QuCisgICAgc2V0VGltZW91dChmdW5jdGlvbigp
IHsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9LCAwKTsKK30KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qvd29ya2Vycy9hYm9y
dC1leGNlcHRpb24tYXNzZXJ0Lmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHBy
ZXF1ZXN0L3dvcmtlcnMvYWJvcnQtZXhjZXB0aW9uLWFzc2VydC5odG1sCmluZGV4IGM4ZGFkM2Qz
MzgxYjI4MDQ5YmZjYWUyNjQyNDNiMWI5MGJjMDJkYjAuLjBmMGNjYjliZTg0OWMwOGEzOGExMDM0
MmY2N2MxZTM2ODRjNWZhZjcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1s
aHR0cHJlcXVlc3Qvd29ya2Vycy9hYm9ydC1leGNlcHRpb24tYXNzZXJ0Lmh0bWwKKysrIGIvTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC93b3JrZXJzL2Fib3J0LWV4Y2VwdGlv
bi1hc3NlcnQuaHRtbApAQCAtMiw2ICsyLDcgQEAKIDxib2R5PgogPHA+WG1sSHR0cFJlcXVlc3Qg
YWJvcnQgZXhjZXB0aW9uIHNob3VsZG4ndCBhc3NlcnQuPC9wPgogPHA+T24gc3VjY2VzcywgeW91
IHNob3VsZCBzZWUgYSBzaW5nbGUgUEFTUyBiZWxvdy48L3A+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
d29ya2Vycy9yZXNvdXJjZXMvd29ya2VyLXV0aWwuanMiPjwvc2NyaXB0PgogPHNjcmlwdD4KICAg
ICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CiAgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLmR1bXBBc1RleHQoKTsKQEAgLTI5LDYgKzMwLDExIEBACiAgICAgICAgIC8vIFRo
aXMgaXMgYW4gKHVubGlrbGV5KSByYWNlIGNvbmRpdGlvbiBoZXJlIGluIHRoYXQgdGhlIHdvcmtl
ciBtYXkgbm90IGhhdmUgc3RhcnRlZAogICAgICAgICAvLyB0aGUgc3luYyB4aHIgY2FsbCBhdCB0
aGlzIHBvaW50LCBidXQgaXQgaGFzIGJlZW4gZ3JlYXRseSBsZXNzZW5lZCBieSB0aGUgMTAwbXMg
ZGVsYXkuCiAgICAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTsKKyAgICAgICAgd2FpdFVudGlsV29y
a2VyVGhyZWFkc0V4aXQoZG9uZVdpdGhUZXN0KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBkb25l
V2l0aFRlc3QoKQorICAgIHsKICAgICAgICAgbG9nKCJQQVNTIik7CiAgICAgICAgIGlmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCiAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5ub3RpZnlEb25lKCk7Cg==
</data>
<flag name="review"
          id="117974"
          type_id="1"
          status="+"
          setter="zherczeg"
    />
          </attachment>
      

    </bug>

</bugzilla>