<?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>47072</bug_id>
          
          <creation_ts>2010-10-04 01:55:47 -0700</creation_ts>
          <short_desc>Implement http locking in NRWT</short_desc>
          <delta_ts>2010-10-12 10:13:12 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Gabor Rapcsanyi">rgabor</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abecsi</cc>
    
    <cc>dpranke</cc>
    
    <cc>eric</cc>
    
    <cc>ojan</cc>
    
    <cc>ossy</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>288843</commentid>
    <comment_count>0</comment_count>
    <who name="Gabor Rapcsanyi">rgabor</who>
    <bug_when>2010-10-04 01:55:47 -0700</bug_when>
    <thetext>NRWT doesn&apos;t have http lock option. It should be implemented like in ORWT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288844</commentid>
    <comment_count>1</comment_count>
      <attachid>69607</attachid>
    <who name="Gabor Rapcsanyi">rgabor</who>
    <bug_when>2010-10-04 02:07:07 -0700</bug_when>
    <thetext>Created attachment 69607
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288990</commentid>
    <comment_count>2</comment_count>
      <attachid>69607</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-10-04 10:09:00 -0700</bug_when>
    <thetext>Comment on attachment 69607
proposed patch

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

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:308
&gt; +        return max(self._stop_time - self._start_time - \
&gt; +                   self._http_lock_wait_time(), 0.0)

Nit: I don&apos;t think you need the \ here.  It should be implicit since you&apos;re in ().

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:350
&gt; +        self._canceled = True

Instead of setting _canceled directly, can you just call WatchableThread.cancel(self)?

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:362
&gt; +        if self._http_lock_wait_end == 0:
&gt; +            return time.time() - self._http_lock_wait_begin
&gt; +        return self._http_lock_wait_end - self._http_lock_wait_begin

If wait_for_httpd has not been set, won&apos;t we return time.time()?  That is, the default value for _http_lock_wait_end and _http_lock_wait_begin are 0.  This means that get_total_time() will return self._stop_time - self._start_time - time.time(), which seems incorrect.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:402
&gt; +                if self._options.wait_for_httpd and \
&gt; +                  self._current_dir == &quot;tests_to_http_lock&quot; and \
&gt; +                  not self._http_server_running:

Nit: () around conditions is preferred to using \.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/http_lock.py:34
&gt; +import os
&gt; +import sys
&gt; +import time
&gt; +import fcntl
&gt; +import signal
&gt; +import glob

Nit: please sort these alphabetically

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/http_lock.py:42
&gt; +        self._lock_path = &quot;/tmp&quot;
&gt; +        self._lock_file_prefix = &quot;WebKitHttpd.lock.&quot;
&gt; +        self._lock_file_path_prefix = os.path.join(self._lock_path,

Would it be better to use tempfile.gettempdir() instead of /tmp?  This would allows people to override the location by setting TEMPDIR.  On the other hand, apache uses /tmp/WebKit for some fimes.  If we don&apos;t use tempfile, we should at put the files in /tmp/WebKit/.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/http_lock.py:45
&gt; +        self._my_lock_file_name = &quot;&quot;

Nit: Drop the &quot;my&quot; in the variable name.  Maybe process_lock_file_name would be better?

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/http_lock.py:53
&gt; +        if not os.path.exists(lock_file_name):
&gt; +            return -1

Do we need this check?

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/http_lock.py:86
&gt; +            if not current_pid or \
&gt; +              not (sys.platform in (&apos;darwin&apos;, &apos;linux2&apos;) and \
&gt; +              self._check_pid(int(current_pid))):

Nit: use () for line continuation instead of \.  Also, you can do &quot;sys.platform not in (&apos;darwin&apos;, &apos;linux2&apos;)&quot;, which is a little easier to read.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289135</commentid>
    <comment_count>3</comment_count>
      <attachid>69679</attachid>
    <who name="Gabor Rapcsanyi">rgabor</who>
    <bug_when>2010-10-04 14:18:44 -0700</bug_when>
    <thetext>Created attachment 69679
proposed_patch_v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289136</commentid>
    <comment_count>4</comment_count>
    <who name="Gabor Rapcsanyi">rgabor</who>
    <bug_when>2010-10-04 14:19:43 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 69607 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=69607&amp;action=review
&gt;
&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:308
&gt; &gt; +        return max(self._stop_time - self._start_time - \
&gt; &gt; +                   self._http_lock_wait_time(), 0.0)
&gt;
&gt; Nit: I don&apos;t think you need the \ here.  It should be implicit since you&apos;re in ().
&gt;

Fixed.

&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:350
&gt; &gt; +        self._canceled = True
&gt;
&gt; Instead of setting _canceled directly, can you just call WatchableThread.cancel(self)?
&gt;

Fixed.

&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:362
&gt; &gt; +        if self._http_lock_wait_end == 0:
&gt; &gt; +            return time.time() - self._http_lock_wait_begin
&gt; &gt; +        return self._http_lock_wait_end - self._http_lock_wait_begin
&gt;
&gt; If wait_for_httpd has not been set, won&apos;t we return time.time()?  That is, the default value for _http_lock_wait_end and _http_lock_wait_begin are 0.  This means that get_total_time() will return self._stop_time - self._start_time - time.time(), which seems incorrect.
&gt;

You&apos;re right, I just missed that case.
Fixed.

&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:402
&gt; &gt; +                if self._options.wait_for_httpd and \
&gt; &gt; +                  self._current_dir == &quot;tests_to_http_lock&quot; and \
&gt; &gt; +                  not self._http_server_running:
&gt;
&gt; Nit: () around conditions is preferred to using \.
&gt;

Fixed.

&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/http_lock.py:34
&gt; &gt; +import os
&gt; &gt; +import sys
&gt; &gt; +import time
&gt; &gt; +import fcntl
&gt; &gt; +import signal
&gt; &gt; +import glob
&gt;
&gt; Nit: please sort these alphabetically
&gt;

FIxed.

&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/http_lock.py:42
&gt; &gt; +        self._lock_path = &quot;/tmp&quot;
&gt; &gt; +        self._lock_file_prefix = &quot;WebKitHttpd.lock.&quot;
&gt; &gt; +        self._lock_file_path_prefix = os.path.join(self._lock_path,
&gt;
&gt; Would it be better to use tempfile.gettempdir() instead of /tmp?  This would allows people to override the location by setting TEMPDIR.  On the other hand, apache uses /tmp/WebKit for some fimes.  If we don&apos;t use tempfile, we should at put the files in /tmp/WebKit/.
&gt;

Fixed to tempfile.gettempdir(). ORWT is use /tmp and I want NRWT to be able to work together with ORWT.

&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/http_lock.py:45
&gt; &gt; +        self._my_lock_file_name = &quot;&quot;
&gt;
&gt; Nit: Drop the &quot;my&quot; in the variable name.  Maybe process_lock_file_name would be better?
&gt;

Renamed.

&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/http_lock.py:53
&gt; &gt; +        if not os.path.exists(lock_file_name):
&gt; &gt; +            return -1
&gt;
&gt; Do we need this check?
&gt;

Not now, It just stayed in the code.
Fixed.

&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/http_lock.py:86
&gt; &gt; +            if not current_pid or \
&gt; &gt; +              not (sys.platform in (&apos;darwin&apos;, &apos;linux2&apos;) and \
&gt; &gt; +              self._check_pid(int(current_pid))):
&gt;
&gt; Nit: use () for line continuation instead of \.  Also, you can do &quot;sys.platform not in (&apos;darwin&apos;, &apos;linux2&apos;)&quot;, which is a little easier to read.

Now it&apos;s more readable.

Furthermore, I bring _clean_up_http_lock() in dump_render_tree_thread.py earlier because it will run another tests not just https.
So after the http tests it will clean up the lock.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289140</commentid>
    <comment_count>5</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-10-04 14:27:08 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created an attachment (id=69607) [details]
&gt; proposed patch

the HttpLock code looks generally pretty good, but doesn&apos;t actually have anything to do with HTTP; it&apos;s a generic file locking mechanism.  Can we rename the file? 

More importantly, the code is conceptually a platform-specific (or port-specific) abstraction. It would be nice to move this file into the port/ directory and hang it off of the port object (like we do for the http_server code). That way ports don&apos;t need to implement this if it isn&apos;t necessary, or can implement something else as appropriate.

Lastly, to address Tony&apos;s suggestion about tempfile directory locations, I&apos;d suggest taking the directory as an argument in the constructor, and that way the port files can pass in the directory they&apos;d like to use.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289153</commentid>
    <comment_count>6</comment_count>
      <attachid>69679</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-10-04 14:40:50 -0700</bug_when>
    <thetext>Comment on attachment 69679
proposed_patch_v2

I realize that (a) this code is largely trying to mirror the algorithm in ORWT and (b) it&apos;s not usually webkit style to comment the code very heavily, but it would be good to have some comments here documenting the algorithm you&apos;re trying to follow. Also, this code needs unit tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289214</commentid>
    <comment_count>7</comment_count>
      <attachid>69679</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-10-04 15:27:56 -0700</bug_when>
    <thetext>Comment on attachment 69679
proposed_patch_v2

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

r- mainly because there are no tests

&gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:1609
&gt; +        optparse.make_option(&quot;--no-wait-for-httpd&quot;, action=&quot;store_false&quot;,
&gt; +            dest=&quot;wait_for_httpd&quot;, help=&quot;Do not use http locks.&quot;),

I realize you&apos;re just trying to match ORWT, but do you think we could get by without --no-wait-for-httpd ?

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:413
&gt; +                    elif self._http_server_running:
&gt; +                        self._clean_up_http_lock()

Why was this added?  Doesn&apos;t this say other threads should stop the http server?

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:560
&gt; +    def _clean_up_http_lock(self):

Do we need to call _clean_up_http_lock when the &quot;test_to_http_lock&quot; are done running?

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/http_lock.py:38
&gt; +class HttpLock(object):
&gt; +

I agree with Dirk that this file needs unittests and should include a class docstring.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/http_lock.py:98
&gt; +                self._process_lock_file_name = self._lock_file_path_prefix + \
&gt; +                                          str(self._next_lock_number())

Nit: () instead of \.  Also the indention looks a bit off.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292453</commentid>
    <comment_count>8</comment_count>
      <attachid>70429</attachid>
    <who name="Gabor Rapcsanyi">rgabor</who>
    <bug_when>2010-10-11 05:02:34 -0700</bug_when>
    <thetext>Created attachment 70429
proposed_patch_v3

I think the HttpLock name is better than a general name like ThreadLock, TestLock, ServerLock or etc. because we use this lock primarily for http tests locking. But if you have a better suggestion I can use that.
I put the HttpLock class to the port directory and now the drt_thread is reach it from the port object.
Also I put some comments into HttpLock and add a unittest for it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292674</commentid>
    <comment_count>9</comment_count>
      <attachid>70429</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-10-11 14:49:48 -0700</bug_when>
    <thetext>Comment on attachment 70429
proposed_patch_v3

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

&gt; WebKitTools/Scripts/webkitpy/layout_tests/port/base.py:48
&gt;  import apache_http_server
&gt;  import test_files
&gt; +import http_lock
&gt;  import http_server
&gt;  import websocket_server

Nit: sort these alphabetically

&gt; WebKitTools/Scripts/webkitpy/layout_tests/port/http_lock.py:113
&gt; +                self._process_lock_file_name = (self._lock_file_path_prefix +
&gt; +                                          str(self._next_lock_number()))

Nit: The indention looks weird here.  Either line it up with the ( in the previous line or just indent 4 spaces.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/port/http_lock_unittest.py:53
&gt; +        if first != second:
&gt; +            self.clean_all_lockfile()

This seems ok, although you could also use try/finally in each test.  I don&apos;t really care either way.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/port/http_lock_unittest.py:83
&gt; +        lock_file_list = [
&gt; +            self.lock_file_path_prefix + &quot;00&quot;,
&gt; +            self.lock_file_path_prefix + &quot;9&quot;,
&gt; +            self.lock_file_path_prefix + &quot;001&quot;,
&gt; +            self.lock_file_path_prefix + &quot;021&quot;,
&gt; +        ]

Nit: A tuple is a bit faster than using a list.  It also prevents unintended modification.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/port/http_lock_unittest.py:85
&gt; +        expected_number_list = [&quot;0&quot;, &quot;9&quot;, &quot;1&quot;, &quot;21&quot;]

Nit: tuple, and why not drop the &quot;&quot; and just make these ints (so you and avoid the cast below).

&gt; WebKitTools/Scripts/webkitpy/layout_tests/port/http_lock_unittest.py:89
&gt; +        for i in range(len(lock_file_list)):
&gt; +            self.assertEqual(self.http_lock_obj._extract_lock_number(lock_file_list[i]),
&gt; +                             int(expected_number_list[i]))

Nit: You could re-write this as:
for lock_file, expected in zip(lock_file_list, expected_number_list):
    self.assertEqual(self.http_lock_obj._extract_lock_number(lock_file), int(expected_number_list))</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292688</commentid>
    <comment_count>10</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-10-11 15:09:35 -0700</bug_when>
    <thetext>Can we get rid of --wait-for-httpd and just always wait for the lock? Only risk is if something goes south and the lock files aren&apos;t cleaned up, but I think we can deal with that if it actually starts to happen.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292725</commentid>
    <comment_count>11</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-10-11 15:50:15 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Can we get rid of --wait-for-httpd and just always wait for the lock? Only risk is if something goes south and the lock files aren&apos;t cleaned up, but I think we can deal with that if it actually starts to happen.

This sounds fine to me.  It could be a follow up patch.

It would be nice if hitting ctrl+c in the middle of http tests running would still cause the lock file to be cleaned up.  The only remaining case would be if you lost power while running http tests.  You could handle this by verifying that the pid in the file matches with an existing process, but it doesn&apos;t seem to be that big of a deal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292743</commentid>
    <comment_count>12</comment_count>
      <attachid>70429</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-10-11 16:12:44 -0700</bug_when>
    <thetext>Comment on attachment 70429
proposed_patch_v3

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

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:407
&gt; +

Please add the print_update(&quot;Starting ...&quot;) messages here that we have in run_webkit_tests. Frankly, it would be good to combine these two blocks of code to avoid repetition (same for the the _stop_http_lock() code).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292855</commentid>
    <comment_count>13</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-10-11 21:20:46 -0700</bug_when>
    <thetext>I support always locking.

Although ideally we&apos;ll change DRT to re-write the port numbers and then we won&apos;t need any of this.  It shouldn&apos;t be that hard since the WebKit API allows the loading delegate to intercept every network request and mutate it (at least on mac), we just need to do it one of these days. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292935</commentid>
    <comment_count>14</comment_count>
    <who name="Gabor Rapcsanyi">rgabor</who>
    <bug_when>2010-10-12 07:16:37 -0700</bug_when>
    <thetext>I&apos;ve made the changes what you suggested.
The patch has landed at https://trac.webkit.org/changeset/69578</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292940</commentid>
    <comment_count>15</comment_count>
      <attachid>70429</attachid>
    <who name="Gabor Rapcsanyi">rgabor</who>
    <bug_when>2010-10-12 07:23:25 -0700</bug_when>
    <thetext>Comment on attachment 70429
proposed_patch_v3

Modified patch landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292949</commentid>
    <comment_count>16</comment_count>
    <who name="Gabor Rapcsanyi">rgabor</who>
    <bug_when>2010-10-12 07:46:04 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 70429 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=70429&amp;action=review
&gt; 
&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:407
&gt; &gt; +
&gt; 
&gt; Please add the print_update(&quot;Starting ...&quot;) messages here that we have in run_webkit_tests. Frankly, it would be good to combine these two blocks of code to avoid repetition (same for the the _stop_http_lock() code).

I cannot use the printer object in dump_render_tree_thread.py.
In another bug I planning to make two method in base.py to start and stop the http and websocket servers together.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292964</commentid>
    <comment_count>17</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-10-12 09:27:00 -0700</bug_when>
    <thetext>This failed on Windows.  Here&apos;s the stack (http://build.webkit.org/builders/Chromium%20Win%20Release%20(Tests)/builds/3999/steps/layout-test/logs/stdio):


Traceback (most recent call last):
  File &quot;./WebKitTools/Scripts/new-run-webkit-tests&quot;, line 38, in &lt;module&gt;
    sys.exit(run_webkit_tests.main())
  File &quot;D:\google-windows-2\chromium-win-release-tests\build\WebKitTools\Scripts\webkitpy\layout_tests\run_webkit_tests.py&quot;, line 1730, in main
    port_obj = port.get(options.platform, options)
  File &quot;D:\google-windows-2\chromium-win-release-tests\build\WebKitTools\Scripts\webkitpy\layout_tests\port\factory.py&quot;, line 49, in get
    return _get_kwargs(**kwargs)
  File &quot;D:\google-windows-2\chromium-win-release-tests\build\WebKitTools\Scripts\webkitpy\layout_tests\port\factory.py&quot;, line 101, in _get_kwargs
    import chromium_win
  File &quot;D:\google-windows-2\chromium-win-release-tests\build\WebKitTools\Scripts\webkitpy\layout_tests\port\chromium_win.py&quot;, line 36, in &lt;module&gt;
    import chromium
  File &quot;D:\google-windows-2\chromium-win-release-tests\build\WebKitTools\Scripts\webkitpy\layout_tests\port\chromium.py&quot;, line 46, in &lt;module&gt;
    import base
  File &quot;D:\google-windows-2\chromium-win-release-tests\build\WebKitTools\Scripts\webkitpy\layout_tests\port\base.py&quot;, line 45, in &lt;module&gt;
    import http_lock
  File &quot;D:\google-windows-2\chromium-win-release-tests\build\WebKitTools\Scripts\webkitpy\layout_tests\port\http_lock.py&quot;, line 31, in &lt;module&gt;
    import fcntl
ImportError: No module named fcntl



We&apos;re going to revert, sorry!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292985</commentid>
    <comment_count>18</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-10-12 10:13:12 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; 
&gt; We&apos;re going to revert, sorry!

Nevermind, fixed it in http://trac.webkit.org/changeset/69585 .</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69607</attachid>
            <date>2010-10-04 02:07:07 -0700</date>
            <delta_ts>2010-10-04 14:18:44 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>http_lock.patch</filename>
            <type>text/plain</type>
            <size>13437</size>
            <attacher name="Gabor Rapcsanyi">rgabor</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDY5MDAzKQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMTAtMDQgIEdhYm9yIFJhcGNzYW55aSAg
PHJnYWJvckBpbmYudS1zemVnZWQuaHU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IGh0dHAgbG9ja2luZyBpbiBOUldULgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDcwNzIKKworICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVu
ZGVyX3RyZWVfdGhyZWFkLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL2h0dHBfbG9jay5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weToKKwogMjAxMC0xMC0w
MyAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtl
IHN1cmUgdG8gZW50ZXIgYWxsIHRlc3RzIHdoZW4gY3JlYXRpbmcgdGhlIGRhdGFiYXNlCkluZGV4
OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rl
c3RzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkJKHJldmlzaW9uIDY5MDAxKQorKysgV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQkod29y
a2luZyBjb3B5KQpAQCAtNzAzLDYgKzcwMywxMCBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAg
ICAiIiJSZXR1cm5zIHdoZXRoZXIgdGhlIHRlc3QgcnVubmVyIG5lZWRzIGFuIEhUVFAgc2VydmVy
LiIiIgogICAgICAgICByZXR1cm4gc2VsZi5fY29udGFpbnNfdGVzdHMoc2VsZi5IVFRQX1NVQkRJ
UikKIAorICAgIGRlZiBuZWVkc193ZWJzb2NrZXQoc2VsZik6CisgICAgICAgICIiIlJldHVybnMg
d2hldGhlciB0aGUgdGVzdCBydW5uZXIgbmVlZHMgYSBXRUJTT0NLRVQgc2VydmVyLiIiIgorICAg
ICAgICByZXR1cm4gc2VsZi5fY29udGFpbnNfdGVzdHMoc2VsZi5XRUJTT0NLRVRfU1VCRElSKQor
CiAgICAgZGVmIHNldF91cF9ydW4oc2VsZik6CiAgICAgICAgICIiIkNvbmZpZ3VyZXMgdGhlIHN5
c3RlbSB0byBiZSByZWFkeSB0byBydW4gdGVzdHMuCiAKQEAgLTczNSwxNCArNzM5LDE2IEBAIGNs
YXNzIFRlc3RSdW5uZXI6CiAgICAgICAgIGlmIG5vdCByZXN1bHRfc3VtbWFyeToKICAgICAgICAg
ICAgIHJldHVybiBOb25lCiAKLSAgICAgICAgaWYgc2VsZi5uZWVkc19odHRwKCk6Ci0gICAgICAg
ICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgnU3RhcnRpbmcgSFRUUCBzZXJ2ZXIgLi4u
JykKLSAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RhcnRfaHR0cF9zZXJ2ZXIoKQotCi0gICAgICAg
IGlmIHNlbGYuX2NvbnRhaW5zX3Rlc3RzKHNlbGYuV0VCU09DS0VUX1NVQkRJUik6Ci0gICAgICAg
ICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgnU3RhcnRpbmcgV2ViU29ja2V0IHNlcnZl
ciAuLi4nKQotICAgICAgICAgICAgc2VsZi5fcG9ydC5zdGFydF93ZWJzb2NrZXRfc2VydmVyKCkK
LSAgICAgICAgICAgICMgc2VsZi5fd2Vic29ja2V0X3NlY3VyZV9zZXJ2ZXIuU3RhcnQoKQorICAg
ICAgICAjIERvIG5vdCBzdGFydCB3aGVuIGh0dHAgbG9ja2luZyBpcyBlbmFibGVkLgorICAgICAg
ICBpZiBub3Qgc2VsZi5fb3B0aW9ucy53YWl0X2Zvcl9odHRwZDoKKyAgICAgICAgICAgIGlmIHNl
bGYubmVlZHNfaHR0cCgpOgorICAgICAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBk
YXRlKCdTdGFydGluZyBIVFRQIHNlcnZlciAuLi4nKQorICAgICAgICAgICAgICAgIHNlbGYuX3Bv
cnQuc3RhcnRfaHR0cF9zZXJ2ZXIoKQorCisgICAgICAgICAgICBpZiBzZWxmLm5lZWRzX3dlYnNv
Y2tldCgpOgorICAgICAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCdTdGFy
dGluZyBXZWJTb2NrZXQgc2VydmVyIC4uLicpCisgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5z
dGFydF93ZWJzb2NrZXRfc2VydmVyKCkKKyAgICAgICAgICAgICAgICAjIHNlbGYuX3dlYnNvY2tl
dF9zZWN1cmVfc2VydmVyLlN0YXJ0KCkKIAogICAgICAgICByZXR1cm4gcmVzdWx0X3N1bW1hcnkK
IApAQCAtODMzLDEwICs4MzksMTEgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgc3lzLnN0
ZG91dC5mbHVzaCgpCiAgICAgICAgIF9sb2cuZGVidWcoImZsdXNoaW5nIHN0ZGVyciIpCiAgICAg
ICAgIHN5cy5zdGRlcnIuZmx1c2goKQotICAgICAgICBfbG9nLmRlYnVnKCJzdG9wcGluZyBodHRw
IHNlcnZlciIpCi0gICAgICAgIHNlbGYuX3BvcnQuc3RvcF9odHRwX3NlcnZlcigpCi0gICAgICAg
IF9sb2cuZGVidWcoInN0b3BwaW5nIHdlYnNvY2tldCBzZXJ2ZXIiKQotICAgICAgICBzZWxmLl9w
b3J0LnN0b3Bfd2Vic29ja2V0X3NlcnZlcigpCisgICAgICAgIGlmIG5vdCBzZWxmLl9vcHRpb25z
LndhaXRfZm9yX2h0dHBkOgorICAgICAgICAgICAgX2xvZy5kZWJ1Zygic3RvcHBpbmcgaHR0cCBz
ZXJ2ZXIiKQorICAgICAgICAgICAgc2VsZi5fcG9ydC5zdG9wX2h0dHBfc2VydmVyKCkKKyAgICAg
ICAgICAgIF9sb2cuZGVidWcoInN0b3BwaW5nIHdlYnNvY2tldCBzZXJ2ZXIiKQorICAgICAgICAg
ICAgc2VsZi5fcG9ydC5zdG9wX3dlYnNvY2tldF9zZXJ2ZXIoKQogICAgICAgICBfbG9nLmRlYnVn
KCJzdG9wcGluZyBoZWxwZXIiKQogICAgICAgICBzZWxmLl9wb3J0LnN0b3BfaGVscGVyKCkKIApA
QCAtMTU5NSwxMyArMTYwMiwxNCBAQCBkZWYgcGFyc2VfYXJncyhhcmdzPU5vbmUpOgogICAgICAg
ICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1uby1yZWNvcmQtcmVzdWx0cyIsIGFjdGlvbj0ic3Rv
cmVfZmFsc2UiLAogICAgICAgICAgICAgZGVmYXVsdD1UcnVlLCBkZXN0PSJyZWNvcmRfcmVzdWx0
cyIsCiAgICAgICAgICAgICBoZWxwPSJEb24ndCByZWNvcmQgdGhlIHJlc3VsdHMuIiksCisgICAg
ICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXdhaXQtZm9yLWh0dHBkIiwgYWN0aW9uPSJzdG9y
ZV90cnVlIiwKKyAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsIGRlc3Q9IndhaXRfZm9yX2h0dHBk
IiwKKyAgICAgICAgICAgIGhlbHA9IldhaXQgZm9yIGh0dHAgbG9ja3MuIiksCisgICAgICAgIG9w
dHBhcnNlLm1ha2Vfb3B0aW9uKCItLW5vLXdhaXQtZm9yLWh0dHBkIiwgYWN0aW9uPSJzdG9yZV9m
YWxzZSIsCisgICAgICAgICAgICBkZXN0PSJ3YWl0X2Zvcl9odHRwZCIsIGhlbHA9IkRvIG5vdCB1
c2UgaHR0cCBsb2Nrcy4iKSwKICAgICAgICAgIyBvbGQtcnVuLXdlYmtpdC10ZXN0cyBhbHNvIGhh
cyBIVFRQIHRvZ2dsZSBvcHRpb25zOgogICAgICAgICAjIC0tW25vLV1odHRwICAgICAgICAgICAg
ICAgICAgICAgUnVuIChvciBkbyBub3QgcnVuKSBodHRwIHRlc3RzCiAgICAgICAgICMgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVmYXVsdDogcnVuKQotICAgICAgICAjIC0tW25v
LV13YWl0LWZvci1odHRwZCAgICAgICAgICAgV2FpdCBmb3IgaHR0cGQgaWYgc29tZSBvdGhlciB0
ZXN0Ci0gICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uIGlz
IHVzaW5nIGl0IGFscmVhZHkgKHNhbWUKLSAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFzIFdFQktJVF9XQUlUX0ZPUl9IVFRQRD0xKS4KLSAgICAgICAgIyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0OiAwKQogICAgIF0KIAogICAgIHRlc3Rf
b3B0aW9ucyA9IFsKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNr
YWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5CShyZXZpc2lvbiA2OTAwMSkKKysrIFdlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBf
cmVuZGVyX3RyZWVfdGhyZWFkLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogIyEv
dXNyL2Jpbi9lbnYgcHl0aG9uCiAjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR2Fib3IgUmFwY3NhbnlpIChy
Z2Fib3JAaW5mLnUtc3plZ2VkLmh1KSwgVW5pdmVyc2l0eSBvZiBTemVnZWQKICMKICMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTUwLDYgKzUxLDcgQEAgaW1wb3J0IHRpbWUKIGltcG9y
dCB0cmFjZWJhY2sKIAogaW1wb3J0IHRlc3RfZmFpbHVyZXMKK2ltcG9ydCBodHRwX2xvY2sKIAog
X2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3Bh
Y2thZ2UuIgogICAgICAgICAgICAgICAgICAgICAgICAgICJkdW1wX3JlbmRlcl90cmVlX3RocmVh
ZCIpCkBAIC0yNzYsNiArMjc4LDEwIEBAIGNsYXNzIFRlc3RTaGVsbFRocmVhZChXYXRjaGFibGVU
aHJlYWQpOgogICAgICAgICBzZWxmLl9udW1fdGVzdHMgPSAwCiAgICAgICAgIHNlbGYuX3N0YXJ0
X3RpbWUgPSAwCiAgICAgICAgIHNlbGYuX3N0b3BfdGltZSA9IDAKKyAgICAgICAgc2VsZi5faHR0
cF9zZXJ2ZXJfbG9jayA9IE5vbmUKKyAgICAgICAgc2VsZi5faHR0cF9zZXJ2ZXJfcnVubmluZyA9
IEZhbHNlCisgICAgICAgIHNlbGYuX2h0dHBfbG9ja193YWl0X2JlZ2luID0gMAorICAgICAgICBz
ZWxmLl9odHRwX2xvY2tfd2FpdF9lbmQgPSAwCiAKICAgICAgICAgIyBDdXJyZW50IGRpcmVjdG9y
eSBvZiB0ZXN0cyB3ZSdyZSBydW5uaW5nLgogICAgICAgICBzZWxmLl9jdXJyZW50X2RpciA9IE5v
bmUKQEAgLTI5OCw3ICszMDQsOCBAQCBjbGFzcyBUZXN0U2hlbGxUaHJlYWQoV2F0Y2hhYmxlVGhy
ZWFkKToKICAgICAgICAgcmV0dXJuIHNlbGYuX3Rlc3RfcmVzdWx0cwogCiAgICAgZGVmIGdldF90
b3RhbF90aW1lKHNlbGYpOgotICAgICAgICByZXR1cm4gbWF4KHNlbGYuX3N0b3BfdGltZSAtIHNl
bGYuX3N0YXJ0X3RpbWUsIDAuMCkKKyAgICAgICAgcmV0dXJuIG1heChzZWxmLl9zdG9wX3RpbWUg
LSBzZWxmLl9zdGFydF90aW1lIC0gXAorICAgICAgICAgICAgICAgICAgIHNlbGYuX2h0dHBfbG9j
a193YWl0X3RpbWUoKSwgMC4wKQogCiAgICAgZGVmIGdldF9udW1fdGVzdHMoc2VsZik6CiAgICAg
ICAgIHJldHVybiBzZWxmLl9udW1fdGVzdHMKQEAgLTMzNyw2ICszNDQsMjMgQEAgY2xhc3MgVGVz
dFNoZWxsVGhyZWFkKFdhdGNoYWJsZVRocmVhZCk6CiAgICAgICAgIGRvIG11bHRpLXRocmVhZGVk
IGRlYnVnZ2luZy4iIiIKICAgICAgICAgc2VsZi5fcnVuKHRlc3RfcnVubmVyLCByZXN1bHRfc3Vt
bWFyeSkKIAorICAgIGRlZiBjYW5jZWwoc2VsZik6CisgICAgICAgICIiIkNsZWFuIHVwIGh0dHAg
bG9jayBhbmQgc2V0IGEgZmxhZyB0ZWxsaW5nIHRoaXMgdGhyZWFkIHRvIHF1aXQuIiIiCisgICAg
ICAgIHNlbGYuX2NsZWFuX3VwX2h0dHBfbG9jaygpCisgICAgICAgIHNlbGYuX2NhbmNlbGVkID0g
VHJ1ZQorCisgICAgZGVmIG5leHRfdGltZW91dChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRo
ZSB0aW1lIHRoZSB0ZXN0IGlzIHN1cHBvc2VkIHRvIGZpbmlzaCBieS4iIiIKKyAgICAgICAgaWYg
c2VsZi5fbmV4dF90aW1lb3V0OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX25leHRfdGltZW91
dCArIHNlbGYuX2h0dHBfbG9ja193YWl0X3RpbWUoKQorICAgICAgICByZXR1cm4gc2VsZi5fbmV4
dF90aW1lb3V0CisKKyAgICBkZWYgX2h0dHBfbG9ja193YWl0X3RpbWUoc2VsZik6CisgICAgICAg
ICIiIlJldHVybiB0aGUgdGltZSB3aGF0IGh0dHAgbG9ja2luZyB0YWtlcy4iIiIKKyAgICAgICAg
aWYgc2VsZi5faHR0cF9sb2NrX3dhaXRfZW5kID09IDA6CisgICAgICAgICAgICByZXR1cm4gdGlt
ZS50aW1lKCkgLSBzZWxmLl9odHRwX2xvY2tfd2FpdF9iZWdpbgorICAgICAgICByZXR1cm4gc2Vs
Zi5faHR0cF9sb2NrX3dhaXRfZW5kIC0gc2VsZi5faHR0cF9sb2NrX3dhaXRfYmVnaW4KKwogICAg
IGRlZiBfcnVuKHNlbGYsIHRlc3RfcnVubmVyLCByZXN1bHRfc3VtbWFyeSk6CiAgICAgICAgICIi
Ik1haW4gd29yayBlbnRyeSBwb2ludCBvZiB0aGUgdGhyZWFkLiBCYXNpY2FsbHkgd2UgcHVsbCB1
cmxzIGZyb20gdGhlCiAgICAgICAgIGZpbGVuYW1lIHF1ZXVlIGFuZCBydW4gdGhlIHRlc3RzIHVu
dGlsIHdlIHJ1biBvdXQgb2YgdXJscy4KQEAgLTM2OCwxNSArMzkyLDI4IEBAIGNsYXNzIFRlc3RT
aGVsbFRocmVhZChXYXRjaGFibGVUaHJlYWQpOgogICAgICAgICAgICAgICAgICAgICBzZWxmLl9j
dXJyZW50X2Rpciwgc2VsZi5fZmlsZW5hbWVfbGlzdCA9IFwKICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGYuX2ZpbGVuYW1lX2xpc3RfcXVldWUuZ2V0X25vd2FpdCgpCiAgICAgICAgICAgICAg
ICAgZXhjZXB0IFF1ZXVlLkVtcHR5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9jbGVhbl91
cF9odHRwX2xvY2soKQogICAgICAgICAgICAgICAgICAgICBzZWxmLl9raWxsX2R1bXBfcmVuZGVy
X3RyZWUoKQogICAgICAgICAgICAgICAgICAgICB0ZXN0c19ydW5fZmlsZS5jbG9zZSgpCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybgogCisgICAgICAgICAgICAgICAgaWYgc2VsZi5fb3B0aW9u
cy53YWl0X2Zvcl9odHRwZCBhbmQgXAorICAgICAgICAgICAgICAgICAgc2VsZi5fY3VycmVudF9k
aXIgPT0gInRlc3RzX3RvX2h0dHBfbG9jayIgYW5kIFwKKyAgICAgICAgICAgICAgICAgIG5vdCBz
ZWxmLl9odHRwX3NlcnZlcl9ydW5uaW5nOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9odHRw
X2xvY2tfd2FpdF9iZWdpbiA9IHRpbWUudGltZSgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYu
X2h0dHBfc2VydmVyX2xvY2sgPSBodHRwX2xvY2suSHR0cExvY2soKQorICAgICAgICAgICAgICAg
ICAgICBzZWxmLl9odHRwX3NlcnZlcl9sb2NrLndhaXRfZm9yX2h0dHBkX2xvY2soKQorCisgICAg
ICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RhcnRfaHR0cF9zZXJ2ZXIoKQorICAgICAgICAg
ICAgICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X3dlYnNvY2tldF9zZXJ2ZXIoKQorCisgICAgICAg
ICAgICAgICAgICAgIHNlbGYuX2h0dHBfc2VydmVyX3J1bm5pbmcgPSBUcnVlCisgICAgICAgICAg
ICAgICAgICAgIHNlbGYuX2h0dHBfbG9ja193YWl0X2VuZCA9IHRpbWUudGltZSgpCisKICAgICAg
ICAgICAgICAgICBzZWxmLl9udW1fdGVzdHNfaW5fY3VycmVudF9kaXIgPSBsZW4oc2VsZi5fZmls
ZW5hbWVfbGlzdCkKICAgICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50X2Rpcl9zdGFydF90aW1l
ID0gdGltZS50aW1lKCkKIAogICAgICAgICAgICAgdGVzdF9pbmZvID0gc2VsZi5fZmlsZW5hbWVf
bGlzdC5wb3AoKQotCiAgICAgICAgICAgICAjIFdlIGhhdmUgYSB1cmwsIHJ1biB0ZXN0cy4KICAg
ICAgICAgICAgIGJhdGNoX2NvdW50ICs9IDEKICAgICAgICAgICAgIHNlbGYuX251bV90ZXN0cyAr
PSAxCkBAIC01MTcsNiArNTU0LDE0IEBAIGNsYXNzIFRlc3RTaGVsbFRocmVhZChXYXRjaGFibGVU
aHJlYWQpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGYuX29wdGlvbnMpCiAgICAgICAgICAgICBzZWxmLl9kcml2ZXIuc3RhcnQoKQogCisg
ICAgZGVmIF9jbGVhbl91cF9odHRwX2xvY2soc2VsZik6CisgICAgICAgICIiIlN0b3AgdGhlIHNl
cnZlcnMgYW5kIGNsZWFuIHVwIGh0dHAgbG9jay4iIiIKKyAgICAgICAgaWYgc2VsZi5faHR0cF9z
ZXJ2ZXJfcnVubmluZzoKKyAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RvcF9odHRwX3NlcnZlcigp
CisgICAgICAgICAgICBzZWxmLl9wb3J0LnN0b3Bfd2Vic29ja2V0X3NlcnZlcigpCisgICAgICAg
ICAgICBzZWxmLl9odHRwX3NlcnZlcl9sb2NrLmNsZWFudXBfaHR0cF9sb2NrKCkKKyAgICAgICAg
ICAgIHNlbGYuX2h0dHBfc2VydmVyX3J1bm5pbmcgPSBGYWxzZQorCiAgICAgZGVmIF9raWxsX2R1
bXBfcmVuZGVyX3RyZWUoc2VsZik6CiAgICAgICAgICIiIktpbGwgdGhlIER1bXBSZW5kZXJUcmVl
IHByb2Nlc3MgaWYgaXQncyBydW5uaW5nLiIiIgogICAgICAgICBpZiBzZWxmLl9kcml2ZXI6Cklu
ZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFj
a2FnZS9odHRwX2xvY2sucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvaHR0cF9sb2NrLnB5CShyZXZpc2lvbiAw
KQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3Bh
Y2thZ2UvaHR0cF9sb2NrLnB5CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMyBAQAorIyEvdXNy
L2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMCBHYWJvciBSYXBjc2FueWkgKHJn
YWJvckBpbmYudS1zemVnZWQuaHUpLCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorIyBDb3B5cmlnaHQg
KEMpIDIwMTAgQW5kcmFzIEJlY3NpIChhYmVjc2lAaW5mLnUtc3plZ2VkLmh1KSwgVW5pdmVyc2l0
eSBvZiBTemVnZWQKKyMKKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisj
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQor
IyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisjIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorIyBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisjIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorIyBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisjIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1l
CitpbXBvcnQgZmNudGwKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBnbG9iCisKKworY2xhc3MgSHR0
cExvY2sob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5f
bG9ja19wYXRoID0gIi90bXAiCisgICAgICAgIHNlbGYuX2xvY2tfZmlsZV9wcmVmaXggPSAiV2Vi
S2l0SHR0cGQubG9jay4iCisgICAgICAgIHNlbGYuX2xvY2tfZmlsZV9wYXRoX3ByZWZpeCA9IG9z
LnBhdGguam9pbihzZWxmLl9sb2NrX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9sb2NrX2ZpbGVfcHJlZml4KQorICAgICAgICBz
ZWxmLl9ndWFyZF9sb2NrX2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5fbG9ja19wYXRoLCAiV2Vi
S2l0LmxvY2siKQorICAgICAgICBzZWxmLl9teV9sb2NrX2ZpbGVfbmFtZSA9ICIiCisKKyAgICBk
ZWYgY2xlYW51cF9odHRwX2xvY2soc2VsZik6CisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNl
bGYuX215X2xvY2tfZmlsZV9uYW1lKToKKyAgICAgICAgICAgIG9zLnVubGluayhzZWxmLl9teV9s
b2NrX2ZpbGVfbmFtZSkKKworICAgIGRlZiBfZXh0cmFjdF9sb2NrX251bWJlcihzZWxmLCBsb2Nr
X2ZpbGVfbmFtZSk6CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhsb2NrX2ZpbGVfbmFt
ZSk6CisgICAgICAgICAgICByZXR1cm4gLTEKKyAgICAgICAgcHJlZml4X2xlbmd0aCA9IGxlbihz
ZWxmLl9sb2NrX2ZpbGVfcGF0aF9wcmVmaXgpCisgICAgICAgIHJldHVybiBpbnQobG9ja19maWxl
X25hbWVbcHJlZml4X2xlbmd0aDpdKQorCisgICAgZGVmIF9sb2NrX2ZpbGVfbGlzdChzZWxmKToK
KyAgICAgICAgbG9ja19saXN0ID0gZ2xvYi5nbG9iKHNlbGYuX2xvY2tfZmlsZV9wYXRoX3ByZWZp
eCArICcqJykKKyAgICAgICAgbG9ja19saXN0LnNvcnQoa2V5PXNlbGYuX2V4dHJhY3RfbG9ja19u
dW1iZXIpCisgICAgICAgIHJldHVybiBsb2NrX2xpc3QKKworICAgIGRlZiBfbmV4dF9sb2NrX251
bWJlcihzZWxmKToKKyAgICAgICAgbG9ja19saXN0ID0gc2VsZi5fbG9ja19maWxlX2xpc3QoKQor
ICAgICAgICBpZiBub3QgbG9ja19saXN0OgorICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAg
cmV0dXJuIHNlbGYuX2V4dHJhY3RfbG9ja19udW1iZXIobG9ja19saXN0Wy0xXSkgKyAxCisKKyAg
ICBkZWYgX2NoZWNrX3BpZChzZWxmLCBjdXJyZW50X3BpZCk6CisgICAgICAgIHRyeToKKyAgICAg
ICAgICAgIG9zLmtpbGwoY3VycmVudF9waWQsIDApCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgor
ICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1
cm4gVHJ1ZQorCisgICAgZGVmIF9jdXJlbnRfbG9ja19waWQoc2VsZik6CisgICAgICAgIGxvY2tf
bGlzdCA9IHNlbGYuX2xvY2tfZmlsZV9saXN0KCkKKyAgICAgICAgaWYgbm90IGxvY2tfbGlzdDoK
KyAgICAgICAgICAgIHJldHVybgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjdXJyZW50X2xv
Y2tfZmlsZSA9IG9wZW4obG9ja19saXN0WzBdLCAncicpCisgICAgICAgICAgICBjdXJyZW50X3Bp
ZCA9IGN1cnJlbnRfbG9ja19maWxlLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIGN1cnJlbnRfbG9j
a19maWxlLmNsb3NlKCkKKyAgICAgICAgICAgIGlmIG5vdCBjdXJyZW50X3BpZCBvciBcCisgICAg
ICAgICAgICAgIG5vdCAoc3lzLnBsYXRmb3JtIGluICgnZGFyd2luJywgJ2xpbnV4MicpIGFuZCBc
CisgICAgICAgICAgICAgIHNlbGYuX2NoZWNrX3BpZChpbnQoY3VycmVudF9waWQpKSk6CisgICAg
ICAgICAgICAgICAgb3MudW5saW5rKGxvY2tfbGlzdFswXSkKKyAgICAgICAgICAgICAgICByZXR1
cm4KKyAgICAgICAgZXhjZXB0IElPRXJyb3IsIE9TRXJyb3I6CisgICAgICAgICAgICByZXR1cm4K
KyAgICAgICAgcmV0dXJuIGludChjdXJyZW50X3BpZCkKKworICAgIGRlZiBfY3JlYXRlX2xvY2tf
ZmlsZShzZWxmKToKKyAgICAgICAgd2hpbGUoVHJ1ZSk6CisgICAgICAgICAgICB0cnk6CisgICAg
ICAgICAgICAgICAgc2VxdWVudGlhbF9ndWFyZF9sb2NrID0gb3Mub3BlbihzZWxmLl9ndWFyZF9s
b2NrX2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvcy5PX0NSRUFUIHwgb3MuT19OT05CTE9DSyB8IG9zLk9fRVhDTCkKKworICAgICAgICAgICAg
ICAgIHNlbGYuX215X2xvY2tfZmlsZV9uYW1lID0gc2VsZi5fbG9ja19maWxlX3BhdGhfcHJlZml4
ICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKHNlbGYu
X25leHRfbG9ja19udW1iZXIoKSkKKyAgICAgICAgICAgICAgICBsb2NrX2ZpbGUgPSBvcGVuKHNl
bGYuX215X2xvY2tfZmlsZV9uYW1lLCAndycpCisgICAgICAgICAgICAgICAgbG9ja19maWxlLndy
aXRlKHN0cihvcy5nZXRwaWQoKSkpCisgICAgICAgICAgICAgICAgbG9ja19maWxlLmNsb3NlKCkK
KyAgICAgICAgICAgICAgICBvcy5jbG9zZShzZXF1ZW50aWFsX2d1YXJkX2xvY2spCisgICAgICAg
ICAgICAgICAgb3MudW5saW5rKHNlbGYuX2d1YXJkX2xvY2tfZmlsZSkKKyAgICAgICAgICAgICAg
ICBicmVhaworICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgcGFz
cworCisgICAgZGVmIHdhaXRfZm9yX2h0dHBkX2xvY2soc2VsZik6CisgICAgICAgIHNlbGYuX2Ny
ZWF0ZV9sb2NrX2ZpbGUoKQorICAgICAgICB3aGlsZSBzZWxmLl9jdXJlbnRfbG9ja19waWQoKSAh
PSBvcy5nZXRwaWQoKToKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkK
</data>
<flag name="review"
          id="59315"
          type_id="1"
          status="-"
          setter="tony"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69679</attachid>
            <date>2010-10-04 14:18:44 -0700</date>
            <delta_ts>2010-10-11 05:02:34 -0700</delta_ts>
            <desc>proposed_patch_v2</desc>
            <filename>new_http.patch</filename>
            <type>text/plain</type>
            <size>13101</size>
            <attacher name="Gabor Rapcsanyi">rgabor</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDY5MDAzKQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMTAtMDQgIEdhYm9yIFJhcGNzYW55aSAg
PHJnYWJvckBpbmYudS1zemVnZWQuaHU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IGh0dHAgbG9ja2luZyBpbiBOUldULgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDcwNzIKKworICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVu
ZGVyX3RyZWVfdGhyZWFkLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL2h0dHBfbG9jay5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weToKKwogMjAxMC0xMC0w
MyAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtl
IHN1cmUgdG8gZW50ZXIgYWxsIHRlc3RzIHdoZW4gY3JlYXRpbmcgdGhlIGRhdGFiYXNlCkluZGV4
OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rl
c3RzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkJKHJldmlzaW9uIDY5MDAxKQorKysgV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQkod29y
a2luZyBjb3B5KQpAQCAtNzAzLDYgKzcwMywxMCBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAg
ICAiIiJSZXR1cm5zIHdoZXRoZXIgdGhlIHRlc3QgcnVubmVyIG5lZWRzIGFuIEhUVFAgc2VydmVy
LiIiIgogICAgICAgICByZXR1cm4gc2VsZi5fY29udGFpbnNfdGVzdHMoc2VsZi5IVFRQX1NVQkRJ
UikKIAorICAgIGRlZiBuZWVkc193ZWJzb2NrZXQoc2VsZik6CisgICAgICAgICIiIlJldHVybnMg
d2hldGhlciB0aGUgdGVzdCBydW5uZXIgbmVlZHMgYSBXRUJTT0NLRVQgc2VydmVyLiIiIgorICAg
ICAgICByZXR1cm4gc2VsZi5fY29udGFpbnNfdGVzdHMoc2VsZi5XRUJTT0NLRVRfU1VCRElSKQor
CiAgICAgZGVmIHNldF91cF9ydW4oc2VsZik6CiAgICAgICAgICIiIkNvbmZpZ3VyZXMgdGhlIHN5
c3RlbSB0byBiZSByZWFkeSB0byBydW4gdGVzdHMuCiAKQEAgLTczNSwxNCArNzM5LDE2IEBAIGNs
YXNzIFRlc3RSdW5uZXI6CiAgICAgICAgIGlmIG5vdCByZXN1bHRfc3VtbWFyeToKICAgICAgICAg
ICAgIHJldHVybiBOb25lCiAKLSAgICAgICAgaWYgc2VsZi5uZWVkc19odHRwKCk6Ci0gICAgICAg
ICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgnU3RhcnRpbmcgSFRUUCBzZXJ2ZXIgLi4u
JykKLSAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RhcnRfaHR0cF9zZXJ2ZXIoKQotCi0gICAgICAg
IGlmIHNlbGYuX2NvbnRhaW5zX3Rlc3RzKHNlbGYuV0VCU09DS0VUX1NVQkRJUik6Ci0gICAgICAg
ICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgnU3RhcnRpbmcgV2ViU29ja2V0IHNlcnZl
ciAuLi4nKQotICAgICAgICAgICAgc2VsZi5fcG9ydC5zdGFydF93ZWJzb2NrZXRfc2VydmVyKCkK
LSAgICAgICAgICAgICMgc2VsZi5fd2Vic29ja2V0X3NlY3VyZV9zZXJ2ZXIuU3RhcnQoKQorICAg
ICAgICAjIERvIG5vdCBzdGFydCB3aGVuIGh0dHAgbG9ja2luZyBpcyBlbmFibGVkLgorICAgICAg
ICBpZiBub3Qgc2VsZi5fb3B0aW9ucy53YWl0X2Zvcl9odHRwZDoKKyAgICAgICAgICAgIGlmIHNl
bGYubmVlZHNfaHR0cCgpOgorICAgICAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBk
YXRlKCdTdGFydGluZyBIVFRQIHNlcnZlciAuLi4nKQorICAgICAgICAgICAgICAgIHNlbGYuX3Bv
cnQuc3RhcnRfaHR0cF9zZXJ2ZXIoKQorCisgICAgICAgICAgICBpZiBzZWxmLm5lZWRzX3dlYnNv
Y2tldCgpOgorICAgICAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCdTdGFy
dGluZyBXZWJTb2NrZXQgc2VydmVyIC4uLicpCisgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5z
dGFydF93ZWJzb2NrZXRfc2VydmVyKCkKKyAgICAgICAgICAgICAgICAjIHNlbGYuX3dlYnNvY2tl
dF9zZWN1cmVfc2VydmVyLlN0YXJ0KCkKIAogICAgICAgICByZXR1cm4gcmVzdWx0X3N1bW1hcnkK
IApAQCAtODMzLDEwICs4MzksMTEgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKICAgICAgICAgc3lzLnN0
ZG91dC5mbHVzaCgpCiAgICAgICAgIF9sb2cuZGVidWcoImZsdXNoaW5nIHN0ZGVyciIpCiAgICAg
ICAgIHN5cy5zdGRlcnIuZmx1c2goKQotICAgICAgICBfbG9nLmRlYnVnKCJzdG9wcGluZyBodHRw
IHNlcnZlciIpCi0gICAgICAgIHNlbGYuX3BvcnQuc3RvcF9odHRwX3NlcnZlcigpCi0gICAgICAg
IF9sb2cuZGVidWcoInN0b3BwaW5nIHdlYnNvY2tldCBzZXJ2ZXIiKQotICAgICAgICBzZWxmLl9w
b3J0LnN0b3Bfd2Vic29ja2V0X3NlcnZlcigpCisgICAgICAgIGlmIG5vdCBzZWxmLl9vcHRpb25z
LndhaXRfZm9yX2h0dHBkOgorICAgICAgICAgICAgX2xvZy5kZWJ1Zygic3RvcHBpbmcgaHR0cCBz
ZXJ2ZXIiKQorICAgICAgICAgICAgc2VsZi5fcG9ydC5zdG9wX2h0dHBfc2VydmVyKCkKKyAgICAg
ICAgICAgIF9sb2cuZGVidWcoInN0b3BwaW5nIHdlYnNvY2tldCBzZXJ2ZXIiKQorICAgICAgICAg
ICAgc2VsZi5fcG9ydC5zdG9wX3dlYnNvY2tldF9zZXJ2ZXIoKQogICAgICAgICBfbG9nLmRlYnVn
KCJzdG9wcGluZyBoZWxwZXIiKQogICAgICAgICBzZWxmLl9wb3J0LnN0b3BfaGVscGVyKCkKIApA
QCAtMTU5NSwxMyArMTYwMiwxNCBAQCBkZWYgcGFyc2VfYXJncyhhcmdzPU5vbmUpOgogICAgICAg
ICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1uby1yZWNvcmQtcmVzdWx0cyIsIGFjdGlvbj0ic3Rv
cmVfZmFsc2UiLAogICAgICAgICAgICAgZGVmYXVsdD1UcnVlLCBkZXN0PSJyZWNvcmRfcmVzdWx0
cyIsCiAgICAgICAgICAgICBoZWxwPSJEb24ndCByZWNvcmQgdGhlIHJlc3VsdHMuIiksCisgICAg
ICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXdhaXQtZm9yLWh0dHBkIiwgYWN0aW9uPSJzdG9y
ZV90cnVlIiwKKyAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsIGRlc3Q9IndhaXRfZm9yX2h0dHBk
IiwKKyAgICAgICAgICAgIGhlbHA9IldhaXQgZm9yIGh0dHAgbG9ja3MuIiksCisgICAgICAgIG9w
dHBhcnNlLm1ha2Vfb3B0aW9uKCItLW5vLXdhaXQtZm9yLWh0dHBkIiwgYWN0aW9uPSJzdG9yZV9m
YWxzZSIsCisgICAgICAgICAgICBkZXN0PSJ3YWl0X2Zvcl9odHRwZCIsIGhlbHA9IkRvIG5vdCB1
c2UgaHR0cCBsb2Nrcy4iKSwKICAgICAgICAgIyBvbGQtcnVuLXdlYmtpdC10ZXN0cyBhbHNvIGhh
cyBIVFRQIHRvZ2dsZSBvcHRpb25zOgogICAgICAgICAjIC0tW25vLV1odHRwICAgICAgICAgICAg
ICAgICAgICAgUnVuIChvciBkbyBub3QgcnVuKSBodHRwIHRlc3RzCiAgICAgICAgICMgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVmYXVsdDogcnVuKQotICAgICAgICAjIC0tW25v
LV13YWl0LWZvci1odHRwZCAgICAgICAgICAgV2FpdCBmb3IgaHR0cGQgaWYgc29tZSBvdGhlciB0
ZXN0Ci0gICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uIGlz
IHVzaW5nIGl0IGFscmVhZHkgKHNhbWUKLSAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFzIFdFQktJVF9XQUlUX0ZPUl9IVFRQRD0xKS4KLSAgICAgICAgIyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0OiAwKQogICAgIF0KIAogICAgIHRlc3Rf
b3B0aW9ucyA9IFsKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNr
YWdlL2R1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLnB5CShyZXZpc2lvbiA2OTAwMSkKKysrIFdlYktp
dFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBf
cmVuZGVyX3RyZWVfdGhyZWFkLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogIyEv
dXNyL2Jpbi9lbnYgcHl0aG9uCiAjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR2Fib3IgUmFwY3NhbnlpIChy
Z2Fib3JAaW5mLnUtc3plZ2VkLmh1KSwgVW5pdmVyc2l0eSBvZiBTemVnZWQKICMKICMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTQ5LDYgKzUwLDcgQEAgaW1wb3J0IHRocmVhZGluZwog
aW1wb3J0IHRpbWUKIGltcG9ydCB0cmFjZWJhY2sKIAoraW1wb3J0IGh0dHBfbG9jawogaW1wb3J0
IHRlc3RfZmFpbHVyZXMKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ3ZWJraXRweS5sYXlv
dXRfdGVzdHMubGF5b3V0X3BhY2thZ2UuIgpAQCAtMjc2LDYgKzI3OCwxMCBAQCBjbGFzcyBUZXN0
U2hlbGxUaHJlYWQoV2F0Y2hhYmxlVGhyZWFkKToKICAgICAgICAgc2VsZi5fbnVtX3Rlc3RzID0g
MAogICAgICAgICBzZWxmLl9zdGFydF90aW1lID0gMAogICAgICAgICBzZWxmLl9zdG9wX3RpbWUg
PSAwCisgICAgICAgIHNlbGYuX2h0dHBfc2VydmVyX2xvY2sgPSBOb25lCisgICAgICAgIHNlbGYu
X2h0dHBfc2VydmVyX3J1bm5pbmcgPSBGYWxzZQorICAgICAgICBzZWxmLl9odHRwX2xvY2tfd2Fp
dF9iZWdpbiA9IDAKKyAgICAgICAgc2VsZi5faHR0cF9sb2NrX3dhaXRfZW5kID0gMAogCiAgICAg
ICAgICMgQ3VycmVudCBkaXJlY3Rvcnkgb2YgdGVzdHMgd2UncmUgcnVubmluZy4KICAgICAgICAg
c2VsZi5fY3VycmVudF9kaXIgPSBOb25lCkBAIC0yOTgsNyArMzA0LDggQEAgY2xhc3MgVGVzdFNo
ZWxsVGhyZWFkKFdhdGNoYWJsZVRocmVhZCk6CiAgICAgICAgIHJldHVybiBzZWxmLl90ZXN0X3Jl
c3VsdHMKIAogICAgIGRlZiBnZXRfdG90YWxfdGltZShzZWxmKToKLSAgICAgICAgcmV0dXJuIG1h
eChzZWxmLl9zdG9wX3RpbWUgLSBzZWxmLl9zdGFydF90aW1lLCAwLjApCisgICAgICAgIHJldHVy
biBtYXgoc2VsZi5fc3RvcF90aW1lIC0gc2VsZi5fc3RhcnRfdGltZSAtCisgICAgICAgICAgICAg
ICAgICAgc2VsZi5faHR0cF9sb2NrX3dhaXRfdGltZSgpLCAwLjApCiAKICAgICBkZWYgZ2V0X251
bV90ZXN0cyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX251bV90ZXN0cwpAQCAtMzM3LDYg
KzM0NCwyNSBAQCBjbGFzcyBUZXN0U2hlbGxUaHJlYWQoV2F0Y2hhYmxlVGhyZWFkKToKICAgICAg
ICAgZG8gbXVsdGktdGhyZWFkZWQgZGVidWdnaW5nLiIiIgogICAgICAgICBzZWxmLl9ydW4odGVz
dF9ydW5uZXIsIHJlc3VsdF9zdW1tYXJ5KQogCisgICAgZGVmIGNhbmNlbChzZWxmKToKKyAgICAg
ICAgIiIiQ2xlYW4gdXAgaHR0cCBsb2NrIGFuZCBzZXQgYSBmbGFnIHRlbGxpbmcgdGhpcyB0aHJl
YWQgdG8gcXVpdC4iIiIKKyAgICAgICAgc2VsZi5fY2xlYW5fdXBfaHR0cF9sb2NrKCkKKyAgICAg
ICAgV2F0Y2hhYmxlVGhyZWFkLmNhbmNlbChzZWxmKQorCisgICAgZGVmIG5leHRfdGltZW91dChz
ZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSB0aW1lIHRoZSB0ZXN0IGlzIHN1cHBvc2VkIHRv
IGZpbmlzaCBieS4iIiIKKyAgICAgICAgaWYgc2VsZi5fbmV4dF90aW1lb3V0OgorICAgICAgICAg
ICAgcmV0dXJuIHNlbGYuX25leHRfdGltZW91dCArIHNlbGYuX2h0dHBfbG9ja193YWl0X3RpbWUo
KQorICAgICAgICByZXR1cm4gc2VsZi5fbmV4dF90aW1lb3V0CisKKyAgICBkZWYgX2h0dHBfbG9j
a193YWl0X3RpbWUoc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgdGltZSB3aGF0IGh0dHAg
bG9ja2luZyB0YWtlcy4iIiIKKyAgICAgICAgaWYgbm90IHNlbGYuX2h0dHBfc2VydmVyX2xvY2s6
CisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBpZiBzZWxmLl9odHRwX2xvY2tfd2FpdF9l
bmQgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiB0aW1lLnRpbWUoKSAtIHNlbGYuX2h0dHBfbG9j
a193YWl0X2JlZ2luCisgICAgICAgIHJldHVybiBzZWxmLl9odHRwX2xvY2tfd2FpdF9lbmQgLSBz
ZWxmLl9odHRwX2xvY2tfd2FpdF9iZWdpbgorCiAgICAgZGVmIF9ydW4oc2VsZiwgdGVzdF9ydW5u
ZXIsIHJlc3VsdF9zdW1tYXJ5KToKICAgICAgICAgIiIiTWFpbiB3b3JrIGVudHJ5IHBvaW50IG9m
IHRoZSB0aHJlYWQuIEJhc2ljYWxseSB3ZSBwdWxsIHVybHMgZnJvbSB0aGUKICAgICAgICAgZmls
ZW5hbWUgcXVldWUgYW5kIHJ1biB0aGUgdGVzdHMgdW50aWwgd2UgcnVuIG91dCBvZiB1cmxzLgpA
QCAtMzcyLDYgKzM5OCwyMCBAQCBjbGFzcyBUZXN0U2hlbGxUaHJlYWQoV2F0Y2hhYmxlVGhyZWFk
KToKICAgICAgICAgICAgICAgICAgICAgdGVzdHNfcnVuX2ZpbGUuY2xvc2UoKQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4KIAorICAgICAgICAgICAgICAgIGlmIHNlbGYuX29wdGlvbnMud2Fp
dF9mb3JfaHR0cGQ6CisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX2N1cnJlbnRfZGlyID09
ICJ0ZXN0c190b19odHRwX2xvY2siOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faHR0
cF9sb2NrX3dhaXRfYmVnaW4gPSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgICAgICAgICAgICAg
c2VsZi5faHR0cF9zZXJ2ZXJfbG9jayA9IGh0dHBfbG9jay5IdHRwTG9jaygpCisgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxmLl9odHRwX3NlcnZlcl9sb2NrLndhaXRfZm9yX2h0dHBkX2xvY2so
KQorCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X2h0dHBfc2VydmVy
KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RhcnRfd2Vic29ja2V0X3Nl
cnZlcigpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2h0dHBfc2VydmVyX3J1bm5p
bmcgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9odHRwX2xvY2tfd2FpdF9l
bmQgPSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgICAgICAgICBlbGlmIHNlbGYuX2h0dHBfc2Vy
dmVyX3J1bm5pbmc6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9jbGVhbl91cF9odHRw
X2xvY2soKQorCiAgICAgICAgICAgICAgICAgc2VsZi5fbnVtX3Rlc3RzX2luX2N1cnJlbnRfZGly
ID0gbGVuKHNlbGYuX2ZpbGVuYW1lX2xpc3QpCiAgICAgICAgICAgICAgICAgc2VsZi5fY3VycmVu
dF9kaXJfc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCiAKQEAgLTUxNyw2ICs1NTcsMTQgQEAgY2xh
c3MgVGVzdFNoZWxsVGhyZWFkKFdhdGNoYWJsZVRocmVhZCk6CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucykKICAgICAgICAg
ICAgIHNlbGYuX2RyaXZlci5zdGFydCgpCiAKKyAgICBkZWYgX2NsZWFuX3VwX2h0dHBfbG9jayhz
ZWxmKToKKyAgICAgICAgIiIiU3RvcCB0aGUgc2VydmVycyBhbmQgY2xlYW4gdXAgaHR0cCBsb2Nr
LiIiIgorICAgICAgICBpZiBzZWxmLl9odHRwX3NlcnZlcl9ydW5uaW5nOgorICAgICAgICAgICAg
c2VsZi5fcG9ydC5zdG9wX2h0dHBfc2VydmVyKCkKKyAgICAgICAgICAgIHNlbGYuX3BvcnQuc3Rv
cF93ZWJzb2NrZXRfc2VydmVyKCkKKyAgICAgICAgICAgIHNlbGYuX2h0dHBfc2VydmVyX2xvY2su
Y2xlYW51cF9odHRwX2xvY2soKQorICAgICAgICAgICAgc2VsZi5faHR0cF9zZXJ2ZXJfcnVubmlu
ZyA9IEZhbHNlCisKICAgICBkZWYgX2tpbGxfZHVtcF9yZW5kZXJfdHJlZShzZWxmKToKICAgICAg
ICAgIiIiS2lsbCB0aGUgRHVtcFJlbmRlclRyZWUgcHJvY2VzcyBpZiBpdCdzIHJ1bm5pbmcuIiIi
CiAgICAgICAgIGlmIHNlbGYuX2RyaXZlcjoKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2h0dHBfbG9jay5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFj
a2FnZS9odHRwX2xvY2sucHkJKHJldmlzaW9uIDApCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9odHRwX2xvY2sucHkJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTExIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0
IChDKSAyMDEwIEdhYm9yIFJhcGNzYW55aSAocmdhYm9yQGluZi51LXN6ZWdlZC5odSksIFVuaXZl
cnNpdHkgb2YgU3plZ2VkCisjIENvcHlyaWdodCAoQykgMjAxMCBBbmRyYXMgQmVjc2kgKGFiZWNz
aUBpbmYudS1zemVnZWQuaHUpLCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorIworIyBBbGwgcmlnaHRz
IHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkg
T0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBT
WkVHRUQgT1IKKyMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisjIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisjIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyMgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQg
ZmNudGwKK2ltcG9ydCBnbG9iCitpbXBvcnQgb3MKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzeXMK
K2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHRpbWUKKworCitjbGFzcyBIdHRwTG9jayhvYmplY3Qp
OgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9sb2NrX3BhdGggPSB0
ZW1wZmlsZS5nZXR0ZW1wZGlyKCkKKyAgICAgICAgc2VsZi5fbG9ja19maWxlX3ByZWZpeCA9ICJX
ZWJLaXRIdHRwZC5sb2NrLiIKKyAgICAgICAgc2VsZi5fbG9ja19maWxlX3BhdGhfcHJlZml4ID0g
b3MucGF0aC5qb2luKHNlbGYuX2xvY2tfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2xvY2tfZmlsZV9wcmVmaXgpCisgICAgICAg
IHNlbGYuX2d1YXJkX2xvY2tfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLl9sb2NrX3BhdGgsICJX
ZWJLaXQubG9jayIpCisgICAgICAgIHNlbGYuX3Byb2Nlc3NfbG9ja19maWxlX25hbWUgPSAiIgor
CisgICAgZGVmIGNsZWFudXBfaHR0cF9sb2NrKHNlbGYpOgorICAgICAgICBpZiBvcy5wYXRoLmV4
aXN0cyhzZWxmLl9wcm9jZXNzX2xvY2tfZmlsZV9uYW1lKToKKyAgICAgICAgICAgIG9zLnVubGlu
ayhzZWxmLl9wcm9jZXNzX2xvY2tfZmlsZV9uYW1lKQorCisgICAgZGVmIF9leHRyYWN0X2xvY2tf
bnVtYmVyKHNlbGYsIGxvY2tfZmlsZV9uYW1lKToKKyAgICAgICAgcHJlZml4X2xlbmd0aCA9IGxl
bihzZWxmLl9sb2NrX2ZpbGVfcGF0aF9wcmVmaXgpCisgICAgICAgIHJldHVybiBpbnQobG9ja19m
aWxlX25hbWVbcHJlZml4X2xlbmd0aDpdKQorCisgICAgZGVmIF9sb2NrX2ZpbGVfbGlzdChzZWxm
KToKKyAgICAgICAgbG9ja19saXN0ID0gZ2xvYi5nbG9iKHNlbGYuX2xvY2tfZmlsZV9wYXRoX3By
ZWZpeCArICcqJykKKyAgICAgICAgbG9ja19saXN0LnNvcnQoa2V5PXNlbGYuX2V4dHJhY3RfbG9j
a19udW1iZXIpCisgICAgICAgIHJldHVybiBsb2NrX2xpc3QKKworICAgIGRlZiBfbmV4dF9sb2Nr
X251bWJlcihzZWxmKToKKyAgICAgICAgbG9ja19saXN0ID0gc2VsZi5fbG9ja19maWxlX2xpc3Qo
KQorICAgICAgICBpZiBub3QgbG9ja19saXN0OgorICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAg
ICAgcmV0dXJuIHNlbGYuX2V4dHJhY3RfbG9ja19udW1iZXIobG9ja19saXN0Wy0xXSkgKyAxCisK
KyAgICBkZWYgX2NoZWNrX3BpZChzZWxmLCBjdXJyZW50X3BpZCk6CisgICAgICAgIHRyeToKKyAg
ICAgICAgICAgIG9zLmtpbGwoY3VycmVudF9waWQsIDApCisgICAgICAgIGV4Y2VwdCBPU0Vycm9y
OgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBy
ZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9jdXJlbnRfbG9ja19waWQoc2VsZik6CisgICAgICAgIGxv
Y2tfbGlzdCA9IHNlbGYuX2xvY2tfZmlsZV9saXN0KCkKKyAgICAgICAgaWYgbm90IGxvY2tfbGlz
dDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjdXJyZW50
X2xvY2tfZmlsZSA9IG9wZW4obG9ja19saXN0WzBdLCAncicpCisgICAgICAgICAgICBjdXJyZW50
X3BpZCA9IGN1cnJlbnRfbG9ja19maWxlLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIGN1cnJlbnRf
bG9ja19maWxlLmNsb3NlKCkKKyAgICAgICAgICAgIGlmIG5vdCAoY3VycmVudF9waWQgYW5kCisg
ICAgICAgICAgICAgIHN5cy5wbGF0Zm9ybSBpbiAoJ2RhcndpbicsICdsaW51eDInKSBhbmQKKyAg
ICAgICAgICAgICAgc2VsZi5fY2hlY2tfcGlkKGludChjdXJyZW50X3BpZCkpKToKKyAgICAgICAg
ICAgICAgICBvcy51bmxpbmsobG9ja19saXN0WzBdKQorICAgICAgICAgICAgICAgIHJldHVybgor
ICAgICAgICBleGNlcHQgSU9FcnJvciwgT1NFcnJvcjoKKyAgICAgICAgICAgIHJldHVybgorICAg
ICAgICByZXR1cm4gaW50KGN1cnJlbnRfcGlkKQorCisgICAgZGVmIF9jcmVhdGVfbG9ja19maWxl
KHNlbGYpOgorICAgICAgICB3aGlsZShUcnVlKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAg
ICAgICAgICBzZXF1ZW50aWFsX2d1YXJkX2xvY2sgPSBvcy5vcGVuKHNlbGYuX2d1YXJkX2xvY2tf
ZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9z
Lk9fQ1JFQVQgfCBvcy5PX05PTkJMT0NLIHwgb3MuT19FWENMKQorCisgICAgICAgICAgICAgICAg
c2VsZi5fcHJvY2Vzc19sb2NrX2ZpbGVfbmFtZSA9IHNlbGYuX2xvY2tfZmlsZV9wYXRoX3ByZWZp
eCArIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihzZWxm
Ll9uZXh0X2xvY2tfbnVtYmVyKCkpCisgICAgICAgICAgICAgICAgbG9ja19maWxlID0gb3Blbihz
ZWxmLl9wcm9jZXNzX2xvY2tfZmlsZV9uYW1lLCAndycpCisgICAgICAgICAgICAgICAgbG9ja19m
aWxlLndyaXRlKHN0cihvcy5nZXRwaWQoKSkpCisgICAgICAgICAgICAgICAgbG9ja19maWxlLmNs
b3NlKCkKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShzZXF1ZW50aWFsX2d1YXJkX2xvY2spCisg
ICAgICAgICAgICAgICAgb3MudW5saW5rKHNlbGYuX2d1YXJkX2xvY2tfZmlsZSkKKyAgICAgICAg
ICAgICAgICBicmVhaworICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAg
ICAgcGFzcworCisgICAgZGVmIHdhaXRfZm9yX2h0dHBkX2xvY2soc2VsZik6CisgICAgICAgIHNl
bGYuX2NyZWF0ZV9sb2NrX2ZpbGUoKQorICAgICAgICB3aGlsZSBzZWxmLl9jdXJlbnRfbG9ja19w
aWQoKSAhPSBvcy5nZXRwaWQoKToKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkK
</data>
<flag name="review"
          id="59402"
          type_id="1"
          status="-"
          setter="tony"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70429</attachid>
            <date>2010-10-11 05:02:34 -0700</date>
            <delta_ts>2010-10-12 07:23:25 -0700</delta_ts>
            <desc>proposed_patch_v3</desc>
            <filename>new_http5.patch</filename>
            <type>text/plain</type>
            <size>20136</size>
            <attacher name="Gabor Rapcsanyi">rgabor</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDY5NDgwKQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAtMTAtMTEgIEdhYm9yIFJhcGNzYW55aSAg
PHJnYWJvckBpbmYudS1zemVnZWQuaHU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IGh0dHAgbG9ja2luZyBpbiBOUldULgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDcwNzIKKworICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVu
ZGVyX3RyZWVfdGhyZWFkLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvYmFzZS5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L2h0dHBfbG9jay5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9odHRwX2xvY2tfdW5pdHRlc3QucHk6IEFkZGVkLgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHk6CisKIDIw
MTAtMTAtMTEgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJl
dmlld2VkLgpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cnVuX3dlYmtpdF90ZXN0cy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CShyZXZpc2lvbiA2OTQ3OSkK
KysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRf
dGVzdHMucHkJKHdvcmtpbmcgY29weSkKQEAgLTcwNCw2ICs3MDQsMTAgQEAgY2xhc3MgVGVzdFJ1
bm5lcjoKICAgICAgICAgIiIiUmV0dXJucyB3aGV0aGVyIHRoZSB0ZXN0IHJ1bm5lciBuZWVkcyBh
biBIVFRQIHNlcnZlci4iIiIKICAgICAgICAgcmV0dXJuIHNlbGYuX2NvbnRhaW5zX3Rlc3RzKHNl
bGYuSFRUUF9TVUJESVIpCiAKKyAgICBkZWYgbmVlZHNfd2Vic29ja2V0KHNlbGYpOgorICAgICAg
ICAiIiJSZXR1cm5zIHdoZXRoZXIgdGhlIHRlc3QgcnVubmVyIG5lZWRzIGEgV0VCU09DS0VUIHNl
cnZlci4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NvbnRhaW5zX3Rlc3RzKHNlbGYuV0VCU09D
S0VUX1NVQkRJUikKKwogICAgIGRlZiBzZXRfdXBfcnVuKHNlbGYpOgogICAgICAgICAiIiJDb25m
aWd1cmVzIHRoZSBzeXN0ZW0gdG8gYmUgcmVhZHkgdG8gcnVuIHRlc3RzLgogCkBAIC03MzYsMTQg
Kzc0MCwxNiBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICBpZiBub3QgcmVzdWx0X3N1bW1h
cnk6CiAgICAgICAgICAgICByZXR1cm4gTm9uZQogCi0gICAgICAgIGlmIHNlbGYubmVlZHNfaHR0
cCgpOgotICAgICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUoJ1N0YXJ0aW5nIEhU
VFAgc2VydmVyIC4uLicpCi0gICAgICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X2h0dHBfc2VydmVy
KCkKLQotICAgICAgICBpZiBzZWxmLl9jb250YWluc190ZXN0cyhzZWxmLldFQlNPQ0tFVF9TVUJE
SVIpOgotICAgICAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUoJ1N0YXJ0aW5nIFdl
YlNvY2tldCBzZXJ2ZXIgLi4uJykKLSAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RhcnRfd2Vic29j
a2V0X3NlcnZlcigpCi0gICAgICAgICAgICAjIHNlbGYuX3dlYnNvY2tldF9zZWN1cmVfc2VydmVy
LlN0YXJ0KCkKKyAgICAgICAgIyBEbyBub3Qgc3RhcnQgd2hlbiBodHRwIGxvY2tpbmcgaXMgZW5h
YmxlZC4KKyAgICAgICAgaWYgbm90IHNlbGYuX29wdGlvbnMud2FpdF9mb3JfaHR0cGQ6CisgICAg
ICAgICAgICBpZiBzZWxmLm5lZWRzX2h0dHAoKToKKyAgICAgICAgICAgICAgICBzZWxmLl9wcmlu
dGVyLnByaW50X3VwZGF0ZSgnU3RhcnRpbmcgSFRUUCBzZXJ2ZXIgLi4uJykKKyAgICAgICAgICAg
ICAgICBzZWxmLl9wb3J0LnN0YXJ0X2h0dHBfc2VydmVyKCkKKworICAgICAgICAgICAgaWYgc2Vs
Zi5uZWVkc193ZWJzb2NrZXQoKToKKyAgICAgICAgICAgICAgICBzZWxmLl9wcmludGVyLnByaW50
X3VwZGF0ZSgnU3RhcnRpbmcgV2ViU29ja2V0IHNlcnZlciAuLi4nKQorICAgICAgICAgICAgICAg
IHNlbGYuX3BvcnQuc3RhcnRfd2Vic29ja2V0X3NlcnZlcigpCisgICAgICAgICAgICAgICAgIyBz
ZWxmLl93ZWJzb2NrZXRfc2VjdXJlX3NlcnZlci5TdGFydCgpCiAKICAgICAgICAgcmV0dXJuIHJl
c3VsdF9zdW1tYXJ5CiAKQEAgLTgzNCwxMCArODQwLDExIEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAg
ICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQogICAgICAgICBfbG9nLmRlYnVnKCJmbHVzaGluZyBz
dGRlcnIiKQogICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKLSAgICAgICAgX2xvZy5kZWJ1Zygi
c3RvcHBpbmcgaHR0cCBzZXJ2ZXIiKQotICAgICAgICBzZWxmLl9wb3J0LnN0b3BfaHR0cF9zZXJ2
ZXIoKQotICAgICAgICBfbG9nLmRlYnVnKCJzdG9wcGluZyB3ZWJzb2NrZXQgc2VydmVyIikKLSAg
ICAgICAgc2VsZi5fcG9ydC5zdG9wX3dlYnNvY2tldF9zZXJ2ZXIoKQorICAgICAgICBpZiBub3Qg
c2VsZi5fb3B0aW9ucy53YWl0X2Zvcl9odHRwZDoKKyAgICAgICAgICAgIF9sb2cuZGVidWcoInN0
b3BwaW5nIGh0dHAgc2VydmVyIikKKyAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RvcF9odHRwX3Nl
cnZlcigpCisgICAgICAgICAgICBfbG9nLmRlYnVnKCJzdG9wcGluZyB3ZWJzb2NrZXQgc2VydmVy
IikKKyAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RvcF93ZWJzb2NrZXRfc2VydmVyKCkKICAgICAg
ICAgX2xvZy5kZWJ1Zygic3RvcHBpbmcgaGVscGVyIikKICAgICAgICAgc2VsZi5fcG9ydC5zdG9w
X2hlbHBlcigpCiAKQEAgLTE1OTMsMTMgKzE2MDAsMTIgQEAgZGVmIHBhcnNlX2FyZ3MoYXJncz1O
b25lKToKICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tbm8tcmVjb3JkLXJlc3VsdHMi
LCBhY3Rpb249InN0b3JlX2ZhbHNlIiwKICAgICAgICAgICAgIGRlZmF1bHQ9VHJ1ZSwgZGVzdD0i
cmVjb3JkX3Jlc3VsdHMiLAogICAgICAgICAgICAgaGVscD0iRG9uJ3QgcmVjb3JkIHRoZSByZXN1
bHRzLiIpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS13YWl0LWZvci1odHRwZCIs
IGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgICAgICBkZWZhdWx0PUZhbHNlLCBkZXN0PSJ3
YWl0X2Zvcl9odHRwZCIsCisgICAgICAgICAgICBoZWxwPSJXYWl0IGZvciBodHRwIGxvY2tzLiIp
LAogICAgICAgICAjIG9sZC1ydW4td2Via2l0LXRlc3RzIGFsc28gaGFzIEhUVFAgdG9nZ2xlIG9w
dGlvbnM6CiAgICAgICAgICMgLS1bbm8tXWh0dHAgICAgICAgICAgICAgICAgICAgICBSdW4gKG9y
IGRvIG5vdCBydW4pIGh0dHAgdGVzdHMKICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChkZWZhdWx0OiBydW4pCi0gICAgICAgICMgLS1bbm8tXXdhaXQtZm9yLWh0dHBk
ICAgICAgICAgICBXYWl0IGZvciBodHRwZCBpZiBzb21lIG90aGVyIHRlc3QKLSAgICAgICAgIyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24gaXMgdXNpbmcgaXQgYWxyZWFk
eSAoc2FtZQotICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgV0VC
S0lUX1dBSVRfRk9SX0hUVFBEPTEpLgotICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKGRlZmF1bHQ6IDApCiAgICAgXQogCiAgICAgdGVzdF9vcHRpb25zID0gWwpJbmRl
eDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2th
Z2UvZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJf
dHJlZV90aHJlYWQucHkJKHJldmlzaW9uIDY5NDc5KQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90aHJl
YWQucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAjIS91c3IvYmluL2VudiBweXRo
b24KICMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjIENvcHlyaWdodCAoQykgMjAxMCBHYWJvciBSYXBjc2FueWkgKHJnYWJvckBpbmYudS1zemVn
ZWQuaHUpLCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQpAQCAtMjc2LDYgKzI3Nyw5IEBAIGNsYXNzIFRlc3RTaGVsbFRocmVhZChXYXRjaGFibGVU
aHJlYWQpOgogICAgICAgICBzZWxmLl9udW1fdGVzdHMgPSAwCiAgICAgICAgIHNlbGYuX3N0YXJ0
X3RpbWUgPSAwCiAgICAgICAgIHNlbGYuX3N0b3BfdGltZSA9IDAKKyAgICAgICAgc2VsZi5faGF2
ZV9odHRwX2xvY2sgPSBGYWxzZQorICAgICAgICBzZWxmLl9odHRwX2xvY2tfd2FpdF9iZWdpbiA9
IDAKKyAgICAgICAgc2VsZi5faHR0cF9sb2NrX3dhaXRfZW5kID0gMAogCiAgICAgICAgICMgQ3Vy
cmVudCBncm91cCBvZiB0ZXN0cyB3ZSdyZSBydW5uaW5nLgogICAgICAgICBzZWxmLl9jdXJyZW50
X2dyb3VwID0gTm9uZQpAQCAtMjk4LDcgKzMwMiw4IEBAIGNsYXNzIFRlc3RTaGVsbFRocmVhZChX
YXRjaGFibGVUaHJlYWQpOgogICAgICAgICByZXR1cm4gc2VsZi5fdGVzdF9yZXN1bHRzCiAKICAg
ICBkZWYgZ2V0X3RvdGFsX3RpbWUoc2VsZik6Ci0gICAgICAgIHJldHVybiBtYXgoc2VsZi5fc3Rv
cF90aW1lIC0gc2VsZi5fc3RhcnRfdGltZSwgMC4wKQorICAgICAgICByZXR1cm4gbWF4KHNlbGYu
X3N0b3BfdGltZSAtIHNlbGYuX3N0YXJ0X3RpbWUgLQorICAgICAgICAgICAgICAgICAgIHNlbGYu
X2h0dHBfbG9ja193YWl0X3RpbWUoKSwgMC4wKQogCiAgICAgZGVmIGdldF9udW1fdGVzdHMoc2Vs
Zik6CiAgICAgICAgIHJldHVybiBzZWxmLl9udW1fdGVzdHMKQEAgLTMzNyw2ICszNDIsMjUgQEAg
Y2xhc3MgVGVzdFNoZWxsVGhyZWFkKFdhdGNoYWJsZVRocmVhZCk6CiAgICAgICAgIGRvIG11bHRp
LXRocmVhZGVkIGRlYnVnZ2luZy4iIiIKICAgICAgICAgc2VsZi5fcnVuKHRlc3RfcnVubmVyLCBy
ZXN1bHRfc3VtbWFyeSkKIAorICAgIGRlZiBjYW5jZWwoc2VsZik6CisgICAgICAgICIiIkNsZWFu
IHVwIGh0dHAgbG9jayBhbmQgc2V0IGEgZmxhZyB0ZWxsaW5nIHRoaXMgdGhyZWFkIHRvIHF1aXQu
IiIiCisgICAgICAgIHNlbGYuX3N0b3BfaHR0cF9sb2NrKCkKKyAgICAgICAgV2F0Y2hhYmxlVGhy
ZWFkLmNhbmNlbChzZWxmKQorCisgICAgZGVmIG5leHRfdGltZW91dChzZWxmKToKKyAgICAgICAg
IiIiUmV0dXJuIHRoZSB0aW1lIHRoZSB0ZXN0IGlzIHN1cHBvc2VkIHRvIGZpbmlzaCBieS4iIiIK
KyAgICAgICAgaWYgc2VsZi5fbmV4dF90aW1lb3V0OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYu
X25leHRfdGltZW91dCArIHNlbGYuX2h0dHBfbG9ja193YWl0X3RpbWUoKQorICAgICAgICByZXR1
cm4gc2VsZi5fbmV4dF90aW1lb3V0CisKKyAgICBkZWYgX2h0dHBfbG9ja193YWl0X3RpbWUoc2Vs
Zik6CisgICAgICAgICIiIlJldHVybiB0aGUgdGltZSB3aGF0IGh0dHAgbG9ja2luZyB0YWtlcy4i
IiIKKyAgICAgICAgaWYgc2VsZi5faHR0cF9sb2NrX3dhaXRfYmVnaW4gPT0gMDoKKyAgICAgICAg
ICAgIHJldHVybiAwCisgICAgICAgIGlmIHNlbGYuX2h0dHBfbG9ja193YWl0X2VuZCA9PSAwOgor
ICAgICAgICAgICAgcmV0dXJuIHRpbWUudGltZSgpIC0gc2VsZi5faHR0cF9sb2NrX3dhaXRfYmVn
aW4KKyAgICAgICAgcmV0dXJuIHNlbGYuX2h0dHBfbG9ja193YWl0X2VuZCAtIHNlbGYuX2h0dHBf
bG9ja193YWl0X2JlZ2luCisKICAgICBkZWYgX3J1bihzZWxmLCB0ZXN0X3J1bm5lciwgcmVzdWx0
X3N1bW1hcnkpOgogICAgICAgICAiIiJNYWluIHdvcmsgZW50cnkgcG9pbnQgb2YgdGhlIHRocmVh
ZC4gQmFzaWNhbGx5IHdlIHB1bGwgdXJscyBmcm9tIHRoZQogICAgICAgICBmaWxlbmFtZSBxdWV1
ZSBhbmQgcnVuIHRoZSB0ZXN0cyB1bnRpbCB3ZSBydW4gb3V0IG9mIHVybHMuCkBAIC0zNjgsMTAg
KzM5MiwyNCBAQCBjbGFzcyBUZXN0U2hlbGxUaHJlYWQoV2F0Y2hhYmxlVGhyZWFkKToKICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5fY3VycmVudF9ncm91cCwgc2VsZi5fZmlsZW5hbWVfbGlzdCA9
IFwKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVuYW1lX2xpc3RfcXVldWUuZ2V0
X25vd2FpdCgpCiAgICAgICAgICAgICAgICAgZXhjZXB0IFF1ZXVlLkVtcHR5OgorICAgICAgICAg
ICAgICAgICAgICBzZWxmLl9zdG9wX2h0dHBfbG9jaygpCiAgICAgICAgICAgICAgICAgICAgIHNl
bGYuX2tpbGxfZHVtcF9yZW5kZXJfdHJlZSgpCiAgICAgICAgICAgICAgICAgICAgIHRlc3RzX3J1
bl9maWxlLmNsb3NlKCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCiAKKyAgICAgICAgICAg
ICAgICBpZiBzZWxmLl9vcHRpb25zLndhaXRfZm9yX2h0dHBkOgorICAgICAgICAgICAgICAgICAg
ICBpZiBzZWxmLl9jdXJyZW50X2dyb3VwID09ICJ0ZXN0c190b19odHRwX2xvY2siOgorICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZi5faHR0cF9sb2NrX3dhaXRfYmVnaW4gPSB0aW1lLnRpbWUo
KQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5hY3F1aXJlX2h0dHBfbG9jaygp
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RhcnRfaHR0cF9zZXJ2ZXIo
KQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5zdGFydF93ZWJzb2NrZXRfc2Vy
dmVyKCkKKworICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faGF2ZV9odHRwX2xvY2sgPSBU
cnVlCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9odHRwX2xvY2tfd2FpdF9lbmQgPSB0
aW1lLnRpbWUoKQorICAgICAgICAgICAgICAgICAgICBlbGlmIHNlbGYuX2hhdmVfaHR0cF9sb2Nr
OgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RvcF9odHRwX2xvY2soKQorCiAgICAg
ICAgICAgICAgICAgc2VsZi5fbnVtX3Rlc3RzX2luX2N1cnJlbnRfZ3JvdXAgPSBsZW4oc2VsZi5f
ZmlsZW5hbWVfbGlzdCkKICAgICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50X2dyb3VwX3N0YXJ0
X3RpbWUgPSB0aW1lLnRpbWUoKQogCkBAIC01MTcsNiArNTU1LDE0IEBAIGNsYXNzIFRlc3RTaGVs
bFRocmVhZChXYXRjaGFibGVUaHJlYWQpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMpCiAgICAgICAgICAgICBzZWxmLl9k
cml2ZXIuc3RhcnQoKQogCisgICAgZGVmIF9zdG9wX2h0dHBfbG9jayhzZWxmKToKKyAgICAgICAg
IiIiU3RvcCB0aGUgc2VydmVycyBhbmQgcmVsZWFzZSBodHRwIGxvY2suIiIiCisgICAgICAgIGlm
IHNlbGYuX2hhdmVfaHR0cF9sb2NrOgorICAgICAgICAgICAgc2VsZi5fcG9ydC5zdG9wX2h0dHBf
c2VydmVyKCkKKyAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RvcF93ZWJzb2NrZXRfc2VydmVyKCkK
KyAgICAgICAgICAgIHNlbGYuX3BvcnQucmVsZWFzZV9odHRwX2xvY2soKQorICAgICAgICAgICAg
c2VsZi5faGF2ZV9odHRwX2xvY2sgPSBGYWxzZQorCiAgICAgZGVmIF9raWxsX2R1bXBfcmVuZGVy
X3RyZWUoc2VsZik6CiAgICAgICAgICIiIktpbGwgdGhlIER1bXBSZW5kZXJUcmVlIHByb2Nlc3Mg
aWYgaXQncyBydW5uaW5nLiIiIgogICAgICAgICBpZiBzZWxmLl9kcml2ZXI6CkluZGV4OiBXZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9i
YXNlLnB5CShyZXZpc2lvbiA2OTQ3OSkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBA
QCBpbXBvcnQgdGltZQogCiBpbXBvcnQgYXBhY2hlX2h0dHBfc2VydmVyCiBpbXBvcnQgdGVzdF9m
aWxlcworaW1wb3J0IGh0dHBfbG9jawogaW1wb3J0IGh0dHBfc2VydmVyCiBpbXBvcnQgd2Vic29j
a2V0X3NlcnZlcgogCkBAIC05Miw2ICs5Myw3IEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICAg
ICAgc2VsZi5faHR0cF9zZXJ2ZXIgPSBOb25lCiAgICAgICAgIHNlbGYuX3dlYmtpdF9iYXNlX2Rp
ciA9IE5vbmUKICAgICAgICAgc2VsZi5fd2Vic29ja2V0X3NlcnZlciA9IE5vbmUKKyAgICAgICAg
c2VsZi5faHR0cF9sb2NrID0gTm9uZQogCiAgICAgZGVmIGRlZmF1bHRfY2hpbGRfcHJvY2Vzc2Vz
KHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIG51bWJlciBvZiBEdW1wUmVuZGVyVHJlZSBp
bnN0YW5jZXMgdG8gdXNlIGZvciB0aGlzCkBAIC01MDAsNiArNTAyLDEwIEBAIGNsYXNzIFBvcnQo
b2JqZWN0KToKICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnkpCiAg
ICAgICAgIHNlbGYuX3dlYnNvY2tldF9zZXJ2ZXIuc3RhcnQoKQogCisgICAgZGVmIGFjcXVpcmVf
aHR0cF9sb2NrKHNlbGYpOgorICAgICAgICBzZWxmLl9odHRwX2xvY2sgPSBodHRwX2xvY2suSHR0
cExvY2soTm9uZSkKKyAgICAgICAgc2VsZi5faHR0cF9sb2NrLndhaXRfZm9yX2h0dHBkX2xvY2so
KQorCiAgICAgZGVmIHN0b3BfaGVscGVyKHNlbGYpOgogICAgICAgICAiIiJTaHV0IGRvd24gdGhl
IHRlc3QgaGVscGVyIGlmIGl0IGlzIHJ1bm5pbmcuIERvIG5vdGhpbmcgaWYKICAgICAgICAgaXQg
aXNuJ3QsIG9yIGl0IGlzbid0IGF2YWlsYWJsZS4gSWYgYSBwb3J0IG92ZXJyaWRlcyBzdGFydF9o
ZWxwZXIoKQpAQCAtNTE4LDYgKzUyNCwxMCBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgICAg
IGlmIHNlbGYuX3dlYnNvY2tldF9zZXJ2ZXI6CiAgICAgICAgICAgICBzZWxmLl93ZWJzb2NrZXRf
c2VydmVyLnN0b3AoKQogCisgICAgZGVmIHJlbGVhc2VfaHR0cF9sb2NrKHNlbGYpOgorICAgICAg
ICBpZiBzZWxmLl9odHRwX2xvY2s6CisgICAgICAgICAgICBzZWxmLl9odHRwX2xvY2suY2xlYW51
cF9odHRwX2xvY2soKQorCiAgICAgZGVmIHRlc3RfZXhwZWN0YXRpb25zKHNlbGYpOgogICAgICAg
ICAiIiJSZXR1cm5zIHRoZSB0ZXN0IGV4cGVjdGF0aW9ucyBmb3IgdGhpcyBwb3J0LgogCkluZGV4
OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfbG9j
ay5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2h0dHBfbG9jay5weQkocmV2aXNpb24gMCkKKysrIFdlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9sb2NrLnB5CShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDEyNyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykg
MjAxMCBHYWJvciBSYXBjc2FueWkgKHJnYWJvckBpbmYudS1zemVnZWQuaHUpLCBVbml2ZXJzaXR5
IG9mIFN6ZWdlZAorIyBDb3B5cmlnaHQgKEMpIDIwMTAgQW5kcmFzIEJlY3NpIChhYmVjc2lAaW5m
LnUtc3plZ2VkLmh1KSwgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyMKKyMgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNa
RUdFRCBgYEFTIElTJycgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VE
IE9SCisjIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorIyBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorIyBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisjIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiVGhpcyBjbGFz
cyBoZWxwcyB0byBibG9jayBOUldUIHRocmVhZHMgd2hlbiBtb3JlIE5SV1RzIHJ1bgoraHR0cCBh
bmQgd2Vic29ja2V0IHRlc3RzIGluIGEgc2FtZSB0aW1lLiIiIgorCitpbXBvcnQgZmNudGwKK2lt
cG9ydCBnbG9iCitpbXBvcnQgb3MKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzeXMKK2ltcG9ydCB0
ZW1wZmlsZQoraW1wb3J0IHRpbWUKKworCitjbGFzcyBIdHRwTG9jayhvYmplY3QpOgorCisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIGxvY2tfcGF0aCwgbG9ja19maWxlX3ByZWZpeD0iV2ViS2l0SHR0
cGQubG9jay4iLAorICAgICAgICAgICAgICAgICBndWFyZF9sb2NrPSJXZWJLaXQubG9jayIpOgor
ICAgICAgICBpZiBub3QgbG9ja19wYXRoOgorICAgICAgICAgICAgc2VsZi5fbG9ja19wYXRoID0g
dGVtcGZpbGUuZ2V0dGVtcGRpcigpCisgICAgICAgIHNlbGYuX2xvY2tfZmlsZV9wcmVmaXggPSBs
b2NrX2ZpbGVfcHJlZml4CisgICAgICAgIHNlbGYuX2xvY2tfZmlsZV9wYXRoX3ByZWZpeCA9IG9z
LnBhdGguam9pbihzZWxmLl9sb2NrX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9sb2NrX2ZpbGVfcHJlZml4KQorICAgICAgICBz
ZWxmLl9ndWFyZF9sb2NrX2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5fbG9ja19wYXRoLCBndWFy
ZF9sb2NrKQorICAgICAgICBzZWxmLl9wcm9jZXNzX2xvY2tfZmlsZV9uYW1lID0gIiIKKworICAg
IGRlZiBjbGVhbnVwX2h0dHBfbG9jayhzZWxmKToKKyAgICAgICAgIiIiRGVsZXRlIHRoZSBsb2Nr
IGZpbGUgaWYgZXhpc3RzLiIiIgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLl9wcm9j
ZXNzX2xvY2tfZmlsZV9uYW1lKToKKyAgICAgICAgICAgIG9zLnVubGluayhzZWxmLl9wcm9jZXNz
X2xvY2tfZmlsZV9uYW1lKQorCisgICAgZGVmIF9leHRyYWN0X2xvY2tfbnVtYmVyKHNlbGYsIGxv
Y2tfZmlsZV9uYW1lKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBsb2NrIG51bWJlciBmcm9tIGxv
Y2sgZmlsZS4iIiIKKyAgICAgICAgcHJlZml4X2xlbmd0aCA9IGxlbihzZWxmLl9sb2NrX2ZpbGVf
cGF0aF9wcmVmaXgpCisgICAgICAgIHJldHVybiBpbnQobG9ja19maWxlX25hbWVbcHJlZml4X2xl
bmd0aDpdKQorCisgICAgZGVmIF9sb2NrX2ZpbGVfbGlzdChzZWxmKToKKyAgICAgICAgIiIiUmV0
dXJuIHRoZSBsaXN0IG9mIGxvY2sgZmlsZXMgc2VxdWVudGlhbGx5LiIiIgorICAgICAgICBsb2Nr
X2xpc3QgPSBnbG9iLmdsb2Ioc2VsZi5fbG9ja19maWxlX3BhdGhfcHJlZml4ICsgJyonKQorICAg
ICAgICBsb2NrX2xpc3Quc29ydChrZXk9c2VsZi5fZXh0cmFjdF9sb2NrX251bWJlcikKKyAgICAg
ICAgcmV0dXJuIGxvY2tfbGlzdAorCisgICAgZGVmIF9uZXh0X2xvY2tfbnVtYmVyKHNlbGYpOgor
ICAgICAgICAiIiJSZXR1cm4gdGhlIG5leHQgYXZhaWxhYmxlIGxvY2sgbnVtYmVyLiIiIgorICAg
ICAgICBsb2NrX2xpc3QgPSBzZWxmLl9sb2NrX2ZpbGVfbGlzdCgpCisgICAgICAgIGlmIG5vdCBs
b2NrX2xpc3Q6CisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICByZXR1cm4gc2VsZi5fZXh0
cmFjdF9sb2NrX251bWJlcihsb2NrX2xpc3RbLTFdKSArIDEKKworICAgIGRlZiBfY2hlY2tfcGlk
KHNlbGYsIGN1cnJlbnRfcGlkKToKKyAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgcGlkIGlzIGFs
aXZlLCBvdGhlcndpc2UgcmV0dXJuIEZhbHNlLiIiIgorICAgICAgICB0cnk6CisgICAgICAgICAg
ICBvcy5raWxsKGN1cnJlbnRfcGlkLCAwKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAg
ICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIFRy
dWUKKworICAgIGRlZiBfY3VyZW50X2xvY2tfcGlkKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4g
d2l0aCB0aGUgY3VycmVudCBsb2NrIHBpZC4gSWYgdGhlIGxvY2sgaXMgbm90IHZhbGlkCisgICAg
ICAgIGl0IGRlbGV0ZXMgdGhlIGxvY2sgZmlsZS4iIiIKKyAgICAgICAgbG9ja19saXN0ID0gc2Vs
Zi5fbG9ja19maWxlX2xpc3QoKQorICAgICAgICBpZiBub3QgbG9ja19saXN0OgorICAgICAgICAg
ICAgcmV0dXJuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGN1cnJlbnRfbG9ja19maWxlID0g
b3Blbihsb2NrX2xpc3RbMF0sICdyJykKKyAgICAgICAgICAgIGN1cnJlbnRfcGlkID0gY3VycmVu
dF9sb2NrX2ZpbGUucmVhZGxpbmUoKQorICAgICAgICAgICAgY3VycmVudF9sb2NrX2ZpbGUuY2xv
c2UoKQorICAgICAgICAgICAgaWYgbm90IChjdXJyZW50X3BpZCBhbmQKKyAgICAgICAgICAgICAg
c3lzLnBsYXRmb3JtIGluICgnZGFyd2luJywgJ2xpbnV4MicpIGFuZAorICAgICAgICAgICAgICBz
ZWxmLl9jaGVja19waWQoaW50KGN1cnJlbnRfcGlkKSkpOgorICAgICAgICAgICAgICAgIG9zLnVu
bGluayhsb2NrX2xpc3RbMF0pCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGV4Y2Vw
dCBJT0Vycm9yLCBPU0Vycm9yOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHJldHVybiBp
bnQoY3VycmVudF9waWQpCisKKyAgICBkZWYgX2NyZWF0ZV9sb2NrX2ZpbGUoc2VsZik6CisgICAg
ICAgICIiIlRoZSBsb2NrIGZpbGVzIGFyZSB1c2VkIHRvIHNjaGVkdWxlIHRoZSBydW5uaW5nIHRl
c3Qgc2Vzc2lvbnMgaW4gZmlyc3QKKyAgICAgICAgY29tZSBmaXJzdCBzZXJ2ZWQgb3JkZXIuIFRo
ZSBzZXF1ZW50aWFsIGd1YXJkIGxvY2sgZW5zdXJlcyB0aGF0IHRoZSBsb2NrCisgICAgICAgIG51
bWJlcnMgYXJlIHNlcXVlbnRpYWwuIiIiCisgICAgICAgIHdoaWxlKFRydWUpOgorICAgICAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlcXVlbnRpYWxfZ3VhcmRfbG9jayA9IG9zLm9wZW4o
c2VsZi5fZ3VhcmRfbG9ja19maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3MuT19DUkVBVCB8IG9zLk9fTk9OQkxPQ0sgfCBvcy5PX0VYQ0wpCisK
KyAgICAgICAgICAgICAgICBzZWxmLl9wcm9jZXNzX2xvY2tfZmlsZV9uYW1lID0gKHNlbGYuX2xv
Y2tfZmlsZV9wYXRoX3ByZWZpeCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHIoc2VsZi5fbmV4dF9sb2NrX251bWJlcigpKSkKKyAgICAgICAgICAgICAgICBs
b2NrX2ZpbGUgPSBvcGVuKHNlbGYuX3Byb2Nlc3NfbG9ja19maWxlX25hbWUsICd3JykKKyAgICAg
ICAgICAgICAgICBsb2NrX2ZpbGUud3JpdGUoc3RyKG9zLmdldHBpZCgpKSkKKyAgICAgICAgICAg
ICAgICBsb2NrX2ZpbGUuY2xvc2UoKQorICAgICAgICAgICAgICAgIG9zLmNsb3NlKHNlcXVlbnRp
YWxfZ3VhcmRfbG9jaykKKyAgICAgICAgICAgICAgICBvcy51bmxpbmsoc2VsZi5fZ3VhcmRfbG9j
a19maWxlKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBleGNlcHQgT1NFcnJv
cjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgd2FpdF9mb3JfaHR0cGRfbG9jayhz
ZWxmKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgbG9jayBmaWxlIGFuZCB3YWl0IHVudGlsIGl0J3Mg
dHVybiBjb21lcy4iIiIKKyAgICAgICAgc2VsZi5fY3JlYXRlX2xvY2tfZmlsZSgpCisgICAgICAg
IHdoaWxlIHNlbGYuX2N1cmVudF9sb2NrX3BpZCgpICE9IG9zLmdldHBpZCgpOgorICAgICAgICAg
ICAgdGltZS5zbGVlcCgxKQpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9odHRwX2xvY2tfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX2xvY2tfdW5pdHRl
c3QucHkJKHJldmlzaW9uIDApCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L2h0dHBfbG9ja191bml0dGVzdC5weQkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxMTIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR2Fi
b3IgUmFwY3NhbnlpIChyZ2Fib3JAaW5mLnUtc3plZ2VkLmh1KSwgVW5pdmVyc2l0eSBvZiBTemVn
ZWQKKyMKKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorIyBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisjIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorIyBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisjIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorIyBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisjIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworaW1wb3J0IGdsb2IKK2ltcG9ydCBodHRwX2xvY2sKK2ltcG9ydCBvcworaW1w
b3J0IHVuaXR0ZXN0CisKKworY2xhc3MgSHR0cExvY2tUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToK
KworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0RnVuYyk6CisgICAgICAgIHNlbGYuaHR0cF9s
b2NrX29iaiA9IGh0dHBfbG9jay5IdHRwTG9jayhOb25lLCAiV2ViS2l0VGVzdEh0dHBkLmxvY2su
IiwgIldlYktpdFRlc3QubG9jayIpCisgICAgICAgIHNlbGYubG9ja19maWxlX3BhdGhfcHJlZml4
ID0gb3MucGF0aC5qb2luKHNlbGYuaHR0cF9sb2NrX29iai5fbG9ja19wYXRoLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmh0dHBfbG9ja19v
YmouX2xvY2tfZmlsZV9wcmVmaXgpCisgICAgICAgIHNlbGYubG9ja19maWxlX25hbWUgPSBzZWxm
LmxvY2tfZmlsZV9wYXRoX3ByZWZpeCArICIwIgorICAgICAgICBzZWxmLmd1YXJkX2xvY2tfZmls
ZSA9IHNlbGYuaHR0cF9sb2NrX29iai5fZ3VhcmRfbG9ja19maWxlCisgICAgICAgIHNlbGYuY2xl
YW5fYWxsX2xvY2tmaWxlKCkKKyAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UuX19pbml0X18oc2Vs
ZiwgdGVzdEZ1bmMpCisKKyAgICBkZWYgY2xlYW5fYWxsX2xvY2tmaWxlKHNlbGYpOgorICAgICAg
ICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLmd1YXJkX2xvY2tfZmlsZSk6CisgICAgICAgICAgICBv
cy51bmxpbmsoZ3VhcmRfbG9ja19maWxlKQorICAgICAgICBsb2NrX2xpc3QgPSBnbG9iLmdsb2Io
c2VsZi5sb2NrX2ZpbGVfcGF0aF9wcmVmaXggKyAnKicpCisgICAgICAgIGZvciBmaWxlX25hbWUg
aW4gbG9ja19saXN0OgorICAgICAgICAgICAgb3MudW5saW5rKGZpbGVfbmFtZSkKKworICAgIGRl
ZiBhc3NlcnRFcXVhbChzZWxmLCBmaXJzdCwgc2Vjb25kKToKKyAgICAgICAgaWYgZmlyc3QgIT0g
c2Vjb25kOgorICAgICAgICAgICAgc2VsZi5jbGVhbl9hbGxfbG9ja2ZpbGUoKQorICAgICAgICB1
bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRFcXVhbChzZWxmLCBmaXJzdCwgc2Vjb25kKQorCisgICAg
ZGVmIF9jaGVja19sb2NrX2ZpbGUoc2VsZik6CisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNl
bGYubG9ja19maWxlX25hbWUpOgorICAgICAgICAgICAgcGlkID0gb3MuZ2V0cGlkKCkKKyAgICAg
ICAgICAgIGxvY2tfZmlsZSA9IG9wZW4oc2VsZi5sb2NrX2ZpbGVfbmFtZSwgJ3InKQorICAgICAg
ICAgICAgbG9ja19maWxlX3BpZCA9IGxvY2tfZmlsZS5yZWFkbGluZSgpCisgICAgICAgICAgICBs
b2NrX2ZpbGUuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaWQsIGludChs
b2NrX2ZpbGVfcGlkKSkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBG
YWxzZQorCisgICAgZGVmIHRlc3RfbG9ja19saWZlY3ljbGUoc2VsZik6CisgICAgICAgIHNlbGYu
aHR0cF9sb2NrX29iai5fY3JlYXRlX2xvY2tfZmlsZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChUcnVlLCBzZWxmLl9jaGVja19sb2NrX2ZpbGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCgxLCBzZWxmLmh0dHBfbG9ja19vYmouX25leHRfbG9ja19udW1iZXIoKSkKKworICAgICAg
ICBzZWxmLmh0dHBfbG9ja19vYmouY2xlYW51cF9odHRwX2xvY2soKQorCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoRmFsc2UsIHNlbGYuX2NoZWNrX2xvY2tfZmlsZSgpKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKDAsIHNlbGYuaHR0cF9sb2NrX29iai5fbmV4dF9sb2NrX251bWJlcigpKQor
CisgICAgZGVmIHRlc3RfZXh0cmFjdF9sb2NrX251bWJlcihzZWxmLCk6CisgICAgICAgIGxvY2tf
ZmlsZV9saXN0ID0gWworICAgICAgICAgICAgc2VsZi5sb2NrX2ZpbGVfcGF0aF9wcmVmaXggKyAi
MDAiLAorICAgICAgICAgICAgc2VsZi5sb2NrX2ZpbGVfcGF0aF9wcmVmaXggKyAiOSIsCisgICAg
ICAgICAgICBzZWxmLmxvY2tfZmlsZV9wYXRoX3ByZWZpeCArICIwMDEiLAorICAgICAgICAgICAg
c2VsZi5sb2NrX2ZpbGVfcGF0aF9wcmVmaXggKyAiMDIxIiwKKyAgICAgICAgXQorCisgICAgICAg
IGV4cGVjdGVkX251bWJlcl9saXN0ID0gWyIwIiwgIjkiLCAiMSIsICIyMSJdCisKKyAgICAgICAg
Zm9yIGkgaW4gcmFuZ2UobGVuKGxvY2tfZmlsZV9saXN0KSk6CisgICAgICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKHNlbGYuaHR0cF9sb2NrX29iai5fZXh0cmFjdF9sb2NrX251bWJlcihsb2NrX2Zp
bGVfbGlzdFtpXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludChleHBlY3RlZF9u
dW1iZXJfbGlzdFtpXSkpCisKKyAgICBkZWYgdGVzdF9sb2NrX2ZpbGVfbGlzdChzZWxmKToKKyAg
ICAgICAgbG9ja19maWxlX2xpc3QgPSBbCisgICAgICAgICAgICBzZWxmLmxvY2tfZmlsZV9wYXRo
X3ByZWZpeCArICI2IiwKKyAgICAgICAgICAgIHNlbGYubG9ja19maWxlX3BhdGhfcHJlZml4ICsg
IjEiLAorICAgICAgICAgICAgc2VsZi5sb2NrX2ZpbGVfcGF0aF9wcmVmaXggKyAiNCIsCisgICAg
ICAgICAgICBzZWxmLmxvY2tfZmlsZV9wYXRoX3ByZWZpeCArICIzIiwKKyAgICAgICAgXQorCisg
ICAgICAgIGV4cGVjdGVkX2ZpbGVfbGlzdCA9IFsKKyAgICAgICAgICAgIHNlbGYubG9ja19maWxl
X3BhdGhfcHJlZml4ICsgIjEiLAorICAgICAgICAgICAgc2VsZi5sb2NrX2ZpbGVfcGF0aF9wcmVm
aXggKyAiMyIsCisgICAgICAgICAgICBzZWxmLmxvY2tfZmlsZV9wYXRoX3ByZWZpeCArICI0IiwK
KyAgICAgICAgICAgIHNlbGYubG9ja19maWxlX3BhdGhfcHJlZml4ICsgIjYiLAorICAgICAgICBd
CisKKyAgICAgICAgZm9yIGZpbGVfbmFtZSBpbiBsb2NrX2ZpbGVfbGlzdDoKKyAgICAgICAgICAg
IG9wZW4oZmlsZV9uYW1lLCAndycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmh0
dHBfbG9ja19vYmouX2xvY2tfZmlsZV9saXN0KCksIGV4cGVjdGVkX2ZpbGVfbGlzdCkKKworICAg
ICAgICBmb3IgZmlsZV9uYW1lIGluIGxvY2tfZmlsZV9saXN0OgorICAgICAgICAgICAgb3MudW5s
aW5rKGZpbGVfbmFtZSkK
</data>

          </attachment>
      

    </bug>

</bugzilla>