<?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>54071</bug_id>
          
          <creation_ts>2011-02-08 23:44:47 -0800</creation_ts>
          <short_desc>nrwt multiprocessing: spawn multiple workers</short_desc>
          <delta_ts>2011-02-14 13:48:35 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>54070</dependson>
          <blocked>49566</blocked>
    
    <blocked>54072</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Pranke">dpranke</reporter>
          <assigned_to name="Dirk Pranke">dpranke</assigned_to>
          <cc>eric</cc>
    
    <cc>mihaip</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>348014</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-02-08 23:44:47 -0800</bug_when>
    <thetext>nrwt multiprocessing: spawn multiple workers</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348018</commentid>
    <comment_count>1</comment_count>
      <attachid>81760</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-02-08 23:46:53 -0800</bug_when>
    <thetext>Created attachment 81760
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348036</commentid>
    <comment_count>2</comment_count>
      <attachid>81762</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-02-09 00:21:00 -0800</bug_when>
    <thetext>Created attachment 81762
reset state properly in _run_tests()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349969</commentid>
    <comment_count>3</comment_count>
      <attachid>81762</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-02-11 13:24:14 -0800</bug_when>
    <thetext>Comment on attachment 81762
reset state properly in _run_tests()

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

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:109
&gt; +            w = manager_connection.start_worker(worker_number)
&gt; +            ws = _WorkerState(worker_number, w)
&gt; +            self._workers[w.name] = ws

w -&gt; worker, ws -&gt; worker_state

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:113
&gt; +            # We sleep a bit in between workers to give the processes a chance
&gt; +            # to start up without thrashing.
&gt; +            time.sleep(0.1)

This seems prone to a race.  What type of thrashing happens if you don&apos;t sleep?

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:119
&gt; -        manager_connection.post_message(&apos;stop&apos;)
&gt; +        for i in xrange(num_workers):
&gt; +            manager_connection.post_message(&apos;stop&apos;)

Why do we have to post multiple stop messages?

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:144
&gt; +        for w in self._workers.values():
&gt; +            if not w.done:
&gt; +                done = False

Can you use any() + list comprehension here?

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:147
&gt; +        # FIXME: is the following line safe?
&gt; +        # self._done = done

Can you elaborate on this?

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:150
&gt;      def handle_started_test(self, src, test_info, hang_timeout):

src -&gt; source

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:156
&gt; +        w = self._workers[src]
&gt; +        w.done = True

w -&gt; worker, src -&gt; source

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:158
&gt;      def handle_exception(self, src, exception_info):

src -&gt; source</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350024</commentid>
    <comment_count>4</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-02-11 14:16:47 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 81762 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=81762&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:109
&gt; &gt; +            w = manager_connection.start_worker(worker_number)
&gt; &gt; +            ws = _WorkerState(worker_number, w)
&gt; &gt; +            self._workers[w.name] = ws
&gt; 
&gt; w -&gt; worker, ws -&gt; worker_state
&gt; 

Will do.

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:113
&gt; &gt; +            # We sleep a bit in between workers to give the processes a chance
&gt; &gt; +            # to start up without thrashing.
&gt; &gt; +            time.sleep(0.1)
&gt; 
&gt; This seems prone to a race.  What type of thrashing happens if you don&apos;t sleep?
&gt;

I don&apos;t really understand what is going on, but it appears that the DumpRenderTrees get into weird states and end up timing out on their first couple tests before starting to run smoothly.
 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:119
&gt; &gt; -        manager_connection.post_message(&apos;stop&apos;)
&gt; &gt; +        for i in xrange(num_workers):
&gt; &gt; +            manager_connection.post_message(&apos;stop&apos;)
&gt; 
&gt; Why do we have to post multiple stop messages?
&gt; 

One for each worker. Because of the ordering of the messages, and the fact that a worker will stop reading messages after receiving a &apos;stop&apos;, this is sufficient to guarantee that every worker will receive a stop. I&apos;ll add a comment to this effect.

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:144
&gt; &gt; +        for w in self._workers.values():
&gt; &gt; +            if not w.done:
&gt; &gt; +                done = False
&gt; 
&gt; Can you use any() + list comprehension here?
&gt; 

Sure.

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:147
&gt; &gt; +        # FIXME: is the following line safe?
&gt; &gt; +        # self._done = done
&gt; 
&gt; Can you elaborate on this?
&gt; 

I will add a better comment. Basically, at the moment this code always returns False for TestRunner.is_done(), which means that broker_connect.run_message_loop() will never exit early. This is fine, since we run with timeouts, so in the worst case we bail out within a second. 

However, I think that if we set _done here, we will safely bail out as soon as the last &quot;done&quot; message is processed. I just hadn&apos;t convinced myself 100% that this was true.

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:150
&gt; &gt;      def handle_started_test(self, src, test_info, hang_timeout):
&gt; 
&gt; src -&gt; source
&gt;

Will do.
 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:156
&gt; &gt; +        w = self._workers[src]
&gt; &gt; +        w.done = True
&gt; 
&gt; w -&gt; worker, src -&gt; source
&gt;

Will do.
 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:158
&gt; &gt;      def handle_exception(self, src, exception_info):
&gt; 
&gt; src -&gt; source

Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350044</commentid>
    <comment_count>5</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-02-11 14:35:02 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; (From update of attachment 81762 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=81762&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:109
&gt; &gt; &gt; +            w = manager_connection.start_worker(worker_number)
&gt; &gt; &gt; +            ws = _WorkerState(worker_number, w)
&gt; &gt; &gt; +            self._workers[w.name] = ws
&gt; &gt; 
&gt; &gt; w -&gt; worker, ws -&gt; worker_state
&gt; &gt; 
&gt; 
&gt; Will do.
&gt; 

Oh yeah, I used &apos;w&apos; because &apos;worker&apos; is already used to name the module. I&apos;ll use &apos;worker_obj&apos; instead.

&gt; &gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:144
&gt; &gt; &gt; +        for w in self._workers.values():
&gt; &gt; &gt; +            if not w.done:
&gt; &gt; &gt; +                done = False
&gt; &gt; 
&gt; &gt; Can you use any() + list comprehension here?
&gt; &gt; 
&gt; 
&gt; Sure.

Actually,  the block inside the loop gets more complicated when we check to see if the worker is wedged, but I think I can pull that into a worker_is_done_or_wedged() function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350055</commentid>
    <comment_count>6</comment_count>
      <attachid>82183</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-02-11 14:44:43 -0800</bug_when>
    <thetext>Created attachment 82183
update w/ feedback from tony</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350163</commentid>
    <comment_count>7</comment_count>
      <attachid>82183</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-02-11 16:57:34 -0800</bug_when>
    <thetext>Comment on attachment 82183
update w/ feedback from tony

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

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:52
&gt; +    def __init__(self, number, worker):
&gt; +        self.worker = worker

Should we name this param something other than |worker| to avoid shadowing the module?

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:76
&gt; +    def _worker_is_done(self, worker):
&gt; +        # FIXME: check if the worker is wedged.
&gt; +        return worker.done

What about this param?

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:120
&gt; +            # FIXME: If we start workers up too quickly, DumpRenderTree appears
&gt; +            # to thrash on something and time out its first few tests. Until
&gt; +            # we can figure out what&apos;s going on, sleep a bit in between
&gt; +            # workers.
&gt; +            time.sleep(0.1)

This is fine for now, but it sounds like this could lead to flakiness.  Any ideas why the old code doesn&apos;t have this problem?

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:130
&gt; +        # We post one &apos;stop&apos; message for each worker. Because the stop message
&gt; +        # are sent after all of the tests, and because each worker will stop
&gt; +        # reading messsages after receiving a stop, we can be sure each
&gt; +        # worker will get a stop message and hence they will all shut down.
&gt; +        for i in xrange(num_workers):
&gt; +            manager_connection.post_message(&apos;stop&apos;)

This is also fine, but maybe ManagerConnection should have a stop_all_workers method?

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:155
&gt; +    def handle_done(self, source):
&gt; +        worker = self._workers[source]
&gt; +        worker.done = True

worker -&gt; worker_state?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350172</commentid>
    <comment_count>8</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-02-11 17:32:01 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 82183 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=82183&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:52
&gt; &gt; +    def __init__(self, number, worker):
&gt; &gt; +        self.worker = worker
&gt; 
&gt; Should we name this param something other than |worker| to avoid shadowing the module?
&gt; 

I can rename them to worker_connection to be a little clearer.

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:76
&gt; &gt; +    def _worker_is_done(self, worker):
&gt; &gt; +        # FIXME: check if the worker is wedged.
&gt; &gt; +        return worker.done
&gt; 
&gt; What about this param?
&gt;

Will rename to worker_state.
 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:120
&gt; &gt; +            # FIXME: If we start workers up too quickly, DumpRenderTree appears
&gt; &gt; +            # to thrash on something and time out its first few tests. Until
&gt; &gt; +            # we can figure out what&apos;s going on, sleep a bit in between
&gt; &gt; +            # workers.
&gt; &gt; +            time.sleep(0.1)
&gt; 
&gt; This is fine for now, but it sounds like this could lead to flakiness.  Any ideas why the old code doesn&apos;t have this problem?
&gt; 

It might be being aggravated by using multiple python processes instead of threads so that there&apos;s much greater overall load on the system. I haven&apos;t really explored it much yet; it&apos;s still on my to-do list.

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:130
&gt; &gt; +        # We post one &apos;stop&apos; message for each worker. Because the stop message
&gt; &gt; +        # are sent after all of the tests, and because each worker will stop
&gt; &gt; +        # reading messsages after receiving a stop, we can be sure each
&gt; &gt; +        # worker will get a stop message and hence they will all shut down.
&gt; &gt; +        for i in xrange(num_workers):
&gt; &gt; +            manager_connection.post_message(&apos;stop&apos;)
&gt; 
&gt; This is also fine, but maybe ManagerConnection should have a stop_all_workers method?
&gt; 

That would make ManagerConnection aware of the semantics of the messages and how many workers have been started, duplicating state in multiple places, so I&apos;d prefer not to do that (the code was originally written that way, for what its worth, and it ended up being much cleaner this way).

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/test_runner2.py:155
&gt; &gt; +    def handle_done(self, source):
&gt; &gt; +        worker = self._workers[source]
&gt; &gt; +        worker.done = True
&gt; 
&gt; worker -&gt; worker_state?

Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350178</commentid>
    <comment_count>9</comment_count>
      <attachid>82215</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-02-11 17:42:06 -0800</bug_when>
    <thetext>Created attachment 82215
rename fields per feedback from tony</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350858</commentid>
    <comment_count>10</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-02-14 13:48:35 -0800</bug_when>
    <thetext>Committed r78502: &lt;http://trac.webkit.org/changeset/78502&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81760</attachid>
            <date>2011-02-08 23:46:53 -0800</date>
            <delta_ts>2011-02-09 00:20:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54071-20110208234652.patch</filename>
            <type>text/plain</type>
            <size>5439</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzgwMTAKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA0YTViOTE5MzdiYTI0ZGFkY2Q3ZTY2YzdhNWE2M2M1ZDFh
NTcyYjk1Li42ODc0MjFiOGI0NzU4YjQ2ZjIzYzczNmI4YTYzY2MzNzhhN2NkMWZjIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0yLDYgKzIsMTcg
QEAKIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAorICAgICAgICB1cGRh
dGUgdGhlIE5SV1QgbXVsdGlwcm9jZXNzaW5nIGNvZGUgdG8gc3Bhd24gbXVsdGlwbGUgd29ya2Vy
cworICAgICAgICBpbnN0ZWFkIG9mIGp1c3QgdXNpbmcgb25lLgorCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDA3MQorCisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9ydW5uZXIyLnB5Ogor
CisyMDExLTAyLTA4ICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCiAgICAgICAgIFRoaXMgcGF0Y2ggYWRk
cyB0byBOUldUIG1vc3Qgb2YgdGhlIHN1cHBvcnQgbmVlZGVkIHRvIHJ1biB0aGUgbmV3CiAgICAg
ICAgIG1lc3NhZ2UtYmFzZWQgd29ya2VycyBpbiBzZXBhcmF0ZSB0aHJlYWRzIG9yIHByb2Nlc3Nl
cy4gVGhlIGNvZGUKICAgICAgICAgaXNuJ3QgZnVsbHkgY29tcGxldGUgeWV0IGJlY2F1c2Ugd2Ug
ZG9uJ3Qgc3VwcG9ydCBjYW5jZWwoKSBvcgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9ydW5uZXIyLnB5IGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9ydW5uZXIy
LnB5CmluZGV4IDUzNGRlYjU0ZDgxMTRhMGZhZjU0ZjkwNGIzOGQ2YTM3Mzg1YmU0MDYuLjU2MmNm
YWVmYzA1YmJiN2MxNmUwZThhZjZkODA2MzJiMTNhNWM1NzAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfcnVubmVyMi5w
eQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2Fn
ZS90ZXN0X3J1bm5lcjIucHkKQEAgLTM0LDcgKzM0LDkgQEAgd29ya2VycyBhbmQgcmVjZWl2ZSB0
aGVpciBjb21wbGV0aW9uIG1lc3NhZ2VzIGFjY29yZGluZ2x5LgogIiIiCiAKIGltcG9ydCBsb2dn
aW5nCitpbXBvcnQgdGltZQogCitmcm9tIHdlYmtpdHB5LnRvb2wgaW1wb3J0IGdyYW1tYXIKIAog
ZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IG1hbmFnZXJf
d29ya2VyX2Jyb2tlcgogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2Ug
aW1wb3J0IHdvcmtlcgpAQCAtNDMsNiArNDUsMTggQEAgZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVz
dHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfcnVubmVyCiBfbG9nID0gbG9nZ2luZy5nZXRM
b2dnZXIoX19uYW1lX18pCiAKIAorY2xhc3MgX1dvcmtlclN0YXRlKG9iamVjdCk6CisgICAgIiIi
QSBjbGFzcyBmb3IgdGhlIFRlc3RSdW5uZXIvbWFuYWdlciB0byB1c2UgdG8gdHJhY2sgdGhlIGN1
cnJlbnQgc3RhdGUKKyAgICBvZiB0aGUgd29ya2Vycy4iIiIKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgbnVtYmVyLCB3b3JrZXIpOgorICAgICAgICBzZWxmLndvcmtlciA9IHdvcmtlcgorICAgICAg
ICBzZWxmLm51bWJlciA9IG51bWJlcgorICAgICAgICBzZWxmLmRvbmUgPSBGYWxzZQorCisgICAg
ZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIl9Xb3JrZXJTdGF0ZSgiICsgc3Ry
KHNlbGYuX19kaWN0X18pICsgIikiCisKKwogY2xhc3MgVGVzdFJ1bm5lcjIodGVzdF9ydW5uZXIu
VGVzdFJ1bm5lcik6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMsIHByaW50
ZXIpOgogICAgICAgICB0ZXN0X3J1bm5lci5UZXN0UnVubmVyLl9faW5pdF9fKHNlbGYsIHBvcnQs
IG9wdGlvbnMsIHByaW50ZXIpCkBAIC01MSw2ICs2NSw5IEBAIGNsYXNzIFRlc3RSdW5uZXIyKHRl
c3RfcnVubmVyLlRlc3RSdW5uZXIpOgogICAgICAgICBzZWxmLl9jdXJyZW50X3Jlc3VsdF9zdW1t
YXJ5ID0gTm9uZQogICAgICAgICBzZWxmLl9kb25lID0gRmFsc2UKIAorICAgICAgICAjIFRoaXMg
bWFwcyB3b3JrZXIgbmFtZXMgdG8gdGhlIHN0YXRlIHdlIGFyZSB0cmFja2luZyBmb3IgZWFjaCBv
ZiB0aGVtLgorICAgICAgICBzZWxmLl93b3JrZXJzID0ge30KKwogICAgIGRlZiBpc19kb25lKHNl
bGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fZG9uZQogCkBAIC03MSwyMCArODgsMzMgQEAgY2xh
c3MgVGVzdFJ1bm5lcjIodGVzdF9ydW5uZXIuVGVzdFJ1bm5lcik6CiAgICAgICAgICAgICAgIGlu
IHRoZSBmb3JtIHtmaWxlbmFtZTpmaWxlbmFtZSwgdGVzdF9ydW5fdGltZTp0ZXN0X3J1bl90aW1l
fQogICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnk6IHN1bW1hcnkgb2JqZWN0IHRvIHBvcHVsYXRl
IHdpdGggdGhlIHJlc3VsdHMKICAgICAgICAgIiIiCisgICAgICAgIG51bV93b3JrZXJzID0gc2Vs
Zi5fbnVtX3dvcmtlcnMoKQorCiAgICAgICAgIHNlbGYuX2N1cnJlbnRfcmVzdWx0X3N1bW1hcnkg
PSByZXN1bHRfc3VtbWFyeQogCi0gICAgICAgICMgRklYTUU6IHNoYXJkIHByb3Blcmx5LgotICAg
ICAgICB0ZXN0X2xpc3RzID0gc2VsZi5fc2hhcmRfdGVzdHMoZmlsZV9saXN0LCBGYWxzZSkKKyAg
ICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUoJ1NoYXJkaW5nIHRlc3RzIC4uLicpCisg
ICAgICAgIHRlc3RfbGlzdHMgPSBzZWxmLl9zaGFyZF90ZXN0cyhmaWxlX2xpc3QsCisgICAgICAg
ICAgICBudW1fd29ya2VycyA+IDEgYW5kIG5vdCBzZWxmLl9vcHRpb25zLmV4cGVyaW1lbnRhbF9m
dWxseV9wYXJhbGxlbCkKKyAgICAgICAgX2xvZy5kZWJ1ZygiVXNpbmcgJWQgc2hhcmRzIiAlIGxl
bih0ZXN0X2xpc3RzKSkKIAogICAgICAgICBtYW5hZ2VyX2Nvbm5lY3Rpb24gPSBtYW5hZ2VyX3dv
cmtlcl9icm9rZXIuZ2V0KHNlbGYuX3BvcnQsIHNlbGYuX29wdGlvbnMsIHNlbGYsIHdvcmtlci5X
b3JrZXIpCiAKLSAgICAgICAgIyBGSVhNRTogc3RhcnQgYWxsIG9mIHRoZSB3b3JrZXJzLgotICAg
ICAgICBtYW5hZ2VyX2Nvbm5lY3Rpb24uc3RhcnRfd29ya2VyKDApCisgICAgICAgIHNlbGYuX3By
aW50ZXIucHJpbnRfdXBkYXRlKCdTdGFydGluZyAlcyAuLi4nICUKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ3JhbW1hci5wbHVyYWxpemUoJ3dvcmtlcicsIG51bV93b3JrZXJz
KSkKKyAgICAgICAgZm9yIHdvcmtlcl9udW1iZXIgaW4geHJhbmdlKG51bV93b3JrZXJzKToKKyAg
ICAgICAgICAgIHcgPSBtYW5hZ2VyX2Nvbm5lY3Rpb24uc3RhcnRfd29ya2VyKHdvcmtlcl9udW1i
ZXIpCisgICAgICAgICAgICB3cyA9IF9Xb3JrZXJTdGF0ZSh3b3JrZXJfbnVtYmVyLCB3KQorICAg
ICAgICAgICAgc2VsZi5fd29ya2Vyc1t3Lm5hbWVdID0gd3MKKworICAgICAgICAgICAgIyBXZSBz
bGVlcCBhIGJpdCBpbiBiZXR3ZWVuIHdvcmtlcnMgdG8gZ2l2ZSB0aGUgcHJvY2Vzc2VzIGEgY2hh
bmNlCisgICAgICAgICAgICAjIHRvIHN0YXJ0IHVwIHdpdGhvdXQgdGhyYXNoaW5nLgorICAgICAg
ICAgICAgdGltZS5zbGVlcCgwLjEpCiAKICAgICAgICAgZm9yIHRlc3RfbGlzdCBpbiB0ZXN0X2xp
c3RzOgogICAgICAgICAgICAgbWFuYWdlcl9jb25uZWN0aW9uLnBvc3RfbWVzc2FnZSgndGVzdF9s
aXN0JywgdGVzdF9saXN0WzBdLCB0ZXN0X2xpc3RbMV0pCiAKLSAgICAgICAgbWFuYWdlcl9jb25u
ZWN0aW9uLnBvc3RfbWVzc2FnZSgnc3RvcCcpCisgICAgICAgIGZvciBpIGluIHhyYW5nZShudW1f
d29ya2Vycyk6CisgICAgICAgICAgICBtYW5hZ2VyX2Nvbm5lY3Rpb24ucG9zdF9tZXNzYWdlKCdz
dG9wJykKIAogICAgICAgICBrZXlib2FyZF9pbnRlcnJ1cHRlZCA9IEZhbHNlCiAgICAgICAgIGlu
dGVycnVwdGVkID0gRmFsc2UKQEAgLTkyLDcgKzEyMiwxMiBAQCBjbGFzcyBUZXN0UnVubmVyMih0
ZXN0X3J1bm5lci5UZXN0UnVubmVyKToKICAgICAgICAgICAgIHdoaWxlIG5vdCBzZWxmLl9jaGVj
a19pZl9kb25lKCk6CiAgICAgICAgICAgICAgICAgbWFuYWdlcl9jb25uZWN0aW9uLnJ1bl9tZXNz
YWdlX2xvb3AoZGVsYXlfc2Vjcz0xLjApCiAKKyAgICAgICAgICAgICMgRklYTUU6IGNoZWNrIHRo
YXQgYWxsIHRoZSB3b3JrZXJzIGFyZSBlaXRoZXIgd2VkZ2VkIG9yIGRlYWQuCisKKyAgICAgICAg
IyBGSVhNRTogaGFuZGxlIGV4Y2VwdGlvbnMsIGludGVycnVwdHMuCisKICAgICAgICAgIyBGSVhN
RTogaW1wbGVtZW50IHN0YXRzLgorCiAgICAgICAgIHRocmVhZF90aW1pbmdzID0gW10KIAogICAg
ICAgICByZXR1cm4gKGtleWJvYXJkX2ludGVycnVwdGVkLCBpbnRlcnJ1cHRlZCwgdGhyZWFkX3Rp
bWluZ3MsCkBAIC0xMDEsMTYgKzEzNiwyMiBAQCBjbGFzcyBUZXN0UnVubmVyMih0ZXN0X3J1bm5l
ci5UZXN0UnVubmVyKToKICAgICBkZWYgX2NoZWNrX2lmX2RvbmUoc2VsZik6CiAgICAgICAgICIi
IlJldHVybnMgdHJ1ZSBpZmYgYWxsIHRoZSB3b3JrZXJzIGhhdmUgZWl0aGVyIGNvbXBsZXRlZCBv
ciB3ZWRnZWQuIiIiCiAgICAgICAgICMgRklYTUU6IGltcGxlbWVudCB0byBjaGVjayBmb3Igd2Vk
Z2VkIHdvcmtlcnMuCi0gICAgICAgIHJldHVybiBzZWxmLl9kb25lCisgICAgICAgIGRvbmUgPSBU
cnVlCisgICAgICAgIGZvciB3IGluIHNlbGYuX3dvcmtlcnMudmFsdWVzKCk6CisgICAgICAgICAg
ICBpZiBub3Qgdy5kb25lOgorICAgICAgICAgICAgICAgIGRvbmUgPSBGYWxzZQorCisgICAgICAg
ICMgRklYTUU6IGlzIHRoZSBmb2xsb3dpbmcgbGluZSBzYWZlPworICAgICAgICAjIHNlbGYuX2Rv
bmUgPSBkb25lCisgICAgICAgIHJldHVybiBkb25lCiAKICAgICBkZWYgaGFuZGxlX3N0YXJ0ZWRf
dGVzdChzZWxmLCBzcmMsIHRlc3RfaW5mbywgaGFuZ190aW1lb3V0KToKICAgICAgICAgIyBGSVhN
RTogaW1wbGVtZW50CiAgICAgICAgIHBhc3MKIAogICAgIGRlZiBoYW5kbGVfZG9uZShzZWxmLCBz
cmMpOgotICAgICAgICAjIEZJWE1FOiBpbXBsZW1lbnQgcHJvcGVybHkgdG8gaGFuZGxlIG11bHRp
cGxlIHdvcmtlcnMuCi0gICAgICAgIHNlbGYuX2RvbmUgPSBUcnVlCi0gICAgICAgIHBhc3MKKyAg
ICAgICAgdyA9IHNlbGYuX3dvcmtlcnNbc3JjXQorICAgICAgICB3LmRvbmUgPSBUcnVlCiAKICAg
ICBkZWYgaGFuZGxlX2V4Y2VwdGlvbihzZWxmLCBzcmMsIGV4Y2VwdGlvbl9pbmZvKToKICAgICAg
ICAgcmFpc2UgZXhjZXB0aW9uX2luZm8K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81762</attachid>
            <date>2011-02-09 00:21:00 -0800</date>
            <delta_ts>2011-02-11 14:44:40 -0800</delta_ts>
            <desc>reset state properly in _run_tests()</desc>
            <filename>bug-54071-20110209002058.patch</filename>
            <type>text/plain</type>
            <size>5423</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzgwMTAKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA0YTViOTE5MzdiYTI0ZGFkY2Q3ZTY2YzdhNWE2M2M1ZDFh
NTcyYjk1Li42ODc0MjFiOGI0NzU4YjQ2ZjIzYzczNmI4YTYzY2MzNzhhN2NkMWZjIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0yLDYgKzIsMTcg
QEAKIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAorICAgICAgICB1cGRh
dGUgdGhlIE5SV1QgbXVsdGlwcm9jZXNzaW5nIGNvZGUgdG8gc3Bhd24gbXVsdGlwbGUgd29ya2Vy
cworICAgICAgICBpbnN0ZWFkIG9mIGp1c3QgdXNpbmcgb25lLgorCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDA3MQorCisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9ydW5uZXIyLnB5Ogor
CisyMDExLTAyLTA4ICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCiAgICAgICAgIFRoaXMgcGF0Y2ggYWRk
cyB0byBOUldUIG1vc3Qgb2YgdGhlIHN1cHBvcnQgbmVlZGVkIHRvIHJ1biB0aGUgbmV3CiAgICAg
ICAgIG1lc3NhZ2UtYmFzZWQgd29ya2VycyBpbiBzZXBhcmF0ZSB0aHJlYWRzIG9yIHByb2Nlc3Nl
cy4gVGhlIGNvZGUKICAgICAgICAgaXNuJ3QgZnVsbHkgY29tcGxldGUgeWV0IGJlY2F1c2Ugd2Ug
ZG9uJ3Qgc3VwcG9ydCBjYW5jZWwoKSBvcgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9ydW5uZXIyLnB5IGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9ydW5uZXIy
LnB5CmluZGV4IDUzNGRlYjU0ZDgxMTRhMGZhZjU0ZjkwNGIzOGQ2YTM3Mzg1YmU0MDYuLjlhY2U4
YzY3YThlMTlkZGY0MjgxOGE2MmJjNTg0NjM5MmZlNzRmMTIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfcnVubmVyMi5w
eQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2Fn
ZS90ZXN0X3J1bm5lcjIucHkKQEAgLTM0LDcgKzM0LDkgQEAgd29ya2VycyBhbmQgcmVjZWl2ZSB0
aGVpciBjb21wbGV0aW9uIG1lc3NhZ2VzIGFjY29yZGluZ2x5LgogIiIiCiAKIGltcG9ydCBsb2dn
aW5nCitpbXBvcnQgdGltZQogCitmcm9tIHdlYmtpdHB5LnRvb2wgaW1wb3J0IGdyYW1tYXIKIAog
ZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IG1hbmFnZXJf
d29ya2VyX2Jyb2tlcgogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2Ug
aW1wb3J0IHdvcmtlcgpAQCAtNDMsNiArNDUsMTggQEAgZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVz
dHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHRlc3RfcnVubmVyCiBfbG9nID0gbG9nZ2luZy5nZXRM
b2dnZXIoX19uYW1lX18pCiAKIAorY2xhc3MgX1dvcmtlclN0YXRlKG9iamVjdCk6CisgICAgIiIi
QSBjbGFzcyBmb3IgdGhlIFRlc3RSdW5uZXIvbWFuYWdlciB0byB1c2UgdG8gdHJhY2sgdGhlIGN1
cnJlbnQgc3RhdGUKKyAgICBvZiB0aGUgd29ya2Vycy4iIiIKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgbnVtYmVyLCB3b3JrZXIpOgorICAgICAgICBzZWxmLndvcmtlciA9IHdvcmtlcgorICAgICAg
ICBzZWxmLm51bWJlciA9IG51bWJlcgorICAgICAgICBzZWxmLmRvbmUgPSBGYWxzZQorCisgICAg
ZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIl9Xb3JrZXJTdGF0ZSgiICsgc3Ry
KHNlbGYuX19kaWN0X18pICsgIikiCisKKwogY2xhc3MgVGVzdFJ1bm5lcjIodGVzdF9ydW5uZXIu
VGVzdFJ1bm5lcik6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMsIHByaW50
ZXIpOgogICAgICAgICB0ZXN0X3J1bm5lci5UZXN0UnVubmVyLl9faW5pdF9fKHNlbGYsIHBvcnQs
IG9wdGlvbnMsIHByaW50ZXIpCkBAIC01MSw2ICs2NSw5IEBAIGNsYXNzIFRlc3RSdW5uZXIyKHRl
c3RfcnVubmVyLlRlc3RSdW5uZXIpOgogICAgICAgICBzZWxmLl9jdXJyZW50X3Jlc3VsdF9zdW1t
YXJ5ID0gTm9uZQogICAgICAgICBzZWxmLl9kb25lID0gRmFsc2UKIAorICAgICAgICAjIFRoaXMg
bWFwcyB3b3JrZXIgbmFtZXMgdG8gdGhlIHN0YXRlIHdlIGFyZSB0cmFja2luZyBmb3IgZWFjaCBv
ZiB0aGVtLgorICAgICAgICBzZWxmLl93b3JrZXJzID0ge30KKwogICAgIGRlZiBpc19kb25lKHNl
bGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fZG9uZQogCkBAIC03MiwxOSArODksMzQgQEAgY2xh
c3MgVGVzdFJ1bm5lcjIodGVzdF9ydW5uZXIuVGVzdFJ1bm5lcik6CiAgICAgICAgICAgICByZXN1
bHRfc3VtbWFyeTogc3VtbWFyeSBvYmplY3QgdG8gcG9wdWxhdGUgd2l0aCB0aGUgcmVzdWx0cwog
ICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fY3VycmVudF9yZXN1bHRfc3VtbWFyeSA9IHJlc3Vs
dF9zdW1tYXJ5CisgICAgICAgIHNlbGYuX2FsbF9yZXN1bHRzID0gW10KKyAgICAgICAgc2VsZi5f
d29ya2VycyA9IHt9CisKKyAgICAgICAgbnVtX3dvcmtlcnMgPSBzZWxmLl9udW1fd29ya2Vycygp
CiAKLSAgICAgICAgIyBGSVhNRTogc2hhcmQgcHJvcGVybHkuCi0gICAgICAgIHRlc3RfbGlzdHMg
PSBzZWxmLl9zaGFyZF90ZXN0cyhmaWxlX2xpc3QsIEZhbHNlKQorICAgICAgICBzZWxmLl9wcmlu
dGVyLnByaW50X3VwZGF0ZSgnU2hhcmRpbmcgdGVzdHMgLi4uJykKKyAgICAgICAgdGVzdF9saXN0
cyA9IHNlbGYuX3NoYXJkX3Rlc3RzKGZpbGVfbGlzdCwKKyAgICAgICAgICAgIG51bV93b3JrZXJz
ID4gMSBhbmQgbm90IHNlbGYuX29wdGlvbnMuZXhwZXJpbWVudGFsX2Z1bGx5X3BhcmFsbGVsKQor
ICAgICAgICBfbG9nLmRlYnVnKCJVc2luZyAlZCBzaGFyZHMiICUgbGVuKHRlc3RfbGlzdHMpKQog
CiAgICAgICAgIG1hbmFnZXJfY29ubmVjdGlvbiA9IG1hbmFnZXJfd29ya2VyX2Jyb2tlci5nZXQo
c2VsZi5fcG9ydCwgc2VsZi5fb3B0aW9ucywgc2VsZiwgd29ya2VyLldvcmtlcikKIAotICAgICAg
ICAjIEZJWE1FOiBzdGFydCBhbGwgb2YgdGhlIHdvcmtlcnMuCi0gICAgICAgIG1hbmFnZXJfY29u
bmVjdGlvbi5zdGFydF93b3JrZXIoMCkKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRh
dGUoJ1N0YXJ0aW5nICVzIC4uLicgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBncmFtbWFyLnBsdXJhbGl6ZSgnd29ya2VyJywgbnVtX3dvcmtlcnMpKQorICAgICAgICBmb3Ig
d29ya2VyX251bWJlciBpbiB4cmFuZ2UobnVtX3dvcmtlcnMpOgorICAgICAgICAgICAgdyA9IG1h
bmFnZXJfY29ubmVjdGlvbi5zdGFydF93b3JrZXIod29ya2VyX251bWJlcikKKyAgICAgICAgICAg
IHdzID0gX1dvcmtlclN0YXRlKHdvcmtlcl9udW1iZXIsIHcpCisgICAgICAgICAgICBzZWxmLl93
b3JrZXJzW3cubmFtZV0gPSB3cworCisgICAgICAgICAgICAjIFdlIHNsZWVwIGEgYml0IGluIGJl
dHdlZW4gd29ya2VycyB0byBnaXZlIHRoZSBwcm9jZXNzZXMgYSBjaGFuY2UKKyAgICAgICAgICAg
ICMgdG8gc3RhcnQgdXAgd2l0aG91dCB0aHJhc2hpbmcuCisgICAgICAgICAgICB0aW1lLnNsZWVw
KDAuMSkKIAogICAgICAgICBmb3IgdGVzdF9saXN0IGluIHRlc3RfbGlzdHM6CiAgICAgICAgICAg
ICBtYW5hZ2VyX2Nvbm5lY3Rpb24ucG9zdF9tZXNzYWdlKCd0ZXN0X2xpc3QnLCB0ZXN0X2xpc3Rb
MF0sIHRlc3RfbGlzdFsxXSkKIAotICAgICAgICBtYW5hZ2VyX2Nvbm5lY3Rpb24ucG9zdF9tZXNz
YWdlKCdzdG9wJykKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKG51bV93b3JrZXJzKToKKyAgICAg
ICAgICAgIG1hbmFnZXJfY29ubmVjdGlvbi5wb3N0X21lc3NhZ2UoJ3N0b3AnKQogCiAgICAgICAg
IGtleWJvYXJkX2ludGVycnVwdGVkID0gRmFsc2UKICAgICAgICAgaW50ZXJydXB0ZWQgPSBGYWxz
ZQpAQCAtOTIsNyArMTI0LDEyIEBAIGNsYXNzIFRlc3RSdW5uZXIyKHRlc3RfcnVubmVyLlRlc3RS
dW5uZXIpOgogICAgICAgICAgICAgd2hpbGUgbm90IHNlbGYuX2NoZWNrX2lmX2RvbmUoKToKICAg
ICAgICAgICAgICAgICBtYW5hZ2VyX2Nvbm5lY3Rpb24ucnVuX21lc3NhZ2VfbG9vcChkZWxheV9z
ZWNzPTEuMCkKIAorICAgICAgICAgICAgIyBGSVhNRTogY2hlY2sgdGhhdCBhbGwgdGhlIHdvcmtl
cnMgYXJlIGVpdGhlciB3ZWRnZWQgb3IgZGVhZC4KKworICAgICAgICAjIEZJWE1FOiBoYW5kbGUg
ZXhjZXB0aW9ucywgaW50ZXJydXB0cy4KKwogICAgICAgICAjIEZJWE1FOiBpbXBsZW1lbnQgc3Rh
dHMuCisKICAgICAgICAgdGhyZWFkX3RpbWluZ3MgPSBbXQogCiAgICAgICAgIHJldHVybiAoa2V5
Ym9hcmRfaW50ZXJydXB0ZWQsIGludGVycnVwdGVkLCB0aHJlYWRfdGltaW5ncywKQEAgLTEwMSwx
NiArMTM4LDIyIEBAIGNsYXNzIFRlc3RSdW5uZXIyKHRlc3RfcnVubmVyLlRlc3RSdW5uZXIpOgog
ICAgIGRlZiBfY2hlY2tfaWZfZG9uZShzZWxmKToKICAgICAgICAgIiIiUmV0dXJucyB0cnVlIGlm
ZiBhbGwgdGhlIHdvcmtlcnMgaGF2ZSBlaXRoZXIgY29tcGxldGVkIG9yIHdlZGdlZC4iIiIKICAg
ICAgICAgIyBGSVhNRTogaW1wbGVtZW50IHRvIGNoZWNrIGZvciB3ZWRnZWQgd29ya2Vycy4KLSAg
ICAgICAgcmV0dXJuIHNlbGYuX2RvbmUKKyAgICAgICAgZG9uZSA9IFRydWUKKyAgICAgICAgZm9y
IHcgaW4gc2VsZi5fd29ya2Vycy52YWx1ZXMoKToKKyAgICAgICAgICAgIGlmIG5vdCB3LmRvbmU6
CisgICAgICAgICAgICAgICAgZG9uZSA9IEZhbHNlCisKKyAgICAgICAgIyBGSVhNRTogaXMgdGhl
IGZvbGxvd2luZyBsaW5lIHNhZmU/CisgICAgICAgICMgc2VsZi5fZG9uZSA9IGRvbmUKKyAgICAg
ICAgcmV0dXJuIGRvbmUKIAogICAgIGRlZiBoYW5kbGVfc3RhcnRlZF90ZXN0KHNlbGYsIHNyYywg
dGVzdF9pbmZvLCBoYW5nX3RpbWVvdXQpOgogICAgICAgICAjIEZJWE1FOiBpbXBsZW1lbnQKICAg
ICAgICAgcGFzcwogCiAgICAgZGVmIGhhbmRsZV9kb25lKHNlbGYsIHNyYyk6Ci0gICAgICAgICMg
RklYTUU6IGltcGxlbWVudCBwcm9wZXJseSB0byBoYW5kbGUgbXVsdGlwbGUgd29ya2Vycy4KLSAg
ICAgICAgc2VsZi5fZG9uZSA9IFRydWUKLSAgICAgICAgcGFzcworICAgICAgICB3ID0gc2VsZi5f
d29ya2Vyc1tzcmNdCisgICAgICAgIHcuZG9uZSA9IFRydWUKIAogICAgIGRlZiBoYW5kbGVfZXhj
ZXB0aW9uKHNlbGYsIHNyYywgZXhjZXB0aW9uX2luZm8pOgogICAgICAgICByYWlzZSBleGNlcHRp
b25faW5mbwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82183</attachid>
            <date>2011-02-11 14:44:43 -0800</date>
            <delta_ts>2011-02-11 17:42:04 -0800</delta_ts>
            <desc>update w/ feedback from tony</desc>
            <filename>bug-54071-20110211144442.patch</filename>
            <type>text/plain</type>
            <size>6937</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzgzMDIKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA4ZTdhOWMwOTc5ZjY3M2ZlNWFmODQwM2EwYjUyYjYwMTM2
MmQwNjgzLi5iNWJlODFmOTRkZDc0ZTc3NzI0ZDVkNjkzZTRjMTk4NDk4MjEyMWQ4IDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0yLDYgKzIsMTcg
QEAKIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAorICAgICAgICB1cGRh
dGUgdGhlIE5SV1QgbXVsdGlwcm9jZXNzaW5nIGNvZGUgdG8gc3Bhd24gbXVsdGlwbGUgd29ya2Vy
cworICAgICAgICBpbnN0ZWFkIG9mIGp1c3QgdXNpbmcgb25lLgorCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDA3MQorCisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9ydW5uZXIyLnB5Ogor
CisyMDExLTAyLTExICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCiAgICAgICAgIFRoaXMgcGF0Y2ggYWRk
cyB0byBOUldUIG1vc3Qgb2YgdGhlIHN1cHBvcnQgbmVlZGVkIHRvIHJ1biB0aGUgbmV3CiAgICAg
ICAgIG1lc3NhZ2UtYmFzZWQgd29ya2VycyBpbiBzZXBhcmF0ZSB0aHJlYWRzIG9yIHByb2Nlc3Nl
cy4gVGhlIGNvZGUKICAgICAgICAgaXNuJ3QgZnVsbHkgY29tcGxldGUgeWV0IGJlY2F1c2Ugd2Ug
ZG9uJ3Qgc3VwcG9ydCBjYW5jZWwoKSBvcgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9ydW5uZXIyLnB5IGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9ydW5uZXIy
LnB5CmluZGV4IGYwOTdiODNmYWNhNmMyNThhM2M5YzM2ZTQwYWVhOTY2MjQzY2QzMzcuLmFjMmRl
MTc1NjM5NjNlNTVkNjFlMzMyODU1MmNlZjlhZWQyYjY5NDUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfcnVubmVyMi5w
eQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2Fn
ZS90ZXN0X3J1bm5lcjIucHkKQEAgLTM0LDcgKzM0LDkgQEAgd29ya2VycyBhbmQgcmVjZWl2ZSB0
aGVpciBjb21wbGV0aW9uIG1lc3NhZ2VzIGFjY29yZGluZ2x5LgogIiIiCiAKIGltcG9ydCBsb2dn
aW5nCitpbXBvcnQgdGltZQogCitmcm9tIHdlYmtpdHB5LnRvb2wgaW1wb3J0IGdyYW1tYXIKIAog
ZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IG1hbmFnZXJf
d29ya2VyX2Jyb2tlcgogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2Ug
aW1wb3J0IHRlc3RfcnVubmVyCkBAIC00MywxNiArNDUsMzUgQEAgZnJvbSB3ZWJraXRweS5sYXlv
dXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHdvcmtlcgogX2xvZyA9IGxvZ2dpbmcuZ2V0
TG9nZ2VyKF9fbmFtZV9fKQogCiAKK2NsYXNzIF9Xb3JrZXJTdGF0ZShvYmplY3QpOgorICAgICIi
IkEgY2xhc3MgZm9yIHRoZSBUZXN0UnVubmVyL21hbmFnZXIgdG8gdXNlIHRvIHRyYWNrIHRoZSBj
dXJyZW50IHN0YXRlCisgICAgb2YgdGhlIHdvcmtlcnMuIiIiCisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIG51bWJlciwgd29ya2VyKToKKyAgICAgICAgc2VsZi53b3JrZXIgPSB3b3JrZXIKKyAgICAg
ICAgc2VsZi5udW1iZXIgPSBudW1iZXIKKyAgICAgICAgc2VsZi5kb25lID0gRmFsc2UKKworICAg
IGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJfV29ya2VyU3RhdGUoIiArIHN0
cihzZWxmLl9fZGljdF9fKSArICIpIgorCisKIGNsYXNzIFRlc3RSdW5uZXIyKHRlc3RfcnVubmVy
LlRlc3RSdW5uZXIpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zLCBwcmlu
dGVyKToKICAgICAgICAgdGVzdF9ydW5uZXIuVGVzdFJ1bm5lci5fX2luaXRfXyhzZWxmLCBwb3J0
LCBvcHRpb25zLCBwcmludGVyKQogICAgICAgICBzZWxmLl9hbGxfcmVzdWx0cyA9IFtdCiAgICAg
ICAgIHNlbGYuX2dyb3VwX3N0YXRzID0ge30KICAgICAgICAgc2VsZi5fY3VycmVudF9yZXN1bHRf
c3VtbWFyeSA9IE5vbmUKLSAgICAgICAgc2VsZi5fZG9uZSA9IEZhbHNlCisKKyAgICAgICAgIyBU
aGlzIG1hcHMgd29ya2VyIG5hbWVzIHRvIHRoZSBzdGF0ZSB3ZSBhcmUgdHJhY2tpbmcgZm9yIGVh
Y2ggb2YgdGhlbS4KKyAgICAgICAgc2VsZi5fd29ya2VycyA9IHt9CiAKICAgICBkZWYgaXNfZG9u
ZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2RvbmUKKyAgICAgICAgd29ya2VycyA9IHNl
bGYuX3dvcmtlcnMudmFsdWVzKCkKKyAgICAgICAgcmV0dXJuIHdvcmtlcnMgYW5kIGFsbChzZWxm
Ll93b3JrZXJfaXNfZG9uZSh3b3JrZXIpIGZvciB3b3JrZXIgaW4gd29ya2VycykKKworICAgIGRl
ZiBfd29ya2VyX2lzX2RvbmUoc2VsZiwgd29ya2VyKToKKyAgICAgICAgIyBGSVhNRTogY2hlY2sg
aWYgdGhlIHdvcmtlciBpcyB3ZWRnZWQuCisgICAgICAgIHJldHVybiB3b3JrZXIuZG9uZQogCiAg
ICAgZGVmIG5hbWUoc2VsZik6CiAgICAgICAgIHJldHVybiAnVGVzdFJ1bm5lcjInCkBAIC03Miw1
NyArOTMsNzUgQEAgY2xhc3MgVGVzdFJ1bm5lcjIodGVzdF9ydW5uZXIuVGVzdFJ1bm5lcik6CiAg
ICAgICAgICAgICByZXN1bHRfc3VtbWFyeTogc3VtbWFyeSBvYmplY3QgdG8gcG9wdWxhdGUgd2l0
aCB0aGUgcmVzdWx0cwogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fY3VycmVudF9yZXN1bHRf
c3VtbWFyeSA9IHJlc3VsdF9zdW1tYXJ5CisgICAgICAgIHNlbGYuX2FsbF9yZXN1bHRzID0gW10K
KyAgICAgICAgc2VsZi5fd29ya2VycyA9IHt9CiAKLSAgICAgICAgIyBGSVhNRTogc2hhcmQgcHJv
cGVybHkuCisgICAgICAgIG51bV93b3JrZXJzID0gc2VsZi5fbnVtX3dvcmtlcnMoKQogCi0gICAg
ICAgICMgRklYTUU6IHNob3VsZCBzaGFyZF90ZXN0cyByZXR1cm4gYSBsaXN0IG9mIG9iamVjdHMg
cmF0aGVyIHRoYW4gdHVwbGVzPwotICAgICAgICB0ZXN0X2xpc3RzID0gc2VsZi5fc2hhcmRfdGVz
dHMoZmlsZV9saXN0LCBGYWxzZSkKKyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUo
J1NoYXJkaW5nIHRlc3RzIC4uLicpCisgICAgICAgIHRlc3RfbGlzdHMgPSBzZWxmLl9zaGFyZF90
ZXN0cyhmaWxlX2xpc3QsCisgICAgICAgICAgICBudW1fd29ya2VycyA+IDEgYW5kIG5vdCBzZWxm
Ll9vcHRpb25zLmV4cGVyaW1lbnRhbF9mdWxseV9wYXJhbGxlbCkKKyAgICAgICAgX2xvZy5kZWJ1
ZygiVXNpbmcgJWQgc2hhcmRzIiAlIGxlbih0ZXN0X2xpc3RzKSkKIAotICAgICAgICBtYW5hZ2Vy
X2Nvbm5lY3Rpb24gPSBtYW5hZ2VyX3dvcmtlcl9icm9rZXIuZ2V0KHNlbGYuX3BvcnQsIHNlbGYu
X29wdGlvbnMsIHNlbGYsIHdvcmtlci5Xb3JrZXIpCisgICAgICAgIG1hbmFnZXJfY29ubmVjdGlv
biA9IG1hbmFnZXJfd29ya2VyX2Jyb2tlci5nZXQoc2VsZi5fcG9ydCwgc2VsZi5fb3B0aW9ucywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLCB3b3JrZXIuV29ya2VyKQogCi0gICAgICAgICMgRklYTUU6IHN0YXJ0IGFsbCBvZiB0aGUg
d29ya2Vycy4KLSAgICAgICAgbWFuYWdlcl9jb25uZWN0aW9uLnN0YXJ0X3dvcmtlcigwKQorICAg
ICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgnU3RhcnRpbmcgJXMgLi4uJyAlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXIucGx1cmFsaXplKCd3b3JrZXIn
LCBudW1fd29ya2VycykpCisgICAgICAgIGZvciB3b3JrZXJfbnVtYmVyIGluIHhyYW5nZShudW1f
d29ya2Vycyk6CisgICAgICAgICAgICB3b3JrZXJfb2JqID0gbWFuYWdlcl9jb25uZWN0aW9uLnN0
YXJ0X3dvcmtlcih3b3JrZXJfbnVtYmVyKQorICAgICAgICAgICAgd29ya2VyX3N0YXRlID0gX1dv
cmtlclN0YXRlKHdvcmtlcl9udW1iZXIsIHdvcmtlcl9vYmopCisgICAgICAgICAgICBzZWxmLl93
b3JrZXJzW3dvcmtlcl9vYmoubmFtZV0gPSB3b3JrZXJfc3RhdGUKKworICAgICAgICAgICAgIyBG
SVhNRTogSWYgd2Ugc3RhcnQgd29ya2VycyB1cCB0b28gcXVpY2tseSwgRHVtcFJlbmRlclRyZWUg
YXBwZWFycworICAgICAgICAgICAgIyB0byB0aHJhc2ggb24gc29tZXRoaW5nIGFuZCB0aW1lIG91
dCBpdHMgZmlyc3QgZmV3IHRlc3RzLiBVbnRpbAorICAgICAgICAgICAgIyB3ZSBjYW4gZmlndXJl
IG91dCB3aGF0J3MgZ29pbmcgb24sIHNsZWVwIGEgYml0IGluIGJldHdlZW4KKyAgICAgICAgICAg
ICMgd29ya2Vycy4KKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4xKQogCiAgICAgICAgIGZvciB0
ZXN0X2xpc3QgaW4gdGVzdF9saXN0czoKICAgICAgICAgICAgIG1hbmFnZXJfY29ubmVjdGlvbi5w
b3N0X21lc3NhZ2UoJ3Rlc3RfbGlzdCcsIHRlc3RfbGlzdFswXSwgdGVzdF9saXN0WzFdKQogCi0g
ICAgICAgIG1hbmFnZXJfY29ubmVjdGlvbi5wb3N0X21lc3NhZ2UoJ3N0b3AnKQorICAgICAgICAj
IFdlIHBvc3Qgb25lICdzdG9wJyBtZXNzYWdlIGZvciBlYWNoIHdvcmtlci4gQmVjYXVzZSB0aGUg
c3RvcCBtZXNzYWdlCisgICAgICAgICMgYXJlIHNlbnQgYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cywg
YW5kIGJlY2F1c2UgZWFjaCB3b3JrZXIgd2lsbCBzdG9wCisgICAgICAgICMgcmVhZGluZyBtZXNz
c2FnZXMgYWZ0ZXIgcmVjZWl2aW5nIGEgc3RvcCwgd2UgY2FuIGJlIHN1cmUgZWFjaAorICAgICAg
ICAjIHdvcmtlciB3aWxsIGdldCBhIHN0b3AgbWVzc2FnZSBhbmQgaGVuY2UgdGhleSB3aWxsIGFs
bCBzaHV0IGRvd24uCisgICAgICAgIGZvciBpIGluIHhyYW5nZShudW1fd29ya2Vycyk6CisgICAg
ICAgICAgICBtYW5hZ2VyX2Nvbm5lY3Rpb24ucG9zdF9tZXNzYWdlKCdzdG9wJykKIAogICAgICAg
ICBrZXlib2FyZF9pbnRlcnJ1cHRlZCA9IEZhbHNlCiAgICAgICAgIGludGVycnVwdGVkID0gRmFs
c2UKICAgICAgICAgaWYgbm90IHNlbGYuX29wdGlvbnMuZHJ5X3J1bjoKLSAgICAgICAgICAgIHdo
aWxlIG5vdCBzZWxmLl9jaGVja19pZl9kb25lKCk6CisgICAgICAgICAgICB3aGlsZSBub3Qgc2Vs
Zi5pc19kb25lKCk6CisgICAgICAgICAgICAgICAgIyBXZSBsb29wIHdpdGggYSB0aW1lb3V0IGlu
IG9yZGVyIHRvIGJlIGFibGUgdG8gZGV0ZWN0IHdlZGdlZCB0aHJlYWRzLgogICAgICAgICAgICAg
ICAgIG1hbmFnZXJfY29ubmVjdGlvbi5ydW5fbWVzc2FnZV9sb29wKGRlbGF5X3NlY3M9MS4wKQog
CisgICAgICAgICMgRklYTUU6IGhhbmRsZSBleGNlcHRpb25zLCBpbnRlcnJ1cHRzLgorCiAgICAg
ICAgICMgRklYTUU6IGltcGxlbWVudCBzdGF0cy4KKwogICAgICAgICB0aHJlYWRfdGltaW5ncyA9
IFtdCiAKICAgICAgICAgIyBGSVhNRTogc2hvdWxkIHRoaXMgYmUgYSBjbGFzcyBpbnN0ZWFkIG9m
IGEgdHVwbGU/CiAgICAgICAgIHJldHVybiAoa2V5Ym9hcmRfaW50ZXJydXB0ZWQsIGludGVycnVw
dGVkLCB0aHJlYWRfdGltaW5ncywKICAgICAgICAgICAgICAgICBzZWxmLl9ncm91cF9zdGF0cywg
c2VsZi5fYWxsX3Jlc3VsdHMpCiAKLSAgICBkZWYgX2NoZWNrX2lmX2RvbmUoc2VsZik6Ci0gICAg
ICAgICIiIlJldHVybnMgdHJ1ZSBpZmYgYWxsIHRoZSB3b3JrZXJzIGhhdmUgZWl0aGVyIGNvbXBs
ZXRlZCBvciB3ZWRnZWQuIiIiCi0gICAgICAgICMgRklYTUU6IGltcGxlbWVudCB0byBjaGVjayBm
b3Igd2VkZ2VkIHdvcmtlcnMuCi0gICAgICAgIHJldHVybiBzZWxmLl9kb25lCi0KLSAgICBkZWYg
aGFuZGxlX3N0YXJ0ZWRfdGVzdChzZWxmLCBzcmMsIHRlc3RfaW5mbywgaGFuZ190aW1lb3V0KToK
KyAgICBkZWYgaGFuZGxlX3N0YXJ0ZWRfdGVzdChzZWxmLCBzb3VyY2UsIHRlc3RfaW5mbywgaGFu
Z190aW1lb3V0KToKICAgICAgICAgIyBGSVhNRTogaW1wbGVtZW50CiAgICAgICAgIHBhc3MKIAot
ICAgIGRlZiBoYW5kbGVfZG9uZShzZWxmLCBzcmMpOgotICAgICAgICAjIEZJWE1FOiBpbXBsZW1l
bnQgcHJvcGVybHkgdG8gaGFuZGxlIG11bHRpcGxlIHdvcmtlcnMuCi0gICAgICAgIHNlbGYuX2Rv
bmUgPSBUcnVlCi0gICAgICAgIHBhc3MKKyAgICBkZWYgaGFuZGxlX2RvbmUoc2VsZiwgc291cmNl
KToKKyAgICAgICAgd29ya2VyID0gc2VsZi5fd29ya2Vyc1tzb3VyY2VdCisgICAgICAgIHdvcmtl
ci5kb25lID0gVHJ1ZQogCi0gICAgZGVmIGhhbmRsZV9leGNlcHRpb24oc2VsZiwgc3JjLCBleGNl
cHRpb25faW5mbyk6CisgICAgZGVmIGhhbmRsZV9leGNlcHRpb24oc2VsZiwgc291cmNlLCBleGNl
cHRpb25faW5mbyk6CiAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbl9pbmZvCiAKLSAgICBkZWYgaGFu
ZGxlX2ZpbmlzaGVkX2xpc3Qoc2VsZiwgc3JjLCBsaXN0X25hbWUsIG51bV90ZXN0cywgZWxhcHNl
ZF90aW1lKToKKyAgICBkZWYgaGFuZGxlX2ZpbmlzaGVkX2xpc3Qoc2VsZiwgc291cmNlLCBsaXN0
X25hbWUsIG51bV90ZXN0cywgZWxhcHNlZF90aW1lKToKICAgICAgICAgIyBGSVhNRTogdXBkYXRl
IHN0YXRzCiAgICAgICAgIHBhc3MKIAotICAgIGRlZiBoYW5kbGVfZmluaXNoZWRfdGVzdChzZWxm
LCBzcmMsIHJlc3VsdCwgZWxhcHNlZF90aW1lKToKKyAgICBkZWYgaGFuZGxlX2ZpbmlzaGVkX3Rl
c3Qoc2VsZiwgc291cmNlLCByZXN1bHQsIGVsYXBzZWRfdGltZSk6CiAgICAgICAgIHNlbGYuX3Vw
ZGF0ZV9zdW1tYXJ5X3dpdGhfcmVzdWx0KHNlbGYuX2N1cnJlbnRfcmVzdWx0X3N1bW1hcnksIHJl
c3VsdCkKIAogICAgICAgICAjIEZJWE1FOiB1cGRhdGUgc3RhdHMuCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82215</attachid>
            <date>2011-02-11 17:42:06 -0800</date>
            <delta_ts>2011-02-14 09:45:57 -0800</delta_ts>
            <desc>rename fields per feedback from tony</desc>
            <filename>bug-54071-20110211174205.patch</filename>
            <type>text/plain</type>
            <size>7075</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzgzMDIKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA4ZTdhOWMwOTc5ZjY3M2ZlNWFmODQwM2EwYjUyYjYwMTM2
MmQwNjgzLi5iNWJlODFmOTRkZDc0ZTc3NzI0ZDVkNjkzZTRjMTk4NDk4MjEyMWQ4IDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0yLDYgKzIsMTcg
QEAKIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAorICAgICAgICB1cGRh
dGUgdGhlIE5SV1QgbXVsdGlwcm9jZXNzaW5nIGNvZGUgdG8gc3Bhd24gbXVsdGlwbGUgd29ya2Vy
cworICAgICAgICBpbnN0ZWFkIG9mIGp1c3QgdXNpbmcgb25lLgorCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDA3MQorCisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9ydW5uZXIyLnB5Ogor
CisyMDExLTAyLTExICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCiAgICAgICAgIFRoaXMgcGF0Y2ggYWRk
cyB0byBOUldUIG1vc3Qgb2YgdGhlIHN1cHBvcnQgbmVlZGVkIHRvIHJ1biB0aGUgbmV3CiAgICAg
ICAgIG1lc3NhZ2UtYmFzZWQgd29ya2VycyBpbiBzZXBhcmF0ZSB0aHJlYWRzIG9yIHByb2Nlc3Nl
cy4gVGhlIGNvZGUKICAgICAgICAgaXNuJ3QgZnVsbHkgY29tcGxldGUgeWV0IGJlY2F1c2Ugd2Ug
ZG9uJ3Qgc3VwcG9ydCBjYW5jZWwoKSBvcgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9ydW5uZXIyLnB5IGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9ydW5uZXIy
LnB5CmluZGV4IGYwOTdiODNmYWNhNmMyNThhM2M5YzM2ZTQwYWVhOTY2MjQzY2QzMzcuLjU4NzEx
MDVjOWU4YjI0MGFhYTdlNWY4NjIxZjA5NTRlZDFjODkxNDIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfcnVubmVyMi5w
eQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2Fn
ZS90ZXN0X3J1bm5lcjIucHkKQEAgLTM0LDcgKzM0LDkgQEAgd29ya2VycyBhbmQgcmVjZWl2ZSB0
aGVpciBjb21wbGV0aW9uIG1lc3NhZ2VzIGFjY29yZGluZ2x5LgogIiIiCiAKIGltcG9ydCBsb2dn
aW5nCitpbXBvcnQgdGltZQogCitmcm9tIHdlYmtpdHB5LnRvb2wgaW1wb3J0IGdyYW1tYXIKIAog
ZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IG1hbmFnZXJf
d29ya2VyX2Jyb2tlcgogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2Ug
aW1wb3J0IHRlc3RfcnVubmVyCkBAIC00MywxNiArNDUsMzUgQEAgZnJvbSB3ZWJraXRweS5sYXlv
dXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IHdvcmtlcgogX2xvZyA9IGxvZ2dpbmcuZ2V0
TG9nZ2VyKF9fbmFtZV9fKQogCiAKK2NsYXNzIF9Xb3JrZXJTdGF0ZShvYmplY3QpOgorICAgICIi
IkEgY2xhc3MgZm9yIHRoZSBUZXN0UnVubmVyL21hbmFnZXIgdG8gdXNlIHRvIHRyYWNrIHRoZSBj
dXJyZW50IHN0YXRlCisgICAgb2YgdGhlIHdvcmtlcnMuIiIiCisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIG51bWJlciwgd29ya2VyX2Nvbm5lY3Rpb24pOgorICAgICAgICBzZWxmLndvcmtlcl9jb25u
ZWN0aW9uID0gd29ya2VyX2Nvbm5lY3Rpb24KKyAgICAgICAgc2VsZi5udW1iZXIgPSBudW1iZXIK
KyAgICAgICAgc2VsZi5kb25lID0gRmFsc2UKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAg
ICAgICAgcmV0dXJuICJfV29ya2VyU3RhdGUoIiArIHN0cihzZWxmLl9fZGljdF9fKSArICIpIgor
CisKIGNsYXNzIFRlc3RSdW5uZXIyKHRlc3RfcnVubmVyLlRlc3RSdW5uZXIpOgogICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zLCBwcmludGVyKToKICAgICAgICAgdGVzdF9ydW5u
ZXIuVGVzdFJ1bm5lci5fX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zLCBwcmludGVyKQogICAg
ICAgICBzZWxmLl9hbGxfcmVzdWx0cyA9IFtdCiAgICAgICAgIHNlbGYuX2dyb3VwX3N0YXRzID0g
e30KICAgICAgICAgc2VsZi5fY3VycmVudF9yZXN1bHRfc3VtbWFyeSA9IE5vbmUKLSAgICAgICAg
c2VsZi5fZG9uZSA9IEZhbHNlCisKKyAgICAgICAgIyBUaGlzIG1hcHMgd29ya2VyIG5hbWVzIHRv
IHRoZSBzdGF0ZSB3ZSBhcmUgdHJhY2tpbmcgZm9yIGVhY2ggb2YgdGhlbS4KKyAgICAgICAgc2Vs
Zi5fd29ya2VyX3N0YXRlcyA9IHt9CiAKICAgICBkZWYgaXNfZG9uZShzZWxmKToKLSAgICAgICAg
cmV0dXJuIHNlbGYuX2RvbmUKKyAgICAgICAgd29ya2VyX3N0YXRlcyA9IHNlbGYuX3dvcmtlcl9z
dGF0ZXMudmFsdWVzKCkKKyAgICAgICAgcmV0dXJuIHdvcmtlcl9zdGF0ZXMgYW5kIGFsbChzZWxm
Ll93b3JrZXJfaXNfZG9uZSh3b3JrZXJfc3RhdGUpIGZvciB3b3JrZXJfc3RhdGUgaW4gd29ya2Vy
X3N0YXRlcykKKworICAgIGRlZiBfd29ya2VyX2lzX2RvbmUoc2VsZiwgd29ya2VyX3N0YXRlKToK
KyAgICAgICAgIyBGSVhNRTogY2hlY2sgaWYgdGhlIHdvcmtlciBpcyB3ZWRnZWQuCisgICAgICAg
IHJldHVybiB3b3JrZXJfc3RhdGUuZG9uZQogCiAgICAgZGVmIG5hbWUoc2VsZik6CiAgICAgICAg
IHJldHVybiAnVGVzdFJ1bm5lcjInCkBAIC03Miw1NyArOTMsNzUgQEAgY2xhc3MgVGVzdFJ1bm5l
cjIodGVzdF9ydW5uZXIuVGVzdFJ1bm5lcik6CiAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeTog
c3VtbWFyeSBvYmplY3QgdG8gcG9wdWxhdGUgd2l0aCB0aGUgcmVzdWx0cwogICAgICAgICAiIiIK
ICAgICAgICAgc2VsZi5fY3VycmVudF9yZXN1bHRfc3VtbWFyeSA9IHJlc3VsdF9zdW1tYXJ5Cisg
ICAgICAgIHNlbGYuX2FsbF9yZXN1bHRzID0gW10KKyAgICAgICAgc2VsZi5fd29ya2VyX3N0YXRl
cyA9IHt9CiAKLSAgICAgICAgIyBGSVhNRTogc2hhcmQgcHJvcGVybHkuCisgICAgICAgIG51bV93
b3JrZXJzID0gc2VsZi5fbnVtX3dvcmtlcnMoKQogCi0gICAgICAgICMgRklYTUU6IHNob3VsZCBz
aGFyZF90ZXN0cyByZXR1cm4gYSBsaXN0IG9mIG9iamVjdHMgcmF0aGVyIHRoYW4gdHVwbGVzPwot
ICAgICAgICB0ZXN0X2xpc3RzID0gc2VsZi5fc2hhcmRfdGVzdHMoZmlsZV9saXN0LCBGYWxzZSkK
KyAgICAgICAgc2VsZi5fcHJpbnRlci5wcmludF91cGRhdGUoJ1NoYXJkaW5nIHRlc3RzIC4uLicp
CisgICAgICAgIHRlc3RfbGlzdHMgPSBzZWxmLl9zaGFyZF90ZXN0cyhmaWxlX2xpc3QsCisgICAg
ICAgICAgICBudW1fd29ya2VycyA+IDEgYW5kIG5vdCBzZWxmLl9vcHRpb25zLmV4cGVyaW1lbnRh
bF9mdWxseV9wYXJhbGxlbCkKKyAgICAgICAgX2xvZy5kZWJ1ZygiVXNpbmcgJWQgc2hhcmRzIiAl
IGxlbih0ZXN0X2xpc3RzKSkKIAotICAgICAgICBtYW5hZ2VyX2Nvbm5lY3Rpb24gPSBtYW5hZ2Vy
X3dvcmtlcl9icm9rZXIuZ2V0KHNlbGYuX3BvcnQsIHNlbGYuX29wdGlvbnMsIHNlbGYsIHdvcmtl
ci5Xb3JrZXIpCisgICAgICAgIG1hbmFnZXJfY29ubmVjdGlvbiA9IG1hbmFnZXJfd29ya2VyX2Jy
b2tlci5nZXQoc2VsZi5fcG9ydCwgc2VsZi5fb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLCB3b3JrZXIuV29ya2VyKQog
Ci0gICAgICAgICMgRklYTUU6IHN0YXJ0IGFsbCBvZiB0aGUgd29ya2Vycy4KLSAgICAgICAgbWFu
YWdlcl9jb25uZWN0aW9uLnN0YXJ0X3dvcmtlcigwKQorICAgICAgICBzZWxmLl9wcmludGVyLnBy
aW50X3VwZGF0ZSgnU3RhcnRpbmcgJXMgLi4uJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdyYW1tYXIucGx1cmFsaXplKCd3b3JrZXInLCBudW1fd29ya2VycykpCisgICAg
ICAgIGZvciB3b3JrZXJfbnVtYmVyIGluIHhyYW5nZShudW1fd29ya2Vycyk6CisgICAgICAgICAg
ICB3b3JrZXJfY29ubmVjdGlvbiA9IG1hbmFnZXJfY29ubmVjdGlvbi5zdGFydF93b3JrZXIod29y
a2VyX251bWJlcikKKyAgICAgICAgICAgIHdvcmtlcl9zdGF0ZSA9IF9Xb3JrZXJTdGF0ZSh3b3Jr
ZXJfbnVtYmVyLCB3b3JrZXJfY29ubmVjdGlvbikKKyAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9z
dGF0ZXNbd29ya2VyX2Nvbm5lY3Rpb24ubmFtZV0gPSB3b3JrZXJfc3RhdGUKKworICAgICAgICAg
ICAgIyBGSVhNRTogSWYgd2Ugc3RhcnQgd29ya2VycyB1cCB0b28gcXVpY2tseSwgRHVtcFJlbmRl
clRyZWUgYXBwZWFycworICAgICAgICAgICAgIyB0byB0aHJhc2ggb24gc29tZXRoaW5nIGFuZCB0
aW1lIG91dCBpdHMgZmlyc3QgZmV3IHRlc3RzLiBVbnRpbAorICAgICAgICAgICAgIyB3ZSBjYW4g
ZmlndXJlIG91dCB3aGF0J3MgZ29pbmcgb24sIHNsZWVwIGEgYml0IGluIGJldHdlZW4KKyAgICAg
ICAgICAgICMgd29ya2Vycy4KKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4xKQogCiAgICAgICAg
IGZvciB0ZXN0X2xpc3QgaW4gdGVzdF9saXN0czoKICAgICAgICAgICAgIG1hbmFnZXJfY29ubmVj
dGlvbi5wb3N0X21lc3NhZ2UoJ3Rlc3RfbGlzdCcsIHRlc3RfbGlzdFswXSwgdGVzdF9saXN0WzFd
KQogCi0gICAgICAgIG1hbmFnZXJfY29ubmVjdGlvbi5wb3N0X21lc3NhZ2UoJ3N0b3AnKQorICAg
ICAgICAjIFdlIHBvc3Qgb25lICdzdG9wJyBtZXNzYWdlIGZvciBlYWNoIHdvcmtlci4gQmVjYXVz
ZSB0aGUgc3RvcCBtZXNzYWdlCisgICAgICAgICMgYXJlIHNlbnQgYWZ0ZXIgYWxsIG9mIHRoZSB0
ZXN0cywgYW5kIGJlY2F1c2UgZWFjaCB3b3JrZXIgd2lsbCBzdG9wCisgICAgICAgICMgcmVhZGlu
ZyBtZXNzc2FnZXMgYWZ0ZXIgcmVjZWl2aW5nIGEgc3RvcCwgd2UgY2FuIGJlIHN1cmUgZWFjaAor
ICAgICAgICAjIHdvcmtlciB3aWxsIGdldCBhIHN0b3AgbWVzc2FnZSBhbmQgaGVuY2UgdGhleSB3
aWxsIGFsbCBzaHV0IGRvd24uCisgICAgICAgIGZvciBpIGluIHhyYW5nZShudW1fd29ya2Vycyk6
CisgICAgICAgICAgICBtYW5hZ2VyX2Nvbm5lY3Rpb24ucG9zdF9tZXNzYWdlKCdzdG9wJykKIAog
ICAgICAgICBrZXlib2FyZF9pbnRlcnJ1cHRlZCA9IEZhbHNlCiAgICAgICAgIGludGVycnVwdGVk
ID0gRmFsc2UKICAgICAgICAgaWYgbm90IHNlbGYuX29wdGlvbnMuZHJ5X3J1bjoKLSAgICAgICAg
ICAgIHdoaWxlIG5vdCBzZWxmLl9jaGVja19pZl9kb25lKCk6CisgICAgICAgICAgICB3aGlsZSBu
b3Qgc2VsZi5pc19kb25lKCk6CisgICAgICAgICAgICAgICAgIyBXZSBsb29wIHdpdGggYSB0aW1l
b3V0IGluIG9yZGVyIHRvIGJlIGFibGUgdG8gZGV0ZWN0IHdlZGdlZCB0aHJlYWRzLgogICAgICAg
ICAgICAgICAgIG1hbmFnZXJfY29ubmVjdGlvbi5ydW5fbWVzc2FnZV9sb29wKGRlbGF5X3NlY3M9
MS4wKQogCisgICAgICAgICMgRklYTUU6IGhhbmRsZSBleGNlcHRpb25zLCBpbnRlcnJ1cHRzLgor
CiAgICAgICAgICMgRklYTUU6IGltcGxlbWVudCBzdGF0cy4KKwogICAgICAgICB0aHJlYWRfdGlt
aW5ncyA9IFtdCiAKICAgICAgICAgIyBGSVhNRTogc2hvdWxkIHRoaXMgYmUgYSBjbGFzcyBpbnN0
ZWFkIG9mIGEgdHVwbGU/CiAgICAgICAgIHJldHVybiAoa2V5Ym9hcmRfaW50ZXJydXB0ZWQsIGlu
dGVycnVwdGVkLCB0aHJlYWRfdGltaW5ncywKICAgICAgICAgICAgICAgICBzZWxmLl9ncm91cF9z
dGF0cywgc2VsZi5fYWxsX3Jlc3VsdHMpCiAKLSAgICBkZWYgX2NoZWNrX2lmX2RvbmUoc2VsZik6
Ci0gICAgICAgICIiIlJldHVybnMgdHJ1ZSBpZmYgYWxsIHRoZSB3b3JrZXJzIGhhdmUgZWl0aGVy
IGNvbXBsZXRlZCBvciB3ZWRnZWQuIiIiCi0gICAgICAgICMgRklYTUU6IGltcGxlbWVudCB0byBj
aGVjayBmb3Igd2VkZ2VkIHdvcmtlcnMuCi0gICAgICAgIHJldHVybiBzZWxmLl9kb25lCi0KLSAg
ICBkZWYgaGFuZGxlX3N0YXJ0ZWRfdGVzdChzZWxmLCBzcmMsIHRlc3RfaW5mbywgaGFuZ190aW1l
b3V0KToKKyAgICBkZWYgaGFuZGxlX3N0YXJ0ZWRfdGVzdChzZWxmLCBzb3VyY2UsIHRlc3RfaW5m
bywgaGFuZ190aW1lb3V0KToKICAgICAgICAgIyBGSVhNRTogaW1wbGVtZW50CiAgICAgICAgIHBh
c3MKIAotICAgIGRlZiBoYW5kbGVfZG9uZShzZWxmLCBzcmMpOgotICAgICAgICAjIEZJWE1FOiBp
bXBsZW1lbnQgcHJvcGVybHkgdG8gaGFuZGxlIG11bHRpcGxlIHdvcmtlcnMuCi0gICAgICAgIHNl
bGYuX2RvbmUgPSBUcnVlCi0gICAgICAgIHBhc3MKKyAgICBkZWYgaGFuZGxlX2RvbmUoc2VsZiwg
c291cmNlKToKKyAgICAgICAgd29ya2VyX3N0YXRlID0gc2VsZi5fd29ya2VyX3N0YXRlc1tzb3Vy
Y2VdCisgICAgICAgIHdvcmtlcl9zdGF0ZS5kb25lID0gVHJ1ZQogCi0gICAgZGVmIGhhbmRsZV9l
eGNlcHRpb24oc2VsZiwgc3JjLCBleGNlcHRpb25faW5mbyk6CisgICAgZGVmIGhhbmRsZV9leGNl
cHRpb24oc2VsZiwgc291cmNlLCBleGNlcHRpb25faW5mbyk6CiAgICAgICAgIHJhaXNlIGV4Y2Vw
dGlvbl9pbmZvCiAKLSAgICBkZWYgaGFuZGxlX2ZpbmlzaGVkX2xpc3Qoc2VsZiwgc3JjLCBsaXN0
X25hbWUsIG51bV90ZXN0cywgZWxhcHNlZF90aW1lKToKKyAgICBkZWYgaGFuZGxlX2ZpbmlzaGVk
X2xpc3Qoc2VsZiwgc291cmNlLCBsaXN0X25hbWUsIG51bV90ZXN0cywgZWxhcHNlZF90aW1lKToK
ICAgICAgICAgIyBGSVhNRTogdXBkYXRlIHN0YXRzCiAgICAgICAgIHBhc3MKIAotICAgIGRlZiBo
YW5kbGVfZmluaXNoZWRfdGVzdChzZWxmLCBzcmMsIHJlc3VsdCwgZWxhcHNlZF90aW1lKToKKyAg
ICBkZWYgaGFuZGxlX2ZpbmlzaGVkX3Rlc3Qoc2VsZiwgc291cmNlLCByZXN1bHQsIGVsYXBzZWRf
dGltZSk6CiAgICAgICAgIHNlbGYuX3VwZGF0ZV9zdW1tYXJ5X3dpdGhfcmVzdWx0KHNlbGYuX2N1
cnJlbnRfcmVzdWx0X3N1bW1hcnksIHJlc3VsdCkKIAogICAgICAgICAjIEZJWE1FOiB1cGRhdGUg
c3RhdHMuCg==
</data>
<flag name="review"
          id="73858"
          type_id="1"
          status="+"
          setter="tony"
    />
          </attachment>
      

    </bug>

</bugzilla>