<?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>60869</bug_id>
          
          <creation_ts>2011-05-15 21:57:40 -0700</creation_ts>
          <short_desc>Convert json_results_generator.py to output version 4 JSON.</short_desc>
          <delta_ts>2011-07-11 15:48:35 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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>61294</dependson>
    
    <dependson>62953</dependson>
    
    <dependson>63609</dependson>
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Alice Boxhall">aboxhall</reporter>
          <assigned_to name="Alice Boxhall">aboxhall</assigned_to>
          <cc>abarth</cc>
    
    <cc>commit-queue</cc>
    
    <cc>kinuko</cc>
    
    <cc>ojan</cc>
    
    <cc>senorblanco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>404274</commentid>
    <comment_count>0</comment_count>
    <who name="Alice Boxhall">aboxhall</who>
    <bug_when>2011-05-15 21:57:40 -0700</bug_when>
    <thetext>Convert json_results_generator.py to output version 4 JSON.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404275</commentid>
    <comment_count>1</comment_count>
      <attachid>93603</attachid>
    <who name="Alice Boxhall">aboxhall</who>
    <bug_when>2011-05-15 21:59:44 -0700</bug_when>
    <thetext>Created attachment 93603
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406157</commentid>
    <comment_count>2</comment_count>
      <attachid>93603</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-05-18 18:01:44 -0700</bug_when>
    <thetext>Comment on attachment 93603
Patch

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

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:88
&gt; +            if not isinstance(data, dict) or len(data) == 0 or &quot;results&quot; in data:

Do we ever hit cases in practice where data is not a dict or where len(data) == 0?

Also, !len(data) is preferred to checking if it&apos;s equal to zero in WebKit code.

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:96
&gt; +def convert_flat_path_to_trie(path, value, trie):

nit: Maybe just call this add_path_to_trie? It&apos;s not really converting anything to a trie.

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:108
&gt; +    directory, _, rest = path.partition(&quot;/&quot;)

Would be good to name the middle variable even if it&apos;s unused. Just to know what&apos;s going on.

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:314
&gt; +        all_failing_tests_trie = {}
&gt; +        for test in all_failing_tests:
&gt; +            convert_flat_path_to_trie(test, {}, all_failing_tests_trie)
&gt; +
&gt; +        all_failing_tests.update(convert_trie_to_flat_paths(tests))

I don&apos;t understand what this is doing. Sorry, I tried to figure it out.

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:573
&gt; +        if len(thisTest) == 0:

if !len(thisTest):

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:606
&gt; +                try:
&gt; +                    test_results = results[self.TESTS]
&gt; +                except:
&gt; +                    continue

Why do you need a try/except here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406176</commentid>
    <comment_count>3</comment_count>
      <attachid>94024</attachid>
    <who name="Alice Boxhall">aboxhall</who>
    <bug_when>2011-05-18 18:36:46 -0700</bug_when>
    <thetext>Created attachment 94024
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406182</commentid>
    <comment_count>4</comment_count>
      <attachid>93603</attachid>
    <who name="Alice Boxhall">aboxhall</who>
    <bug_when>2011-05-18 18:40:40 -0700</bug_when>
    <thetext>Comment on attachment 93603
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:88
&gt;&gt; +            if not isinstance(data, dict) or len(data) == 0 or &quot;results&quot; in data:
&gt; 
&gt; Do we ever hit cases in practice where data is not a dict or where len(data) == 0?
&gt; 
&gt; Also, !len(data) is preferred to checking if it&apos;s equal to zero in WebKit code.

By the time this code is called, it should always have a results dict for each test, but there are stages during building where it&apos;s an empty dict. I&apos;m not sure where to draw the line with being cautious about what format the data will take.

Changed to not len(data).

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:96
&gt;&gt; +def convert_flat_path_to_trie(path, value, trie):
&gt; 
&gt; nit: Maybe just call this add_path_to_trie? It&apos;s not really converting anything to a trie.

Done.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:108
&gt;&gt; +    directory, _, rest = path.partition(&quot;/&quot;)
&gt; 
&gt; Would be good to name the middle variable even if it&apos;s unused. Just to know what&apos;s going on.

Done.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:314
&gt;&gt; +        all_failing_tests.update(convert_trie_to_flat_paths(tests))
&gt; 
&gt; I don&apos;t understand what this is doing. Sorry, I tried to figure it out.

Hm. That&apos;s because it has three completely unnecessary lines. Removed.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:573
&gt;&gt; +        if len(thisTest) == 0:
&gt; 
&gt; if !len(thisTest):

Done.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:606
&gt;&gt; +                    continue
&gt; 
&gt; Why do you need a try/except here?

Cargo cult copied from the old code (in json_layout_results_generator.py). I guess sometimes there is no tests data? A check would be a better way to handle that, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406799</commentid>
    <comment_count>5</comment_count>
    <who name="Alice Boxhall">aboxhall</who>
    <bug_when>2011-05-19 18:22:55 -0700</bug_when>
    <thetext>Bump.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406813</commentid>
    <comment_count>6</comment_count>
      <attachid>94024</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-05-19 18:42:37 -0700</bug_when>
    <thetext>Comment on attachment 94024
Patch

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

Please address the comments and then feel free to commit (or have someone commit it for you).

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:93
&gt; +        &quot;&quot;&quot;Flattens a trie directory structure into a flat structure.
&gt; +
&gt; +        Args:
&gt; +            trie: trie structure.
&gt; +            prefix: aleady-computed path to prepend to the eventual path, if any.
&gt; +
&gt; +        Returns:
&gt; +            The flattened directory structure.
&gt; +        &quot;&quot;&quot;
&gt; +        result = {}
&gt; +        for name, data in trie.iteritems():
&gt; +            if prefix:
&gt; +                fullname = prefix + &quot;/&quot; + name
&gt; +            else:
&gt; +                fullname = name
&gt; +
&gt; +            if not isinstance(data, dict) or not len(data) or &quot;results&quot; in data:
&gt; +                result[fullname] = data
&gt; +            else:
&gt; +                result.update(convert_trie_to_flat_paths(data, fullname))
&gt; +
&gt; +        return result

This block is indented too far.

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:586
&gt; +        archive_version = None

Don&apos;t think you need this line. Every line after either sets archive_version or early returns.

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:590
&gt; +            else:

Remove the else clause since you&apos;re early returning.

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:605
&gt; +                    # Make all paths are hierarchical

I don&apos;t think this comment adds anything. It just explains what the code does, which is clear if you read the code. :)

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:613
&gt; +        _log.info(&quot;converted to current version: \n&quot; + str(results_json))

Yikes. I don&apos;t think we want to log the whole results json. That&apos;s a lot of spam output for the buildbots. How about just logging the new version number here? Also, usually we&apos;d capitalize the first word (i.e. Converted).

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:159
&gt; +                # go down the trie structure to find the test results if necessary

Ditto. This comment just describes what the code clearly does.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406868</commentid>
    <comment_count>7</comment_count>
      <attachid>94170</attachid>
    <who name="Alice Boxhall">aboxhall</who>
    <bug_when>2011-05-19 21:36:57 -0700</bug_when>
    <thetext>Created attachment 94170
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406882</commentid>
    <comment_count>8</comment_count>
      <attachid>94170</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-05-19 22:15:39 -0700</bug_when>
    <thetext>Comment on attachment 94170
Patch

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

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:297
&gt; +            _log.info(builder_name + &quot; not in &quot; + str(results_json))

Sorry, I didn&apos;t notice this before, but do we really want to log here? I prefer avoiding spewing too much to the log since this is always run when people run the tests. If you really think this is worthwhile, it should be _log.debug so it&apos;s only logged with --verbose.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407773</commentid>
    <comment_count>9</comment_count>
      <attachid>94371</attachid>
    <who name="Alice Boxhall">aboxhall</who>
    <bug_when>2011-05-22 23:23:36 -0700</bug_when>
    <thetext>Created attachment 94371
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407774</commentid>
    <comment_count>10</comment_count>
      <attachid>94372</attachid>
    <who name="Alice Boxhall">aboxhall</who>
    <bug_when>2011-05-22 23:28:10 -0700</bug_when>
    <thetext>Created attachment 94372
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407776</commentid>
    <comment_count>11</comment_count>
      <attachid>94374</attachid>
    <who name="Alice Boxhall">aboxhall</who>
    <bug_when>2011-05-22 23:30:38 -0700</bug_when>
    <thetext>Created attachment 94374
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407777</commentid>
    <comment_count>12</comment_count>
      <attachid>94170</attachid>
    <who name="Alice Boxhall">aboxhall</who>
    <bug_when>2011-05-22 23:32:16 -0700</bug_when>
    <thetext>Comment on attachment 94170
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:297
&gt;&gt; +            _log.info(builder_name + &quot; not in &quot; + str(results_json))
&gt; 
&gt; Sorry, I didn&apos;t notice this before, but do we really want to log here? I prefer avoiding spewing too much to the log since this is always run when people run the tests. If you really think this is worthwhile, it should be _log.debug so it&apos;s only logged with --verbose.

Done (after a few Monday-brained failures).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408042</commentid>
    <comment_count>13</comment_count>
      <attachid>94374</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-05-23 10:28:45 -0700</bug_when>
    <thetext>Comment on attachment 94374
Patch

Clearing flags on attachment: 94374

Committed r87078: &lt;http://trac.webkit.org/changeset/87078&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408044</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-05-23 10:28:52 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408048</commentid>
    <comment_count>15</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-23 10:35:07 -0700</bug_when>
    <thetext>Is this patch going to break https://trac.webkit.org/browser/trunk/Tools/Scripts/webkitpy/common/net/resultsjsonparser.py ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408049</commentid>
    <comment_count>16</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-23 10:35:42 -0700</bug_when>
    <thetext>I would have expected updates to these tests:
https://trac.webkit.org/browser/trunk/Tools/Scripts/webkitpy/common/net/resultsjsonparser_unittest.py</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408061</commentid>
    <comment_count>17</comment_count>
      <attachid>94374</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-23 10:47:57 -0700</bug_when>
    <thetext>Comment on attachment 94374
Patch

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

Ojan. :(  You&apos;ve gone soft.  I don&apos;t think you read this very carefully.

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:80
&gt; +    &quot;&quot;&quot;Flattens a trie directory structure into a flat structure.
&gt; +
&gt; +    Args:
&gt; +        trie: trie structure.
&gt; +        prefix: aleady-computed path to prepend to the eventual path, if any.
&gt; +
&gt; +    Returns:
&gt; +        The flattened directory structure.
&gt; +    &quot;&quot;&quot;

These doc strings are mostly useless.  An overly verbose side-effect of Google-style python.

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:86
&gt; +        if prefix:
&gt; +            fullname = prefix + &quot;/&quot; + name
&gt; +        else:
&gt; +            fullname = name

I would have written this as a ternary since we use Python 2.5+

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:88
&gt; +        if not isinstance(data, dict) or not len(data) or &quot;results&quot; in data:

Why is this necessary?

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:91
&gt; +            result.update(convert_trie_to_flat_paths(data, fullname))

Seems these calls could have been a .update() in both cases, with a:

if data_is_not_what_we_want:
   data = convert_tree_to_flat_paths(data, fullname)

before if necessary.

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:104
&gt; +    if not &quot;/&quot; in path:

I assume we always use / and don&apos;t need to use os.path.sep?

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:134
&gt; +        add_path_to_trie(test, int(1000 * test_result.test_run_time), trie)

I wish our time variables would have their unit type in their name.  ms or second or whatever would make these types of multiplctaion much easier to read.

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:562
&gt; +        thisTest = tests

This is not python style.

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:593
&gt; +        if archive_version == 3:

I would have broken this whole block off into a new helper function with a nice name telling what it does. :)

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:177
&gt; +        sub_trie = trie

Huh?  Why not just name the incoming argument as sub_trie?

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:208
&gt; +        # FIXME(aboxhall): re-work tests to be more comprehensible and comprehensive.

We don&apos;t generally name FIXME&apos;s in WebKit.  Also, all comments in webkit should be sentences, beginning with a capital and ending with period.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408091</commentid>
    <comment_count>18</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-23 11:12:38 -0700</bug_when>
    <thetext>I rolled this patch out because there&apos;s some about how this patch interacts with the rest of the infrastructure and neither Alice nor Ojan seemed to be around to answer questions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408121</commentid>
    <comment_count>19</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-05-23 12:04:01 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; I would have expected updates to these tests:
&gt; https://trac.webkit.org/browser/trunk/Tools/Scripts/webkitpy/common/net/resultsjsonparser_unittest.py

I don&apos;t see how the two are related. This only affects incremental_results.json, not full_results.json or unexpected_results.json.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408122</commentid>
    <comment_count>20</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-05-23 12:04:48 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; I rolled this patch out because there&apos;s some about how this patch interacts with the rest of the infrastructure and neither Alice nor Ojan seemed to be around to answer questions.

Other than Eric&apos;s style/comment concerns, are there issues you see? Did something go wrong on the bots?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408135</commentid>
    <comment_count>21</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-23 12:16:49 -0700</bug_when>
    <thetext>&gt; Other than Eric&apos;s style/comment concerns, are there issues you see? Did something go wrong on the bots?

Nope.  I was just scared and couldn&apos;t find you on IRC.  If you think this is fine, we can land it again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408144</commentid>
    <comment_count>22</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-05-23 12:24:44 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; &gt; Other than Eric&apos;s style/comment concerns, are there issues you see? Did something go wrong on the bots?
&gt; 
&gt; Nope.  I was just scared and couldn&apos;t find you on IRC.  If you think this is fine, we can land it again.

Cool. Sorry I wasn&apos;t around. I agree with most of Eric&apos;s comments, so I think it makes sense to wait for a new patch first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408149</commentid>
    <comment_count>23</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-05-23 12:28:51 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 94374 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=94374&amp;action=review
&gt; 
&gt; Ojan. :(  You&apos;ve gone soft.  I don&apos;t think you read this very carefully.

Sorry, was a bit rushed. I just focused on correctness.

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:86
&gt; &gt; +        if prefix:
&gt; &gt; +            fullname = prefix + &quot;/&quot; + name
&gt; &gt; +        else:
&gt; &gt; +            fullname = name
&gt; 
&gt; I would have written this as a ternary since we use Python 2.5+

Meh. Personally I think python ternaries are less readable than an if/else.

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:104
&gt; &gt; +    if not &quot;/&quot; in path:
&gt; 
&gt; I assume we always use / and don&apos;t need to use os.path.sep?

Correct. os.path.sep would be wrong.

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:134
&gt; &gt; +        add_path_to_trie(test, int(1000 * test_result.test_run_time), trie)
&gt; 
&gt; I wish our time variables would have their unit type in their name.  ms or second or whatever would make these types of multiplctaion much easier to read.

Agreed. Doesn&apos;t need to block this patch though, right?

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:562
&gt; &gt; +        thisTest = tests
&gt; 
&gt; This is not python style.
&gt;
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:208
&gt; &gt; +        # FIXME(aboxhall): re-work tests to be more comprehensible and comprehensive.
&gt; 
&gt; We don&apos;t generally name FIXME&apos;s in WebKit.  Also, all comments in webkit should be sentences, beginning with a capital and ending with period.

Whoops. Sorry. I&apos;m so used to both syntaxes my eyes just glossed over these.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408632</commentid>
    <comment_count>24</comment_count>
      <attachid>94560</attachid>
    <who name="Alice Boxhall">aboxhall</who>
    <bug_when>2011-05-23 21:45:06 -0700</bug_when>
    <thetext>Created attachment 94560
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408633</commentid>
    <comment_count>25</comment_count>
      <attachid>94374</attachid>
    <who name="Alice Boxhall">aboxhall</who>
    <bug_when>2011-05-23 21:45:58 -0700</bug_when>
    <thetext>Comment on attachment 94374
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:80
&gt;&gt; +    &quot;&quot;&quot;
&gt; 
&gt; These doc strings are mostly useless.  An overly verbose side-effect of Google-style python.

Happy to change or remove; could you be more specific at all?

&gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:86
&gt;&gt;&gt; +            fullname = name
&gt;&gt; 
&gt;&gt; I would have written this as a ternary since we use Python 2.5+
&gt; 
&gt; Meh. Personally I think python ternaries are less readable than an if/else.

I&apos;m leaving this as-is unless there are particularly strong feelings about it. I&apos;ve never used a Python ternary as I&apos;ve only written Python in earnest at Google; I just looked at the syntax and it seems confusing to me.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:88
&gt;&gt; +        if not isinstance(data, dict) or not len(data) or &quot;results&quot; in data:
&gt; 
&gt; Why is this necessary?

It&apos;s the base case for the recursion: a dict containing &quot;results&quot; indicates that we have reached a leaf node. Simply using
if &quot;results&quot; in data:
does the job for all well-formed results; the rest is me being overly cautious.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:91
&gt;&gt; +            result.update(convert_trie_to_flat_paths(data, fullname))
&gt; 
&gt; Seems these calls could have been a .update() in both cases, with a:
&gt; 
&gt; if data_is_not_what_we_want:
&gt;    data = convert_tree_to_flat_paths(data, fullname)
&gt; 
&gt; before if necessary.

I don&apos;t follow, sorry.
The base case is, we have reached the leaf node, so add the payload to the dict of full path to test data.
The recursive call is, traverse the part of the tree below this node and merge the results of that traversal in with the existing results.
I&apos;m not sure what I would be passing to the update() call in the base case.

&gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:562
&gt;&gt;&gt; +        thisTest = tests
&gt;&gt; 
&gt;&gt; This is not python style.
&gt; 
&gt; Whoops. Sorry. I&apos;m so used to both syntaxes my eyes just glossed over these.

I&apos;m not clear on what I need to change here.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:593
&gt;&gt; +        if archive_version == 3:
&gt; 
&gt; I would have broken this whole block off into a new helper function with a nice name telling what it does. :)

I pulled out the part in the loop.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:177
&gt;&gt; +        sub_trie = trie
&gt; 
&gt; Huh?  Why not just name the incoming argument as sub_trie?

FUD on my part about the way python passes arguments. I don&apos;t feel comfortable assigning to arguments (sub_trie is modified on line 181).

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:208
&gt;&gt; +        # FIXME(aboxhall): re-work tests to be more comprehensible and comprehensive.
&gt; 
&gt; We don&apos;t generally name FIXME&apos;s in WebKit.  Also, all comments in webkit should be sentences, beginning with a capital and ending with period.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408640</commentid>
    <comment_count>26</comment_count>
      <attachid>94374</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-23 22:03:41 -0700</bug_when>
    <thetext>Comment on attachment 94374
Patch

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

&gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:80
&gt;&gt;&gt; +    &quot;&quot;&quot;
&gt;&gt; 
&gt;&gt; These doc strings are mostly useless.  An overly verbose side-effect of Google-style python.
&gt; 
&gt; Happy to change or remove; could you be more specific at all?

Generally we try to write methods which self-describe instead of writing desciptions for methods.  Commetns definitely have their place, but they&apos;re more useful for describing &quot;why&quot; rather than &quot;what&quot;.  In this case, the docstring basically says the same thing 3 times over 9 lines. :)

You could probably just write:
&quot;&quot;&quot;Converts a directory trie into a list of absolute paths, appending &quot;prefix&quot; to the start of each.&quot;&quot;&quot; or similar to convey all 9 lines in one.

Or rename the method as:
absolute_paths_from_directory_trie(trie, path_root)
or similar, again trying to make the entire thing self-documetning.

Another way to look at it is that if the code of the method is short and clear enough then you don&apos;t need any documentation at all, since its just as easy to read the short method as it would be to read (likely out of date!) comments describing what the method does.

&gt;&gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:86
&gt;&gt;&gt;&gt; +            fullname = name
&gt;&gt;&gt; 
&gt;&gt;&gt; I would have written this as a ternary since we use Python 2.5+
&gt;&gt; 
&gt;&gt; Meh. Personally I think python ternaries are less readable than an if/else.
&gt; 
&gt; I&apos;m leaving this as-is unless there are particularly strong feelings about it. I&apos;ve never used a Python ternary as I&apos;ve only written Python in earnest at Google; I just looked at the syntax and it seems confusing to me.

Actually, i won&apos;t even bother with a ternary.  It looks like you just want:

if prefix:
   name = prefix + &quot;/&quot; + name

&gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:88
&gt;&gt;&gt; +        if not isinstance(data, dict) or not len(data) or &quot;results&quot; in data:
&gt;&gt; 
&gt;&gt; Why is this necessary?
&gt; 
&gt; It&apos;s the base case for the recursion: a dict containing &quot;results&quot; indicates that we have reached a leaf node. Simply using
&gt; if &quot;results&quot; in data:
&gt; does the job for all well-formed results; the rest is me being overly cautious.

I prefer clarity/brevity over caution here.  The later is long-winded.  Besides, there are also many a fevered python programmer who might explain to you the evils of &quot;isinstance&quot; (i&apos;m not one of them, but I generally try to avoid isinstance when possible).

&gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:91
&gt;&gt;&gt; +            result.update(convert_trie_to_flat_paths(data, fullname))
&gt;&gt; 
&gt;&gt; Seems these calls could have been a .update() in both cases, with a:
&gt;&gt; 
&gt;&gt; if data_is_not_what_we_want:
&gt;&gt;    data = convert_tree_to_flat_paths(data, fullname)
&gt;&gt; 
&gt;&gt; before if necessary.
&gt; 
&gt; I don&apos;t follow, sorry.
&gt; The base case is, we have reached the leaf node, so add the payload to the dict of full path to test data.
&gt; The recursive call is, traverse the part of the tree below this node and merge the results of that traversal in with the existing results.
&gt; I&apos;m not sure what I would be passing to the update() call in the base case.

I see. I think I didn&apos;t understand what you were trying to do.  I would reverse the if, then I think it&apos;s more clear.

if &quot;results&quot; in data:
  // recurse
else:
   data[fullname] = data

&gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:134
&gt;&gt;&gt; +        add_path_to_trie(test, int(1000 * test_result.test_run_time), trie)
&gt;&gt; 
&gt;&gt; I wish our time variables would have their unit type in their name.  ms or second or whatever would make these types of multiplctaion much easier to read.
&gt; 
&gt; Agreed. Doesn&apos;t need to block this patch though, right?

Yes, the comment had nothing to do with teh patch, just moaing about poor historical naming here.

&gt;&gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:562
&gt;&gt;&gt;&gt; +        thisTest = tests
&gt;&gt;&gt; 
&gt;&gt;&gt; This is not python style.
&gt;&gt; 
&gt;&gt; Whoops. Sorry. I&apos;m so used to both syntaxes my eyes just glossed over these.
&gt; 
&gt; I&apos;m not clear on what I need to change here.

foo_bar, not fooBar for python in WebKit.  (We try to follow pep8.)

&gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:177
&gt;&gt;&gt; +        sub_trie = trie
&gt;&gt; 
&gt;&gt; Huh?  Why not just name the incoming argument as sub_trie?
&gt; 
&gt; FUD on my part about the way python passes arguments. I don&apos;t feel comfortable assigning to arguments (sub_trie is modified on line 181).

My understanding is that python is like javascript and does not deep-copy objects when passed.  Your sub_trie = tree also doesn&apos;t deep copy. :) so you&apos;re just modifying trie all the same!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408678</commentid>
    <comment_count>27</comment_count>
      <attachid>94571</attachid>
    <who name="Alice Boxhall">aboxhall</who>
    <bug_when>2011-05-23 23:29:32 -0700</bug_when>
    <thetext>Created attachment 94571
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408679</commentid>
    <comment_count>28</comment_count>
      <attachid>94374</attachid>
    <who name="Alice Boxhall">aboxhall</who>
    <bug_when>2011-05-23 23:30:26 -0700</bug_when>
    <thetext>Comment on attachment 94374
Patch

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

&gt;&gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:80
&gt;&gt;&gt;&gt; +    &quot;&quot;&quot;
&gt;&gt;&gt; 
&gt;&gt;&gt; These doc strings are mostly useless.  An overly verbose side-effect of Google-style python.
&gt;&gt; 
&gt;&gt; Happy to change or remove; could you be more specific at all?
&gt; 
&gt; Generally we try to write methods which self-describe instead of writing desciptions for methods.  Commetns definitely have their place, but they&apos;re more useful for describing &quot;why&quot; rather than &quot;what&quot;.  In this case, the docstring basically says the same thing 3 times over 9 lines. :)
&gt; 
&gt; You could probably just write:
&gt; &quot;&quot;&quot;Converts a directory trie into a list of absolute paths, appending &quot;prefix&quot; to the start of each.&quot;&quot;&quot; or similar to convey all 9 lines in one.
&gt; 
&gt; Or rename the method as:
&gt; absolute_paths_from_directory_trie(trie, path_root)
&gt; or similar, again trying to make the entire thing self-documetning.
&gt; 
&gt; Another way to look at it is that if the code of the method is short and clear enough then you don&apos;t need any documentation at all, since its just as easy to read the short method as it would be to read (likely out of date!) comments describing what the method does.

Converted to one-line documentation (and below).

&gt;&gt;&gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:86
&gt;&gt;&gt;&gt;&gt; +            fullname = name
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; I would have written this as a ternary since we use Python 2.5+
&gt;&gt;&gt; 
&gt;&gt;&gt; Meh. Personally I think python ternaries are less readable than an if/else.
&gt;&gt; 
&gt;&gt; I&apos;m leaving this as-is unless there are particularly strong feelings about it. I&apos;ve never used a Python ternary as I&apos;ve only written Python in earnest at Google; I just looked at the syntax and it seems confusing to me.
&gt; 
&gt; Actually, i won&apos;t even bother with a ternary.  It looks like you just want:
&gt; 
&gt; if prefix:
&gt;    name = prefix + &quot;/&quot; + name

Done, despite my discomfort with assigning to arguments!

&gt;&gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:88
&gt;&gt;&gt;&gt; +        if not isinstance(data, dict) or not len(data) or &quot;results&quot; in data:
&gt;&gt;&gt; 
&gt;&gt;&gt; Why is this necessary?
&gt;&gt; 
&gt;&gt; It&apos;s the base case for the recursion: a dict containing &quot;results&quot; indicates that we have reached a leaf node. Simply using
&gt;&gt; if &quot;results&quot; in data:
&gt;&gt; does the job for all well-formed results; the rest is me being overly cautious.
&gt; 
&gt; I prefer clarity/brevity over caution here.  The later is long-winded.  Besides, there are also many a fevered python programmer who might explain to you the evils of &quot;isinstance&quot; (i&apos;m not one of them, but I generally try to avoid isinstance when possible).

Done.

&gt;&gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:91
&gt;&gt;&gt;&gt; +            result.update(convert_trie_to_flat_paths(data, fullname))
&gt;&gt;&gt; 
&gt;&gt;&gt; Seems these calls could have been a .update() in both cases, with a:
&gt;&gt;&gt; 
&gt;&gt;&gt; if data_is_not_what_we_want:
&gt;&gt;&gt;    data = convert_tree_to_flat_paths(data, fullname)
&gt;&gt;&gt; 
&gt;&gt;&gt; before if necessary.
&gt;&gt; 
&gt;&gt; I don&apos;t follow, sorry.
&gt;&gt; The base case is, we have reached the leaf node, so add the payload to the dict of full path to test data.
&gt;&gt; The recursive call is, traverse the part of the tree below this node and merge the results of that traversal in with the existing results.
&gt;&gt; I&apos;m not sure what I would be passing to the update() call in the base case.
&gt; 
&gt; I see. I think I didn&apos;t understand what you were trying to do.  I would reverse the if, then I think it&apos;s more clear.
&gt; 
&gt; if &quot;results&quot; in data:
&gt;   // recurse
&gt; else:
&gt;    data[fullname] = data

That makes sense; done.

&gt;&gt;&gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:562
&gt;&gt;&gt;&gt;&gt; +        thisTest = tests
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; This is not python style.
&gt;&gt;&gt; 
&gt;&gt;&gt; Whoops. Sorry. I&apos;m so used to both syntaxes my eyes just glossed over these.
&gt;&gt; 
&gt;&gt; I&apos;m not clear on what I need to change here.
&gt; 
&gt; foo_bar, not fooBar for python in WebKit.  (We try to follow pep8.)

Ah, yes. Fixed.

&gt;&gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:177
&gt;&gt;&gt;&gt; +        sub_trie = trie
&gt;&gt;&gt; 
&gt;&gt;&gt; Huh?  Why not just name the incoming argument as sub_trie?
&gt;&gt; 
&gt;&gt; FUD on my part about the way python passes arguments. I don&apos;t feel comfortable assigning to arguments (sub_trie is modified on line 181).
&gt; 
&gt; My understanding is that python is like javascript and does not deep-copy objects when passed.  Your sub_trie = tree also doesn&apos;t deep copy. :) so you&apos;re just modifying trie all the same!

Right, but the thing I can&apos;t cope with is having an argument which refers to a thing which was passed in, then changing what that argument refers to -- without changing the original object. I think it makes the code confusing to read.

In this case, I have a trie (more correctly, a reference to the top node of the trie) that I want to find something in, which I do by iteratively going down the trie, keeping a reference to the sub_trie I&apos;m up to -- so the code reflects that. If I had code that took a sub_trie argument (which was really the top node of a trie, not a sub_trie at all), repeatedly assigned something else to that name and then returned something with the same name as the original argument, I think it would be very hard to work out what that did.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409026</commentid>
    <comment_count>29</comment_count>
      <attachid>94374</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-05-24 11:22:17 -0700</bug_when>
    <thetext>Comment on attachment 94374
Patch

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

&gt;&gt;&gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:177
&gt;&gt;&gt;&gt;&gt; +        sub_trie = trie
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; Huh?  Why not just name the incoming argument as sub_trie?
&gt;&gt;&gt; 
&gt;&gt;&gt; FUD on my part about the way python passes arguments. I don&apos;t feel comfortable assigning to arguments (sub_trie is modified on line 181).
&gt;&gt; 
&gt;&gt; My understanding is that python is like javascript and does not deep-copy objects when passed.  Your sub_trie = tree also doesn&apos;t deep copy. :) so you&apos;re just modifying trie all the same!
&gt; 
&gt; Right, but the thing I can&apos;t cope with is having an argument which refers to a thing which was passed in, then changing what that argument refers to -- without changing the original object. I think it makes the code confusing to read.
&gt; 
&gt; In this case, I have a trie (more correctly, a reference to the top node of the trie) that I want to find something in, which I do by iteratively going down the trie, keeping a reference to the sub_trie I&apos;m up to -- so the code reflects that. If I had code that took a sub_trie argument (which was really the top node of a trie, not a sub_trie at all), repeatedly assigned something else to that name and then returned something with the same name as the original argument, I think it would be very hard to work out what that did.

Meh. In my experience of python and javascript, it&apos;s common to assign to an argument. If I were writing this, I&apos;d keep the variable named &quot;trie&quot; and just assign to it. It makes the code more terse and is just as readable IMO. I don&apos;t think it&apos;s worth blocking getting this checked in, but it would be better if you could change it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409314</commentid>
    <comment_count>30</comment_count>
      <attachid>94717</attachid>
    <who name="Alice Boxhall">aboxhall</who>
    <bug_when>2011-05-24 16:59:41 -0700</bug_when>
    <thetext>Created attachment 94717
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409315</commentid>
    <comment_count>31</comment_count>
      <attachid>94374</attachid>
    <who name="Alice Boxhall">aboxhall</who>
    <bug_when>2011-05-24 17:00:17 -0700</bug_when>
    <thetext>Comment on attachment 94374
Patch

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

&gt;&gt;&gt;&gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator_unittest.py:177
&gt;&gt;&gt;&gt;&gt;&gt; +        sub_trie = trie
&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt; Huh?  Why not just name the incoming argument as sub_trie?
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; FUD on my part about the way python passes arguments. I don&apos;t feel comfortable assigning to arguments (sub_trie is modified on line 181).
&gt;&gt;&gt; 
&gt;&gt;&gt; My understanding is that python is like javascript and does not deep-copy objects when passed.  Your sub_trie = tree also doesn&apos;t deep copy. :) so you&apos;re just modifying trie all the same!
&gt;&gt; 
&gt;&gt; Right, but the thing I can&apos;t cope with is having an argument which refers to a thing which was passed in, then changing what that argument refers to -- without changing the original object. I think it makes the code confusing to read.
&gt;&gt; 
&gt;&gt; In this case, I have a trie (more correctly, a reference to the top node of the trie) that I want to find something in, which I do by iteratively going down the trie, keeping a reference to the sub_trie I&apos;m up to -- so the code reflects that. If I had code that took a sub_trie argument (which was really the top node of a trie, not a sub_trie at all), repeatedly assigned something else to that name and then returned something with the same name as the original argument, I think it would be very hard to work out what that did.
&gt; 
&gt; Meh. In my experience of python and javascript, it&apos;s common to assign to an argument. If I were writing this, I&apos;d keep the variable named &quot;trie&quot; and just assign to it. It makes the code more terse and is just as readable IMO. I don&apos;t think it&apos;s worth blocking getting this checked in, but it would be better if you could change it.

I honestly believe that it would be confusing to scan through this code without having seen it before and see that what appears to be the original argument is returned, given the whole point is to search through the trie structure and return a part of it. To me that looks more like I am modifying a part of the trie and then returning it in order to enable some kind of chaining. I have moved the initial assignment below the expansion of the path; hopefully that will emphasise what the code is actually doing a bit more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409743</commentid>
    <comment_count>32</comment_count>
      <attachid>94717</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-05-25 10:33:34 -0700</bug_when>
    <thetext>Comment on attachment 94717
Patch

Still don&apos;t agree (e.g. we do this in many other places in the webkit python/javascript code), but this is such a minor point it&apos;s not worth blocking things on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423187</commentid>
    <comment_count>33</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-18 12:44:28 -0700</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 94717:

inspector/syntax-highlight-css.html bug 50863 (authors: keishi@webkit.org, pfeldman@chromium.org, and yurys@chromium.org)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423189</commentid>
    <comment_count>34</comment_count>
      <attachid>94717</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-18 12:45:55 -0700</bug_when>
    <thetext>Comment on attachment 94717
Patch

Clearing flags on attachment: 94717

Committed r89198: &lt;http://trac.webkit.org/changeset/89198&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423190</commentid>
    <comment_count>35</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-18 12:46:02 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423432</commentid>
    <comment_count>36</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-06-19 20:04:46 -0700</bug_when>
    <thetext>Sorry, I had to revert this in http://trac.webkit.org/changeset/89218, since it was giving the WebKit canary Tests bots indigestion, e.g.,

http://build.chromium.org/p/chromium.webkit/builders/Linux%20Tests/builds/11135</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423436</commentid>
    <comment_count>37</comment_count>
    <who name="Alice Boxhall">aboxhall</who>
    <bug_when>2011-06-19 20:06:09 -0700</bug_when>
    <thetext>No worries! I&apos;m looking into the issue now; the problem is pretty obvious from the error message, I just need to figure out how to fix and test it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423485</commentid>
    <comment_count>38</comment_count>
      <attachid>97749</attachid>
    <who name="Alice Boxhall">aboxhall</who>
    <bug_when>2011-06-19 22:43:22 -0700</bug_when>
    <thetext>Created attachment 97749
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423489</commentid>
    <comment_count>39</comment_count>
    <who name="Alice Boxhall">aboxhall</who>
    <bug_when>2011-06-19 22:46:02 -0700</bug_when>
    <thetext>As it happens, it turned out the call to _get_path_relative_to_layout_test_root was unnecessary (it was previously necessary to convert the JSON from version 2 to 3), so I removed it. Tested by running new-run-webkit-tests and uploading test results to test-results-test.

I don&apos;t know how to test for the Chromium build, though; it would be nice to avoid breaking it again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423671</commentid>
    <comment_count>40</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-06-20 08:05:33 -0700</bug_when>
    <thetext>(In reply to comment #39)
&gt; As it happens, it turned out the call to _get_path_relative_to_layout_test_root was unnecessary (it was previously necessary to convert the JSON from version 2 to 3), so I removed it. Tested by running new-run-webkit-tests and uploading test results to test-results-test.
&gt; 
&gt; I don&apos;t know how to test for the Chromium build, though; it would be nice to avoid breaking it again.

If you have chromium commit access, you should be able to use the chromium try servers, even though it&apos;s a WebKit change.  In a chromium checkout:

gcl try --sub_rep third_party/WebKit/

(You may have to create a fake chromium CL with &quot;gcl change&quot; to satisfy the try command).  The results should be in the first three columns on this page:  http://build.chromium.org/p/tryserver.chromium/waterfall (and they&apos;ll be emailed to you too).

On the other hand, it could be that the try servers don&apos;t invoke the upload step you&apos;re trying to change, since they don&apos;t put their results on the flakiness dashboard.  Ojan would know the answer to that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423693</commentid>
    <comment_count>41</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-06-20 09:03:31 -0700</bug_when>
    <thetext>At a quick glance, only the &quot;layout&quot; try servers generate the JSON.

There&apos;s no simple way to test the Chromium bots. You would need to start a local buildbot and have it run the tests. http://dev.chromium.org/developers/testing/chromium-build-infrastructure/getting-the-buildbot-source and the links from that page should help you do it. Unless you&apos;re interested in doing other work on the buildbots, or just curious how to run one, I wouldn&apos;t bother with all this.

If I were you, I would just cq+ it at a time when you know you&apos;ll be around to watch the Chromium canaries to see that they don&apos;t turn red. The commit-queue is fast now, so it shouldn&apos;t take more than 20 minutes to get the commit in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428607</commentid>
    <comment_count>42</comment_count>
      <attachid>97749</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-27 21:20:01 -0700</bug_when>
    <thetext>Comment on attachment 97749
Patch

Clearing flags on attachment: 97749

Committed r89888: &lt;http://trac.webkit.org/changeset/89888&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428608</commentid>
    <comment_count>43</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-27 21:20:08 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>432636</commentid>
    <comment_count>44</comment_count>
      <attachid>99794</attachid>
    <who name="Alice Boxhall">aboxhall</who>
    <bug_when>2011-07-05 23:19:01 -0700</bug_when>
    <thetext>Created attachment 99794
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>432639</commentid>
    <comment_count>45</comment_count>
      <attachid>99794</attachid>
    <who name="Alice Boxhall">aboxhall</who>
    <bug_when>2011-07-05 23:24:38 -0700</bug_when>
    <thetext>Comment on attachment 99794
Patch

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

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:78
&gt; +        if len(data) and not &quot;results&quot; in data:

This ended up being the crucial problem: the archived results have {} as test results for passing tests, so this code was silently removing them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>432650</commentid>
    <comment_count>46</comment_count>
      <attachid>99794</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-07-05 23:56:37 -0700</bug_when>
    <thetext>Comment on attachment 99794
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:78
&gt;&gt; +        if len(data) and not &quot;results&quot; in data:
&gt; 
&gt; This ended up being the crucial problem: the archived results have {} as test results for passing tests, so this code was silently removing them.

Just for thoroughness sake, can you add a test that captures this case?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>432653</commentid>
    <comment_count>47</comment_count>
    <who name="Alice Boxhall">aboxhall</who>
    <bug_when>2011-07-05 23:59:00 -0700</bug_when>
    <thetext>(In reply to comment #46)
&gt; (From update of attachment 99794 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=99794&amp;action=review
&gt; 
&gt; &gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/json_results_generator.py:78
&gt; &gt;&gt; +        if len(data) and not &quot;results&quot; in data:
&gt; &gt; 
&gt; &gt; This ended up being the crucial problem: the archived results have {} as test results for passing tests, so this code was silently removing them.
&gt; 
&gt; Just for thoroughness sake, can you add a test that captures this case?

In theory, yes... in practice, the unit test still breaks my brain. I&apos;ll have a look at it tomorrow, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433783</commentid>
    <comment_count>48</comment_count>
      <attachid>99794</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-07-07 16:44:39 -0700</bug_when>
    <thetext>Comment on attachment 99794
Patch

Kinuko is about to fork some of this code over into the chromium tree, so I&apos;d rather get this landed ASAP to avoid wasting everyone&apos;s time. I&apos;ll r+/cq+ for now. You already have a FIXME for improving the tests for this code. I&apos;m fine putting off this specific test until you&apos;re able to do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433790</commentid>
    <comment_count>49</comment_count>
    <who name="Alice Boxhall">aboxhall</who>
    <bug_when>2011-07-07 16:49:16 -0700</bug_when>
    <thetext>(In reply to comment #48)
&gt; (From update of attachment 99794 [details])
&gt; Kinuko is about to fork some of this code over into the chromium tree, so I&apos;d rather get this landed ASAP to avoid wasting everyone&apos;s time. I&apos;ll r+/cq+ for now. You already have a FIXME for improving the tests for this code. I&apos;m fine putting off this specific test until you&apos;re able to do that.

Ok. I finally realised, also, that this actually requires a new test specifically for json_layout_result_generator.py, as the behaviour is subtly different. That should make it slightly easier to create the test; I&apos;ll create a separate bug for that once it&apos;s done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434714</commentid>
    <comment_count>50</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2011-07-11 02:06:15 -0700</bug_when>
    <thetext>(In reply to comment #49)
&gt; (In reply to comment #48)
&gt; &gt; (From update of attachment 99794 [details] [details])
&gt; &gt; Kinuko is about to fork some of this code over into the chromium tree, so I&apos;d rather get this landed ASAP to avoid wasting everyone&apos;s time. I&apos;ll r+/cq+ for now. You already have a FIXME for improving the tests for this code. I&apos;m fine putting off this specific test until you&apos;re able to do that.
&gt; 
&gt; Ok. I finally realised, also, that this actually requires a new test specifically for json_layout_result_generator.py, as the behaviour is subtly different. That should make it slightly easier to create the test; I&apos;ll create a separate bug for that once it&apos;s done.

Ok I found this has not been submitted :)
I&apos;m getting ready to upload my side of change in slave buildbot (it had been relying on this code) and have a question: should I fork the JSON generation part from this patch or it is not ready to be forked yet?

The code I&apos;ll need to fork is only json_results_generator.py (and _unittest).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435239</commentid>
    <comment_count>51</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2011-07-11 15:39:54 -0700</bug_when>
    <thetext>Reopening the bug so it will actually put the patch in the commit-queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435247</commentid>
    <comment_count>52</comment_count>
      <attachid>99794</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-11 15:48:27 -0700</bug_when>
    <thetext>Comment on attachment 99794
Patch

Clearing flags on attachment: 99794

Committed r90789: &lt;http://trac.webkit.org/changeset/90789&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435248</commentid>
    <comment_count>53</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-11 15:48:35 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93603</attachid>
            <date>2011-05-15 21:59:44 -0700</date>
            <delta_ts>2011-05-18 18:40:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60869-20110516145941.patch</filename>
            <type>text/plain</type>
            <size>11396</size>
            <attacher name="Alice Boxhall">aboxhall</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODY1MTUKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCAzYjE1YTJjYWE2YmFhOWZlYTRhNTVmMmYyODk2YjNhZDVl
OGU3YzVhLi5iMjY2ZWE3MGE5MWMwZTQ3NTM1NmU5MjI0Zjc0ZTBhZDkzYjhlODkyIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMTEtMDUtMTUgIEFsaWNlIEJveGhhbGwgIDxhYm94aGFsbEBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ29udmVydCBq
c29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5IHRvIG91dHB1dCB2ZXJzaW9uIDQgSlNPTi4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwODY5CisKKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xh
eW91dF9yZXN1bHRzX2dlbmVyYXRvci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5OgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25f
cmVzdWx0c19nZW5lcmF0b3JfdW5pdHRlc3QucHk6CisKIDIwMTEtMDUtMTUgIERhbmllbCBCYXRl
cyAgPGRiYXRlc0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IENocmlzIEplcmRv
bmVrLgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5
b3V0X3BhY2thZ2UvanNvbl9sYXlvdXRfcmVzdWx0c19nZW5lcmF0b3IucHkgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xheW91dF9yZXN1
bHRzX2dlbmVyYXRvci5weQppbmRleCBkYmIxNmMwM2UyNjMzMzUwOTQxMjBlY2VhZThjNzA2N2Q4
ZDc4MGYxLi5lYzI4MTY4ZjY2NjIwMGFiYWViNTU4ZDg4OTYyMzE3MjU5YjY4ZTA4IDEwMDY0NAot
LS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9q
c29uX2xheW91dF9yZXN1bHRzX2dlbmVyYXRvci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xheW91dF9yZXN1bHRzX2dlbmVy
YXRvci5weQpAQCAtMTMwLDMwICsxMzAsNiBAQCBjbGFzcyBKU09OTGF5b3V0UmVzdWx0c0dlbmVy
YXRvcihqc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLkpTT05SZXN1bHRzR2VuZXJhdG9yQmFzZQogICAg
ICAgICByZXR1cm4gc2VsZi5fZ2V0X21vZGlmaWVyX2NoYXIodGVzdF9uYW1lKQogCiAgICAgIyBv
dmVycmlkZQotICAgIGRlZiBfY29udmVydF9qc29uX3RvX2N1cnJlbnRfdmVyc2lvbihzZWxmLCBy
ZXN1bHRzX2pzb24pOgotICAgICAgICBhcmNoaXZlX3ZlcnNpb24gPSBOb25lCi0gICAgICAgIGlm
IHNlbGYuVkVSU0lPTl9LRVkgaW4gcmVzdWx0c19qc29uOgotICAgICAgICAgICAgYXJjaGl2ZV92
ZXJzaW9uID0gcmVzdWx0c19qc29uW3NlbGYuVkVSU0lPTl9LRVldCi0KLSAgICAgICAgc3VwZXIo
SlNPTkxheW91dFJlc3VsdHNHZW5lcmF0b3IsCi0gICAgICAgICAgICAgIHNlbGYpLl9jb252ZXJ0
X2pzb25fdG9fY3VycmVudF92ZXJzaW9uKHJlc3VsdHNfanNvbikKLQotICAgICAgICAjIHZlcnNp
b24gMi0+MwotICAgICAgICBpZiBhcmNoaXZlX3ZlcnNpb24gPT0gMjoKLSAgICAgICAgICAgIGZv
ciByZXN1bHRzX2Zvcl9idWlsZGVyIGluIHJlc3VsdHNfanNvbi5pdGVydmFsdWVzKCk6Ci0gICAg
ICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICB0ZXN0X3Jlc3VsdHMgPSByZXN1
bHRzX2Zvcl9idWlsZGVyW3NlbGYuVEVTVFNdCi0gICAgICAgICAgICAgICAgZXhjZXB0OgotICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZQotCi0gICAgICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0
X3Jlc3VsdHM6Ci0gICAgICAgICAgICAgICAgIyBNYWtlIHN1cmUgYWxsIHBhdGhzIGFyZSByZWxh
dGl2ZQotICAgICAgICAgICAgICAgIHRlc3RfcGF0aCA9IHNlbGYuX2dldF9wYXRoX3JlbGF0aXZl
X3RvX2xheW91dF90ZXN0X3Jvb3QodGVzdCkKLSAgICAgICAgICAgICAgICBpZiB0ZXN0X3BhdGgg
IT0gdGVzdDoKLSAgICAgICAgICAgICAgICAgICAgdGVzdF9yZXN1bHRzW3Rlc3RfcGF0aF0gPSB0
ZXN0X3Jlc3VsdHNbdGVzdF0KLSAgICAgICAgICAgICAgICAgICAgZGVsIHRlc3RfcmVzdWx0c1t0
ZXN0XQotCi0gICAgIyBvdmVycmlkZQogICAgIGRlZiBfaW5zZXJ0X2ZhaWx1cmVfc3VtbWFyaWVz
KHNlbGYsIHJlc3VsdHNfZm9yX2J1aWxkZXIpOgogICAgICAgICBzdW1tYXJ5ID0gc2VsZi5fcmVz
dWx0X3N1bW1hcnkKIApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5weSBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fcmVzdWx0c19n
ZW5lcmF0b3IucHkKaW5kZXggODJkMjFlNjJmNjRjZjdjMTQ5ZTZjMDEzOTg3ODA1MzlmMTNmMzAy
Yi4uZDhmMjc4NDlhZjM2NWY0Y2UzZDhlNjBiZmM1ODlhMDUyNmE2ZjRkZSAxMDA2NDQKLS0tIGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9y
ZXN1bHRzX2dlbmVyYXRvci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CkBAIC02Nyw2ICs2
Nyw0OSBAQCBkZWYgd3JpdGVfanNvbihmaWxlc3lzdGVtLCBqc29uX29iamVjdCwgZmlsZV9wYXRo
KToKICAgICBqc29uX3N0cmluZyA9IF9KU09OX1BSRUZJWCArIGpzb25fZGF0YSArIF9KU09OX1NV
RkZJWAogICAgIGZpbGVzeXN0ZW0ud3JpdGVfdGV4dF9maWxlKGZpbGVfcGF0aCwganNvbl9zdHJp
bmcpCiAKKworZGVmIGNvbnZlcnRfdHJpZV90b19mbGF0X3BhdGhzKHRyaWUsIHByZWZpeD1Ob25l
KToKKyAgICAgICAgIiIiRmxhdHRlbnMgYSB0cmllIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgaW50byBh
IGZsYXQgc3RydWN0dXJlLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICB0cmllOiB0cmll
IHN0cnVjdHVyZS4KKyAgICAgICAgICAgIHByZWZpeDogYWxlYWR5LWNvbXB1dGVkIHBhdGggdG8g
cHJlcGVuZCB0byB0aGUgZXZlbnR1YWwgcGF0aCwgaWYgYW55LgorCisgICAgICAgIFJldHVybnM6
CisgICAgICAgICAgICBUaGUgZmxhdHRlbmVkIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuCisgICAgICAg
ICIiIgorICAgICAgICByZXN1bHQgPSB7fQorICAgICAgICBmb3IgbmFtZSwgZGF0YSBpbiB0cmll
Lml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgcHJlZml4OgorICAgICAgICAgICAgICAgIGZ1
bGxuYW1lID0gcHJlZml4ICsgIi8iICsgbmFtZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgICAgICBmdWxsbmFtZSA9IG5hbWUKKworICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uo
ZGF0YSwgZGljdCkgb3IgbGVuKGRhdGEpID09IDAgb3IgInJlc3VsdHMiIGluIGRhdGE6CisgICAg
ICAgICAgICAgICAgcmVzdWx0W2Z1bGxuYW1lXSA9IGRhdGEKKyAgICAgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICAgICAgcmVzdWx0LnVwZGF0ZShjb252ZXJ0X3RyaWVfdG9fZmxhdF9wYXRocyhk
YXRhLCBmdWxsbmFtZSkpCisKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisKK2RlZiBjb252ZXJ0
X2ZsYXRfcGF0aF90b190cmllKHBhdGgsIHZhbHVlLCB0cmllKToKKyAgICAiIiJJbnNlcnRzIGEg
c2luZ2xlIGZsYXQgcGF0aCBrZXkgYW5kIHZhbHVlIGludG8gYSB0cmllIHN0cnVjdHVyZS4KKwor
ICAgIEFyZ3M6CisgICAgICAgIHBhdGg6IHRoZSBwYXRoIHRvIHBhcnNlLgorICAgICAgICB2YWx1
ZTogdGhlIGRhdGEgdmFsdWUgdG8gaW5zZXJ0IGludG8gdGhlIHRyaWUuCisgICAgICAgIHRyaWU6
IHRoZSB0cmllIGludG8gd2hpY2ggdG8gaW5zZXJ0IHRoZSBwYXRoIGFuZCB2YWx1ZS4KKyAgICAi
IiIKKyAgICBpZiBub3QgIi8iIGluIHBhdGg6CisgICAgICAgIHRyaWVbcGF0aF0gPSB2YWx1ZQor
ICAgICAgICByZXR1cm4KKworICAgIGRpcmVjdG9yeSwgXywgcmVzdCA9IHBhdGgucGFydGl0aW9u
KCIvIikKKyAgICBpZiBub3QgZGlyZWN0b3J5IGluIHRyaWU6CisgICAgICAgIHRyaWVbZGlyZWN0
b3J5XSA9IHt9CisgICAgY29udmVydF9mbGF0X3BhdGhfdG9fdHJpZShyZXN0LCB2YWx1ZSwgdHJp
ZVtkaXJlY3RvcnldKQorCiBkZWYgdGVzdF90aW1pbmdzX3RyaWUocG9ydCwgaW5kaXZpZHVhbF90
ZXN0X3RpbWluZ3MpOgogICAgICIiIkJyZWFrcyBhIGZpbGVuYW1lIGludG8gY2h1bmtzIGJ5IGRp
cmVjdG9yeSBhbmQgcHV0cyB0aGUgdGVzdCB0aW1lIGFzIGEgdmFsdWUgaW4gdGhlIGxvd2VzdCBw
YXJ0LCBlLmcuCiAgICAgZm9vL2Jhci9iYXouaHRtbDogMW1zCkBAIC04OCwxNiArMTMxLDggQEAg
ZGVmIHRlc3RfdGltaW5nc190cmllKHBvcnQsIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzKToKICAg
ICAgICAgICAgICMgRklYTUU6IEhhbmRsZSB0aGlzIGJldHRlci4gTm9uLWxheW91dCB0ZXN0cyBz
aG91bGRuJ3QgYmUgcmVsYXRpdml6ZWQuCiAgICAgICAgICAgICB0ZXN0ID0gdGVzdF9yZXN1bHQu
ZmlsZW5hbWUKIAotICAgICAgICBwYXJ0cyA9IHRlc3Quc3BsaXQoJy8nKQotICAgICAgICBjdXJy
ZW50X21hcCA9IHRyaWUKLSAgICAgICAgZm9yIGksIHBhcnQgaW4gZW51bWVyYXRlKHBhcnRzKToK
LSAgICAgICAgICAgIGlmIGkgPT0gKGxlbihwYXJ0cykgLSAxKToKLSAgICAgICAgICAgICAgICBj
dXJyZW50X21hcFtwYXJ0XSA9IGludCgxMDAwICogdGVzdF9yZXN1bHQudGVzdF9ydW5fdGltZSkK
LSAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBjb252ZXJ0X2ZsYXRfcGF0aF90b190cmll
KHRlc3QsIGludCgxMDAwICogdGVzdF9yZXN1bHQudGVzdF9ydW5fdGltZSksIHRyaWUpCiAKLSAg
ICAgICAgICAgIGlmIHBhcnQgbm90IGluIGN1cnJlbnRfbWFwOgotICAgICAgICAgICAgICAgIGN1
cnJlbnRfbWFwW3BhcnRdID0ge30KLSAgICAgICAgICAgIGN1cnJlbnRfbWFwID0gY3VycmVudF9t
YXBbcGFydF0KICAgICByZXR1cm4gdHJpZQogCiAjIEZJWE1FOiBXZSBhbHJlYWR5IGhhdmUgYSBU
ZXN0UmVzdWx0IGNsYXNzIGluIHRlc3RfcmVzdWx0cy5weQpAQCAtMTUzLDcgKzE4OCw3IEBAIGNs
YXNzIEpTT05SZXN1bHRzR2VuZXJhdG9yQmFzZShvYmplY3QpOgogICAgICAgICAgICAgICAgICAg
ICAgICAgVGVzdFJlc3VsdC5GQUlMUzogRkFJTF9SRVNVTFQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICBUZXN0UmVzdWx0LkZMQUtZOiBGTEFLWV9SRVNVTFR9CiAKLSAgICBWRVJTSU9OID0gMwor
ICAgIFZFUlNJT04gPSA0CiAgICAgVkVSU0lPTl9LRVkgPSAidmVyc2lvbiIKICAgICBSRVNVTFRT
ID0gInJlc3VsdHMiCiAgICAgVElNRVMgPSAidGltZXMiCkBAIC0yNTksNiArMjk0LDcgQEAgY2xh
c3MgSlNPTlJlc3VsdHNHZW5lcmF0b3JCYXNlKG9iamVjdCk6CiAgICAgICAgIHNlbGYuX2NvbnZl
cnRfanNvbl90b19jdXJyZW50X3ZlcnNpb24ocmVzdWx0c19qc29uKQogCiAgICAgICAgIGlmIGJ1
aWxkZXJfbmFtZSBub3QgaW4gcmVzdWx0c19qc29uOgorICAgICAgICAgICAgX2xvZy5pbmZvKGJ1
aWxkZXJfbmFtZSArICIgbm90IGluICIgKyBzdHIocmVzdWx0c19qc29uKSkKICAgICAgICAgICAg
IHJlc3VsdHNfanNvbltidWlsZGVyX25hbWVdID0gKAogICAgICAgICAgICAgICAgIHNlbGYuX2Ny
ZWF0ZV9yZXN1bHRzX2Zvcl9idWlsZGVyX2pzb24oKSkKIApAQCAtMjcxLDcgKzMwNywxMiBAQCBj
bGFzcyBKU09OUmVzdWx0c0dlbmVyYXRvckJhc2Uob2JqZWN0KToKICAgICAgICAgIyBVcGRhdGUg
dGhlIGFsbCBmYWlsaW5nIHRlc3RzIHdpdGggcmVzdWx0IHR5cGUgYW5kIHRpbWUuCiAgICAgICAg
IHRlc3RzID0gcmVzdWx0c19mb3JfYnVpbGRlcltzZWxmLlRFU1RTXQogICAgICAgICBhbGxfZmFp
bGluZ190ZXN0cyA9IHNlbGYuX2dldF9mYWlsZWRfdGVzdF9uYW1lcygpCi0gICAgICAgIGFsbF9m
YWlsaW5nX3Rlc3RzLnVwZGF0ZSh0ZXN0cy5pdGVya2V5cygpKQorICAgICAgICBhbGxfZmFpbGlu
Z190ZXN0c190cmllID0ge30KKyAgICAgICAgZm9yIHRlc3QgaW4gYWxsX2ZhaWxpbmdfdGVzdHM6
CisgICAgICAgICAgICBjb252ZXJ0X2ZsYXRfcGF0aF90b190cmllKHRlc3QsIHt9LCBhbGxfZmFp
bGluZ190ZXN0c190cmllKQorCisgICAgICAgIGFsbF9mYWlsaW5nX3Rlc3RzLnVwZGF0ZShjb252
ZXJ0X3RyaWVfdG9fZmxhdF9wYXRocyh0ZXN0cykpCisKICAgICAgICAgZm9yIHRlc3QgaW4gYWxs
X2ZhaWxpbmdfdGVzdHM6CiAgICAgICAgICAgICBzZWxmLl9pbnNlcnRfdGVzdF90aW1lX2FuZF9y
ZXN1bHQodGVzdCwgdGVzdHMpCiAKQEAgLTUxMiw2ICs1NTMsNyBAQCBjbGFzcyBKU09OUmVzdWx0
c0dlbmVyYXRvckJhc2Uob2JqZWN0KToKICAgICAgICAgICAgIGludCh0aW1lLnRpbWUoKSksCiAg
ICAgICAgICAgICBzZWxmLlRJTUUpCiAKKwogICAgIGRlZiBfaW5zZXJ0X3Rlc3RfdGltZV9hbmRf
cmVzdWx0KHNlbGYsIHRlc3RfbmFtZSwgdGVzdHMpOgogICAgICAgICAiIiIgSW5zZXJ0IGEgdGVz
dCBpdGVtIHdpdGggaXRzIHJlc3VsdHMgdG8gdGhlIGdpdmVuIHRlc3RzIGRpY3Rpb25hcnkuCiAK
QEAgLTUyMiwxMCArNTY0LDE1IEBAIGNsYXNzIEpTT05SZXN1bHRzR2VuZXJhdG9yQmFzZShvYmpl
Y3QpOgogICAgICAgICByZXN1bHQgPSBzZWxmLl9nZXRfcmVzdWx0X2NoYXIodGVzdF9uYW1lKQog
ICAgICAgICB0aW1lID0gc2VsZi5fZ2V0X3Rlc3RfdGltaW5nKHRlc3RfbmFtZSkKIAotICAgICAg
ICBpZiB0ZXN0X25hbWUgbm90IGluIHRlc3RzOgotICAgICAgICAgICAgdGVzdHNbdGVzdF9uYW1l
XSA9IHNlbGYuX2NyZWF0ZV9yZXN1bHRzX2FuZF90aW1lc19qc29uKCkKKyAgICAgICAgdGhpc1Rl
c3QgPSB0ZXN0cworICAgICAgICBmb3Igc2VnbWVudCBpbiB0ZXN0X25hbWUuc3BsaXQoIi8iKToK
KyAgICAgICAgICAgIGlmIHNlZ21lbnQgbm90IGluIHRoaXNUZXN0OgorICAgICAgICAgICAgICAg
IHRoaXNUZXN0W3NlZ21lbnRdID0ge30KKyAgICAgICAgICAgIHRoaXNUZXN0ID0gdGhpc1Rlc3Rb
c2VnbWVudF0KKworICAgICAgICBpZiBsZW4odGhpc1Rlc3QpID09IDA6CisgICAgICAgICAgICBz
ZWxmLl9wb3B1bGF0ZV9yZXN1bHRzX2FuZF90aW1lc19qc29uKHRoaXNUZXN0KQogCi0gICAgICAg
IHRoaXNUZXN0ID0gdGVzdHNbdGVzdF9uYW1lXQogICAgICAgICBpZiBzZWxmLlJFU1VMVFMgaW4g
dGhpc1Rlc3Q6CiAgICAgICAgICAgICBzZWxmLl9pbnNlcnRfaXRlbV9ydW5fbGVuZ3RoX2VuY29k
ZWQocmVzdWx0LCB0aGlzVGVzdFtzZWxmLlJFU1VMVFNdKQogICAgICAgICBlbHNlOgpAQCAtNTQw
LDE0ICs1ODcsMzcgQEAgY2xhc3MgSlNPTlJlc3VsdHNHZW5lcmF0b3JCYXNlKG9iamVjdCk6CiAg
ICAgICAgICIiIklmIHRoZSBKU09OIGRvZXMgbm90IG1hdGNoIHRoZSBjdXJyZW50IHZlcnNpb24s
IGNvbnZlcnRzIGl0IHRvIHRoZQogICAgICAgICBjdXJyZW50IHZlcnNpb24gYW5kIGFkZHMgaW4g
dGhlIG5ldyB2ZXJzaW9uIG51bWJlci4KICAgICAgICAgIiIiCi0gICAgICAgIGlmIChzZWxmLlZF
UlNJT05fS0VZIGluIHJlc3VsdHNfanNvbiBhbmQKLSAgICAgICAgICAgIHJlc3VsdHNfanNvbltz
ZWxmLlZFUlNJT05fS0VZXSA9PSBzZWxmLlZFUlNJT04pOgotICAgICAgICAgICAgcmV0dXJuCisg
ICAgICAgIGFyY2hpdmVfdmVyc2lvbiA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5WRVJTSU9OX0tF
WSBpbiByZXN1bHRzX2pzb246CisgICAgICAgICAgICBpZiByZXN1bHRzX2pzb25bc2VsZi5WRVJT
SU9OX0tFWV0gPT0gc2VsZi5WRVJTSU9OOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBhcmNoaXZlX3ZlcnNpb24gPSByZXN1bHRzX2pz
b25bc2VsZi5WRVJTSU9OX0tFWV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFyY2hpdmVf
dmVyc2lvbiA9IDMKKworICAgICAgICAjIHZlcnNpb24gMy0+NAorICAgICAgICBpZiBhcmNoaXZl
X3ZlcnNpb24gPT0gMzoKKyAgICAgICAgICAgIG51bV9yZXN1bHRzID0gbGVuKHJlc3VsdHNfanNv
bi52YWx1ZXMoKSkKKyAgICAgICAgICAgIGZvciBidWlsZGVyLCByZXN1bHRzIGluIHJlc3VsdHNf
anNvbi5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAg
ICAgIHRlc3RfcmVzdWx0cyA9IHJlc3VsdHNbc2VsZi5URVNUU10KKyAgICAgICAgICAgICAgICBl
eGNlcHQ6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICB0
ZXN0X3Jlc3VsdHNfdHJpZSA9IHt9CisgICAgICAgICAgICAgICAgZm9yIHRlc3QgaW4gdGVzdF9y
ZXN1bHRzLml0ZXJrZXlzKCk6CisgICAgICAgICAgICAgICAgICAgICMgTWFrZSBhbGwgcGF0aHMg
YXJlIGhpZXJhcmNoaWNhbAorICAgICAgICAgICAgICAgICAgICB0ZXN0X3BhdGggPSBzZWxmLl9n
ZXRfcGF0aF9yZWxhdGl2ZV90b19sYXlvdXRfdGVzdF9yb290KHRlc3QpCisgICAgICAgICAgICAg
ICAgICAgIHNpbmdsZV90ZXN0X3Jlc3VsdCA9IHRlc3RfcmVzdWx0c1t0ZXN0XQorICAgICAgICAg
ICAgICAgICAgICBjb252ZXJ0X2ZsYXRfcGF0aF90b190cmllKHRlc3RfcGF0aCwgc2luZ2xlX3Rl
c3RfcmVzdWx0LCB0ZXN0X3Jlc3VsdHNfdHJpZSkKKworICAgICAgICAgICAgICAgIHJlc3VsdHNb
c2VsZi5URVNUU10gPSB0ZXN0X3Jlc3VsdHNfdHJpZQogCiAgICAgICAgIHJlc3VsdHNfanNvbltz
ZWxmLlZFUlNJT05fS0VZXSA9IHNlbGYuVkVSU0lPTgorICAgICAgICBfbG9nLmluZm8oImNvbnZl
cnRlZCB0byBjdXJyZW50IHZlcnNpb246IFxuIiArIHN0cihyZXN1bHRzX2pzb24pKQogCi0gICAg
ZGVmIF9jcmVhdGVfcmVzdWx0c19hbmRfdGltZXNfanNvbihzZWxmKToKLSAgICAgICAgcmVzdWx0
c19hbmRfdGltZXMgPSB7fQorICAgIGRlZiBfcG9wdWxhdGVfcmVzdWx0c19hbmRfdGltZXNfanNv
bihzZWxmLCByZXN1bHRzX2FuZF90aW1lcyk6CiAgICAgICAgIHJlc3VsdHNfYW5kX3RpbWVzW3Nl
bGYuUkVTVUxUU10gPSBbXQogICAgICAgICByZXN1bHRzX2FuZF90aW1lc1tzZWxmLlRJTUVTXSA9
IFtdCiAgICAgICAgIHJldHVybiByZXN1bHRzX2FuZF90aW1lcwpkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRz
X2dlbmVyYXRvcl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5lcmF0b3JfdW5pdHRlc3QucHkKaW5k
ZXggMjQ4OTExYTk2MmNhMGY5MDc1YmYzYmY5NzA0Yjk2ZWUwNThhYWYwYy4uMGYzNThkZTcwODAy
MzE3YWMwZmVkMDdkYWVhNzNhZDRmNDI1MWFhYSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRv
cl91bml0dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9s
YXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yX3VuaXR0ZXN0LnB5CkBAIC0xNTYs
OCArMTU2LDggQEAgY2xhc3MgSlNPTkdlbmVyYXRvclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgog
ICAgICAgICBpZiBmYWlsZWRfY291bnRfbWFwOgogICAgICAgICAgICAgdGVzdHMgPSBidWlsZGlu
Zm9bSlJHLlRFU1RTXQogICAgICAgICAgICAgZm9yIHRlc3RfbmFtZSBpbiBmYWlsZWRfY291bnRf
bWFwLml0ZXJrZXlzKCk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRlc3RfbmFt
ZSBpbiB0ZXN0cykKLSAgICAgICAgICAgICAgICB0ZXN0ID0gdGVzdHNbdGVzdF9uYW1lXQorICAg
ICAgICAgICAgICAgICMgZ28gZG93biB0aGUgdHJpZSBzdHJ1Y3R1cmUgdG8gZmluZCB0aGUgdGVz
dCByZXN1bHRzIGlmIG5lY2Vzc2FyeQorICAgICAgICAgICAgICAgIHRlc3QgPSBzZWxmLl9maW5k
X3Rlc3RfaW5fdHJpZSh0ZXN0X25hbWUsIHRlc3RzKQogCiAgICAgICAgICAgICAgICAgZmFpbGVk
ID0gMAogICAgICAgICAgICAgICAgIGZvciByZXN1bHQgaW4gdGVzdFtKUkcuUkVTVUxUU106CkBA
IC0xNzQsNiArMTc0LDE0IEBAIGNsYXNzIEpTT05HZW5lcmF0b3JUZXN0KHVuaXR0ZXN0LlRlc3RD
YXNlKToKICAgICAgICAgaWYgZml4YWJsZV9jb3VudDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoc3VtKGJ1aWxkaW5mb1tKUkcuRklYQUJMRV9DT1VOVF0pLCBmaXhhYmxlX2NvdW50KQog
CisgICAgZGVmIF9maW5kX3Rlc3RfaW5fdHJpZShzZWxmLCBwYXRoLCB0cmllKToKKyAgICAgICAg
c3ViX3RyaWUgPSB0cmllCisgICAgICAgIG5vZGVzID0gcGF0aC5zcGxpdCgiLyIpCisgICAgICAg
IGZvciBub2RlIGluIG5vZGVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vZGUgaW4g
c3ViX3RyaWUpCisgICAgICAgICAgICBzdWJfdHJpZSA9IHN1Yl90cmllW25vZGVdCisgICAgICAg
IHJldHVybiBzdWJfdHJpZQorCiAgICAgZGVmIHRlc3RfanNvbl9nZW5lcmF0aW9uKHNlbGYpOgog
ICAgICAgICBzZWxmLl90ZXN0X2pzb25fZ2VuZXJhdGlvbihbXSwgW10pCiAgICAgICAgIHNlbGYu
X3Rlc3RfanNvbl9nZW5lcmF0aW9uKFsnQTEnLCAnQjEnXSwgW10pCkBAIC0xOTcsNiArMjA1LDEw
IEBAIGNsYXNzIEpTT05HZW5lcmF0b3JUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAg
ICAgIFsnRkxBS1lfQicsICdESVNBQkxFRF9DJywgJ0ZBSUxTX0QnXSwKICAgICAgICAgICAgIFsn
QScsICdGTEFLWV9FJ10pCiAKKyAgICBkZWYgdGVzdF9oaWVyYXJjaGljYWxfanNvbl9nZW5lcmF0
aW9uKHNlbGYpOgorICAgICAgICAjIEZJWE1FKGFib3hoYWxsKTogcmUtd29yayB0ZXN0cyB0byBi
ZSBtb3JlIGNvbXByZWhlbnNpYmxlIGFuZCBjb21wcmVoZW5zaXZlLgorICAgICAgICBzZWxmLl90
ZXN0X2pzb25fZ2VuZXJhdGlvbihbJ2Zvby9BJ10sIFsnZm9vL0InLCAnYmFyL0MnXSkKKwogICAg
IGRlZiB0ZXN0X3Rlc3RfdGltaW5nc190cmllKHNlbGYpOgogICAgICAgICB0ZXN0X3BvcnQgPSB0
ZXN0LlRlc3RQb3J0KCkKICAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MgPSBbXQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94024</attachid>
            <date>2011-05-18 18:36:46 -0700</date>
            <delta_ts>2011-05-19 21:36:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60869-20110519113643.patch</filename>
            <type>text/plain</type>
            <size>11205</size>
            <attacher name="Alice Boxhall">aboxhall</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODY1MTUKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCAzYjE1YTJjYWE2YmFhOWZlYTRhNTVmMmYyODk2YjNhZDVl
OGU3YzVhLi5iMjY2ZWE3MGE5MWMwZTQ3NTM1NmU5MjI0Zjc0ZTBhZDkzYjhlODkyIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMTEtMDUtMTUgIEFsaWNlIEJveGhhbGwgIDxhYm94aGFsbEBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ29udmVydCBq
c29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5IHRvIG91dHB1dCB2ZXJzaW9uIDQgSlNPTi4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwODY5CisKKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xh
eW91dF9yZXN1bHRzX2dlbmVyYXRvci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5OgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25f
cmVzdWx0c19nZW5lcmF0b3JfdW5pdHRlc3QucHk6CisKIDIwMTEtMDUtMTUgIERhbmllbCBCYXRl
cyAgPGRiYXRlc0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IENocmlzIEplcmRv
bmVrLgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5
b3V0X3BhY2thZ2UvanNvbl9sYXlvdXRfcmVzdWx0c19nZW5lcmF0b3IucHkgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xheW91dF9yZXN1
bHRzX2dlbmVyYXRvci5weQppbmRleCBkYmIxNmMwM2UyNjMzMzUwOTQxMjBlY2VhZThjNzA2N2Q4
ZDc4MGYxLi5lYzI4MTY4ZjY2NjIwMGFiYWViNTU4ZDg4OTYyMzE3MjU5YjY4ZTA4IDEwMDY0NAot
LS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9q
c29uX2xheW91dF9yZXN1bHRzX2dlbmVyYXRvci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xheW91dF9yZXN1bHRzX2dlbmVy
YXRvci5weQpAQCAtMTMwLDMwICsxMzAsNiBAQCBjbGFzcyBKU09OTGF5b3V0UmVzdWx0c0dlbmVy
YXRvcihqc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLkpTT05SZXN1bHRzR2VuZXJhdG9yQmFzZQogICAg
ICAgICByZXR1cm4gc2VsZi5fZ2V0X21vZGlmaWVyX2NoYXIodGVzdF9uYW1lKQogCiAgICAgIyBv
dmVycmlkZQotICAgIGRlZiBfY29udmVydF9qc29uX3RvX2N1cnJlbnRfdmVyc2lvbihzZWxmLCBy
ZXN1bHRzX2pzb24pOgotICAgICAgICBhcmNoaXZlX3ZlcnNpb24gPSBOb25lCi0gICAgICAgIGlm
IHNlbGYuVkVSU0lPTl9LRVkgaW4gcmVzdWx0c19qc29uOgotICAgICAgICAgICAgYXJjaGl2ZV92
ZXJzaW9uID0gcmVzdWx0c19qc29uW3NlbGYuVkVSU0lPTl9LRVldCi0KLSAgICAgICAgc3VwZXIo
SlNPTkxheW91dFJlc3VsdHNHZW5lcmF0b3IsCi0gICAgICAgICAgICAgIHNlbGYpLl9jb252ZXJ0
X2pzb25fdG9fY3VycmVudF92ZXJzaW9uKHJlc3VsdHNfanNvbikKLQotICAgICAgICAjIHZlcnNp
b24gMi0+MwotICAgICAgICBpZiBhcmNoaXZlX3ZlcnNpb24gPT0gMjoKLSAgICAgICAgICAgIGZv
ciByZXN1bHRzX2Zvcl9idWlsZGVyIGluIHJlc3VsdHNfanNvbi5pdGVydmFsdWVzKCk6Ci0gICAg
ICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICB0ZXN0X3Jlc3VsdHMgPSByZXN1
bHRzX2Zvcl9idWlsZGVyW3NlbGYuVEVTVFNdCi0gICAgICAgICAgICAgICAgZXhjZXB0OgotICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZQotCi0gICAgICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0
X3Jlc3VsdHM6Ci0gICAgICAgICAgICAgICAgIyBNYWtlIHN1cmUgYWxsIHBhdGhzIGFyZSByZWxh
dGl2ZQotICAgICAgICAgICAgICAgIHRlc3RfcGF0aCA9IHNlbGYuX2dldF9wYXRoX3JlbGF0aXZl
X3RvX2xheW91dF90ZXN0X3Jvb3QodGVzdCkKLSAgICAgICAgICAgICAgICBpZiB0ZXN0X3BhdGgg
IT0gdGVzdDoKLSAgICAgICAgICAgICAgICAgICAgdGVzdF9yZXN1bHRzW3Rlc3RfcGF0aF0gPSB0
ZXN0X3Jlc3VsdHNbdGVzdF0KLSAgICAgICAgICAgICAgICAgICAgZGVsIHRlc3RfcmVzdWx0c1t0
ZXN0XQotCi0gICAgIyBvdmVycmlkZQogICAgIGRlZiBfaW5zZXJ0X2ZhaWx1cmVfc3VtbWFyaWVz
KHNlbGYsIHJlc3VsdHNfZm9yX2J1aWxkZXIpOgogICAgICAgICBzdW1tYXJ5ID0gc2VsZi5fcmVz
dWx0X3N1bW1hcnkKIApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5weSBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fcmVzdWx0c19n
ZW5lcmF0b3IucHkKaW5kZXggODJkMjFlNjJmNjRjZjdjMTQ5ZTZjMDEzOTg3ODA1MzlmMTNmMzAy
Yi4uZWU0OTIzZjQzN2ZkNmUyZjA5ZmYzZDZhZTFjYzliYjM3ODJkMjJlOSAxMDA2NDQKLS0tIGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9y
ZXN1bHRzX2dlbmVyYXRvci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CkBAIC02Nyw2ICs2
Nyw0OSBAQCBkZWYgd3JpdGVfanNvbihmaWxlc3lzdGVtLCBqc29uX29iamVjdCwgZmlsZV9wYXRo
KToKICAgICBqc29uX3N0cmluZyA9IF9KU09OX1BSRUZJWCArIGpzb25fZGF0YSArIF9KU09OX1NV
RkZJWAogICAgIGZpbGVzeXN0ZW0ud3JpdGVfdGV4dF9maWxlKGZpbGVfcGF0aCwganNvbl9zdHJp
bmcpCiAKKworZGVmIGNvbnZlcnRfdHJpZV90b19mbGF0X3BhdGhzKHRyaWUsIHByZWZpeD1Ob25l
KToKKyAgICAgICAgIiIiRmxhdHRlbnMgYSB0cmllIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgaW50byBh
IGZsYXQgc3RydWN0dXJlLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICB0cmllOiB0cmll
IHN0cnVjdHVyZS4KKyAgICAgICAgICAgIHByZWZpeDogYWxlYWR5LWNvbXB1dGVkIHBhdGggdG8g
cHJlcGVuZCB0byB0aGUgZXZlbnR1YWwgcGF0aCwgaWYgYW55LgorCisgICAgICAgIFJldHVybnM6
CisgICAgICAgICAgICBUaGUgZmxhdHRlbmVkIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuCisgICAgICAg
ICIiIgorICAgICAgICByZXN1bHQgPSB7fQorICAgICAgICBmb3IgbmFtZSwgZGF0YSBpbiB0cmll
Lml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgcHJlZml4OgorICAgICAgICAgICAgICAgIGZ1
bGxuYW1lID0gcHJlZml4ICsgIi8iICsgbmFtZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgICAgICBmdWxsbmFtZSA9IG5hbWUKKworICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uo
ZGF0YSwgZGljdCkgb3Igbm90IGxlbihkYXRhKSBvciAicmVzdWx0cyIgaW4gZGF0YToKKyAgICAg
ICAgICAgICAgICByZXN1bHRbZnVsbG5hbWVdID0gZGF0YQorICAgICAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgICAgICByZXN1bHQudXBkYXRlKGNvbnZlcnRfdHJpZV90b19mbGF0X3BhdGhzKGRh
dGEsIGZ1bGxuYW1lKSkKKworICAgICAgICByZXR1cm4gcmVzdWx0CisKKworZGVmIGFkZF9wYXRo
X3RvX3RyaWUocGF0aCwgdmFsdWUsIHRyaWUpOgorICAgICIiIkluc2VydHMgYSBzaW5nbGUgZmxh
dCBwYXRoIGtleSBhbmQgdmFsdWUgaW50byBhIHRyaWUgc3RydWN0dXJlLgorCisgICAgQXJnczoK
KyAgICAgICAgcGF0aDogdGhlIHBhdGggdG8gcGFyc2UuCisgICAgICAgIHZhbHVlOiB0aGUgZGF0
YSB2YWx1ZSB0byBpbnNlcnQgaW50byB0aGUgdHJpZS4KKyAgICAgICAgdHJpZTogdGhlIHRyaWUg
aW50byB3aGljaCB0byBpbnNlcnQgdGhlIHBhdGggYW5kIHZhbHVlLgorICAgICIiIgorICAgIGlm
IG5vdCAiLyIgaW4gcGF0aDoKKyAgICAgICAgdHJpZVtwYXRoXSA9IHZhbHVlCisgICAgICAgIHJl
dHVybgorCisgICAgZGlyZWN0b3J5LCBzbGFzaCwgcmVzdCA9IHBhdGgucGFydGl0aW9uKCIvIikK
KyAgICBpZiBub3QgZGlyZWN0b3J5IGluIHRyaWU6CisgICAgICAgIHRyaWVbZGlyZWN0b3J5XSA9
IHt9CisgICAgYWRkX3BhdGhfdG9fdHJpZShyZXN0LCB2YWx1ZSwgdHJpZVtkaXJlY3RvcnldKQor
CiBkZWYgdGVzdF90aW1pbmdzX3RyaWUocG9ydCwgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpOgog
ICAgICIiIkJyZWFrcyBhIGZpbGVuYW1lIGludG8gY2h1bmtzIGJ5IGRpcmVjdG9yeSBhbmQgcHV0
cyB0aGUgdGVzdCB0aW1lIGFzIGEgdmFsdWUgaW4gdGhlIGxvd2VzdCBwYXJ0LCBlLmcuCiAgICAg
Zm9vL2Jhci9iYXouaHRtbDogMW1zCkBAIC04OCwxNiArMTMxLDggQEAgZGVmIHRlc3RfdGltaW5n
c190cmllKHBvcnQsIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzKToKICAgICAgICAgICAgICMgRklY
TUU6IEhhbmRsZSB0aGlzIGJldHRlci4gTm9uLWxheW91dCB0ZXN0cyBzaG91bGRuJ3QgYmUgcmVs
YXRpdml6ZWQuCiAgICAgICAgICAgICB0ZXN0ID0gdGVzdF9yZXN1bHQuZmlsZW5hbWUKIAotICAg
ICAgICBwYXJ0cyA9IHRlc3Quc3BsaXQoJy8nKQotICAgICAgICBjdXJyZW50X21hcCA9IHRyaWUK
LSAgICAgICAgZm9yIGksIHBhcnQgaW4gZW51bWVyYXRlKHBhcnRzKToKLSAgICAgICAgICAgIGlm
IGkgPT0gKGxlbihwYXJ0cykgLSAxKToKLSAgICAgICAgICAgICAgICBjdXJyZW50X21hcFtwYXJ0
XSA9IGludCgxMDAwICogdGVzdF9yZXN1bHQudGVzdF9ydW5fdGltZSkKLSAgICAgICAgICAgICAg
ICBicmVhaworICAgICAgICBhZGRfcGF0aF90b190cmllKHRlc3QsIGludCgxMDAwICogdGVzdF9y
ZXN1bHQudGVzdF9ydW5fdGltZSksIHRyaWUpCiAKLSAgICAgICAgICAgIGlmIHBhcnQgbm90IGlu
IGN1cnJlbnRfbWFwOgotICAgICAgICAgICAgICAgIGN1cnJlbnRfbWFwW3BhcnRdID0ge30KLSAg
ICAgICAgICAgIGN1cnJlbnRfbWFwID0gY3VycmVudF9tYXBbcGFydF0KICAgICByZXR1cm4gdHJp
ZQogCiAjIEZJWE1FOiBXZSBhbHJlYWR5IGhhdmUgYSBUZXN0UmVzdWx0IGNsYXNzIGluIHRlc3Rf
cmVzdWx0cy5weQpAQCAtMTUzLDcgKzE4OCw3IEBAIGNsYXNzIEpTT05SZXN1bHRzR2VuZXJhdG9y
QmFzZShvYmplY3QpOgogICAgICAgICAgICAgICAgICAgICAgICAgVGVzdFJlc3VsdC5GQUlMUzog
RkFJTF9SRVNVTFQsCiAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0UmVzdWx0LkZMQUtZOiBG
TEFLWV9SRVNVTFR9CiAKLSAgICBWRVJTSU9OID0gMworICAgIFZFUlNJT04gPSA0CiAgICAgVkVS
U0lPTl9LRVkgPSAidmVyc2lvbiIKICAgICBSRVNVTFRTID0gInJlc3VsdHMiCiAgICAgVElNRVMg
PSAidGltZXMiCkBAIC0yNTksNiArMjk0LDcgQEAgY2xhc3MgSlNPTlJlc3VsdHNHZW5lcmF0b3JC
YXNlKG9iamVjdCk6CiAgICAgICAgIHNlbGYuX2NvbnZlcnRfanNvbl90b19jdXJyZW50X3ZlcnNp
b24ocmVzdWx0c19qc29uKQogCiAgICAgICAgIGlmIGJ1aWxkZXJfbmFtZSBub3QgaW4gcmVzdWx0
c19qc29uOgorICAgICAgICAgICAgX2xvZy5pbmZvKGJ1aWxkZXJfbmFtZSArICIgbm90IGluICIg
KyBzdHIocmVzdWx0c19qc29uKSkKICAgICAgICAgICAgIHJlc3VsdHNfanNvbltidWlsZGVyX25h
bWVdID0gKAogICAgICAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9yZXN1bHRzX2Zvcl9idWlsZGVy
X2pzb24oKSkKIApAQCAtMjcxLDcgKzMwNyw4IEBAIGNsYXNzIEpTT05SZXN1bHRzR2VuZXJhdG9y
QmFzZShvYmplY3QpOgogICAgICAgICAjIFVwZGF0ZSB0aGUgYWxsIGZhaWxpbmcgdGVzdHMgd2l0
aCByZXN1bHQgdHlwZSBhbmQgdGltZS4KICAgICAgICAgdGVzdHMgPSByZXN1bHRzX2Zvcl9idWls
ZGVyW3NlbGYuVEVTVFNdCiAgICAgICAgIGFsbF9mYWlsaW5nX3Rlc3RzID0gc2VsZi5fZ2V0X2Zh
aWxlZF90ZXN0X25hbWVzKCkKLSAgICAgICAgYWxsX2ZhaWxpbmdfdGVzdHMudXBkYXRlKHRlc3Rz
Lml0ZXJrZXlzKCkpCisgICAgICAgIGFsbF9mYWlsaW5nX3Rlc3RzLnVwZGF0ZShjb252ZXJ0X3Ry
aWVfdG9fZmxhdF9wYXRocyh0ZXN0cykpCisKICAgICAgICAgZm9yIHRlc3QgaW4gYWxsX2ZhaWxp
bmdfdGVzdHM6CiAgICAgICAgICAgICBzZWxmLl9pbnNlcnRfdGVzdF90aW1lX2FuZF9yZXN1bHQo
dGVzdCwgdGVzdHMpCiAKQEAgLTUxMiw2ICs1NDksNyBAQCBjbGFzcyBKU09OUmVzdWx0c0dlbmVy
YXRvckJhc2Uob2JqZWN0KToKICAgICAgICAgICAgIGludCh0aW1lLnRpbWUoKSksCiAgICAgICAg
ICAgICBzZWxmLlRJTUUpCiAKKwogICAgIGRlZiBfaW5zZXJ0X3Rlc3RfdGltZV9hbmRfcmVzdWx0
KHNlbGYsIHRlc3RfbmFtZSwgdGVzdHMpOgogICAgICAgICAiIiIgSW5zZXJ0IGEgdGVzdCBpdGVt
IHdpdGggaXRzIHJlc3VsdHMgdG8gdGhlIGdpdmVuIHRlc3RzIGRpY3Rpb25hcnkuCiAKQEAgLTUy
MiwxMCArNTYwLDE1IEBAIGNsYXNzIEpTT05SZXN1bHRzR2VuZXJhdG9yQmFzZShvYmplY3QpOgog
ICAgICAgICByZXN1bHQgPSBzZWxmLl9nZXRfcmVzdWx0X2NoYXIodGVzdF9uYW1lKQogICAgICAg
ICB0aW1lID0gc2VsZi5fZ2V0X3Rlc3RfdGltaW5nKHRlc3RfbmFtZSkKIAotICAgICAgICBpZiB0
ZXN0X25hbWUgbm90IGluIHRlc3RzOgotICAgICAgICAgICAgdGVzdHNbdGVzdF9uYW1lXSA9IHNl
bGYuX2NyZWF0ZV9yZXN1bHRzX2FuZF90aW1lc19qc29uKCkKKyAgICAgICAgdGhpc1Rlc3QgPSB0
ZXN0cworICAgICAgICBmb3Igc2VnbWVudCBpbiB0ZXN0X25hbWUuc3BsaXQoIi8iKToKKyAgICAg
ICAgICAgIGlmIHNlZ21lbnQgbm90IGluIHRoaXNUZXN0OgorICAgICAgICAgICAgICAgIHRoaXNU
ZXN0W3NlZ21lbnRdID0ge30KKyAgICAgICAgICAgIHRoaXNUZXN0ID0gdGhpc1Rlc3Rbc2VnbWVu
dF0KKworICAgICAgICBpZiBub3QgbGVuKHRoaXNUZXN0KToKKyAgICAgICAgICAgIHNlbGYuX3Bv
cHVsYXRlX3Jlc3VsdHNfYW5kX3RpbWVzX2pzb24odGhpc1Rlc3QpCiAKLSAgICAgICAgdGhpc1Rl
c3QgPSB0ZXN0c1t0ZXN0X25hbWVdCiAgICAgICAgIGlmIHNlbGYuUkVTVUxUUyBpbiB0aGlzVGVz
dDoKICAgICAgICAgICAgIHNlbGYuX2luc2VydF9pdGVtX3J1bl9sZW5ndGhfZW5jb2RlZChyZXN1
bHQsIHRoaXNUZXN0W3NlbGYuUkVTVUxUU10pCiAgICAgICAgIGVsc2U6CkBAIC01NDAsMTQgKzU4
MywzNiBAQCBjbGFzcyBKU09OUmVzdWx0c0dlbmVyYXRvckJhc2Uob2JqZWN0KToKICAgICAgICAg
IiIiSWYgdGhlIEpTT04gZG9lcyBub3QgbWF0Y2ggdGhlIGN1cnJlbnQgdmVyc2lvbiwgY29udmVy
dHMgaXQgdG8gdGhlCiAgICAgICAgIGN1cnJlbnQgdmVyc2lvbiBhbmQgYWRkcyBpbiB0aGUgbmV3
IHZlcnNpb24gbnVtYmVyLgogICAgICAgICAiIiIKLSAgICAgICAgaWYgKHNlbGYuVkVSU0lPTl9L
RVkgaW4gcmVzdWx0c19qc29uIGFuZAotICAgICAgICAgICAgcmVzdWx0c19qc29uW3NlbGYuVkVS
U0lPTl9LRVldID09IHNlbGYuVkVSU0lPTik6Ci0gICAgICAgICAgICByZXR1cm4KKyAgICAgICAg
YXJjaGl2ZV92ZXJzaW9uID0gTm9uZQorICAgICAgICBpZiBzZWxmLlZFUlNJT05fS0VZIGluIHJl
c3VsdHNfanNvbjoKKyAgICAgICAgICAgIGlmIHJlc3VsdHNfanNvbltzZWxmLlZFUlNJT05fS0VZ
XSA9PSBzZWxmLlZFUlNJT046CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBl
bHNlOgorICAgICAgICAgICAgICAgIGFyY2hpdmVfdmVyc2lvbiA9IHJlc3VsdHNfanNvbltzZWxm
LlZFUlNJT05fS0VZXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXJjaGl2ZV92ZXJzaW9u
ID0gMworCisgICAgICAgICMgdmVyc2lvbiAzLT40CisgICAgICAgIGlmIGFyY2hpdmVfdmVyc2lv
biA9PSAzOgorICAgICAgICAgICAgbnVtX3Jlc3VsdHMgPSBsZW4ocmVzdWx0c19qc29uLnZhbHVl
cygpKQorICAgICAgICAgICAgZm9yIGJ1aWxkZXIsIHJlc3VsdHMgaW4gcmVzdWx0c19qc29uLml0
ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLlRFU1RTIGluIHJlc3VsdHM6
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICB0ZXN0X3Jl
c3VsdHMgPSByZXN1bHRzW3NlbGYuVEVTVFNdCisgICAgICAgICAgICAgICAgdGVzdF9yZXN1bHRz
X3RyaWUgPSB7fQorICAgICAgICAgICAgICAgIGZvciB0ZXN0IGluIHRlc3RfcmVzdWx0cy5pdGVy
a2V5cygpOgorICAgICAgICAgICAgICAgICAgICAjIE1ha2UgYWxsIHBhdGhzIGFyZSBoaWVyYXJj
aGljYWwKKyAgICAgICAgICAgICAgICAgICAgdGVzdF9wYXRoID0gc2VsZi5fZ2V0X3BhdGhfcmVs
YXRpdmVfdG9fbGF5b3V0X3Rlc3Rfcm9vdCh0ZXN0KQorICAgICAgICAgICAgICAgICAgICBzaW5n
bGVfdGVzdF9yZXN1bHQgPSB0ZXN0X3Jlc3VsdHNbdGVzdF0KKyAgICAgICAgICAgICAgICAgICAg
YWRkX3BhdGhfdG9fdHJpZSh0ZXN0X3BhdGgsIHNpbmdsZV90ZXN0X3Jlc3VsdCwgdGVzdF9yZXN1
bHRzX3RyaWUpCisKKyAgICAgICAgICAgICAgICByZXN1bHRzW3NlbGYuVEVTVFNdID0gdGVzdF9y
ZXN1bHRzX3RyaWUKIAogICAgICAgICByZXN1bHRzX2pzb25bc2VsZi5WRVJTSU9OX0tFWV0gPSBz
ZWxmLlZFUlNJT04KKyAgICAgICAgX2xvZy5pbmZvKCJjb252ZXJ0ZWQgdG8gY3VycmVudCB2ZXJz
aW9uOiBcbiIgKyBzdHIocmVzdWx0c19qc29uKSkKIAotICAgIGRlZiBfY3JlYXRlX3Jlc3VsdHNf
YW5kX3RpbWVzX2pzb24oc2VsZik6Ci0gICAgICAgIHJlc3VsdHNfYW5kX3RpbWVzID0ge30KKyAg
ICBkZWYgX3BvcHVsYXRlX3Jlc3VsdHNfYW5kX3RpbWVzX2pzb24oc2VsZiwgcmVzdWx0c19hbmRf
dGltZXMpOgogICAgICAgICByZXN1bHRzX2FuZF90aW1lc1tzZWxmLlJFU1VMVFNdID0gW10KICAg
ICAgICAgcmVzdWx0c19hbmRfdGltZXNbc2VsZi5USU1FU10gPSBbXQogICAgICAgICByZXR1cm4g
cmVzdWx0c19hbmRfdGltZXMKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5lcmF0b3JfdW5pdHRlc3Qu
cHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9q
c29uX3Jlc3VsdHNfZ2VuZXJhdG9yX3VuaXR0ZXN0LnB5CmluZGV4IDI0ODkxMWE5NjJjYTBmOTA3
NWJmM2JmOTcwNGI5NmVlMDU4YWFmMGMuLjBmMzU4ZGU3MDgwMjMxN2FjMGZlZDA3ZGFlYTczYWQ0
ZjQyNTFhYWEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L2xheW91dF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5lcmF0b3JfdW5pdHRlc3QucHkKKysrIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9y
ZXN1bHRzX2dlbmVyYXRvcl91bml0dGVzdC5weQpAQCAtMTU2LDggKzE1Niw4IEBAIGNsYXNzIEpT
T05HZW5lcmF0b3JUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgaWYgZmFpbGVkX2Nv
dW50X21hcDoKICAgICAgICAgICAgIHRlc3RzID0gYnVpbGRpbmZvW0pSRy5URVNUU10KICAgICAg
ICAgICAgIGZvciB0ZXN0X25hbWUgaW4gZmFpbGVkX2NvdW50X21hcC5pdGVya2V5cygpOgotICAg
ICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ZXN0X25hbWUgaW4gdGVzdHMpCi0gICAgICAg
ICAgICAgICAgdGVzdCA9IHRlc3RzW3Rlc3RfbmFtZV0KKyAgICAgICAgICAgICAgICAjIGdvIGRv
d24gdGhlIHRyaWUgc3RydWN0dXJlIHRvIGZpbmQgdGhlIHRlc3QgcmVzdWx0cyBpZiBuZWNlc3Nh
cnkKKyAgICAgICAgICAgICAgICB0ZXN0ID0gc2VsZi5fZmluZF90ZXN0X2luX3RyaWUodGVzdF9u
YW1lLCB0ZXN0cykKIAogICAgICAgICAgICAgICAgIGZhaWxlZCA9IDAKICAgICAgICAgICAgICAg
ICBmb3IgcmVzdWx0IGluIHRlc3RbSlJHLlJFU1VMVFNdOgpAQCAtMTc0LDYgKzE3NCwxNCBAQCBj
bGFzcyBKU09OR2VuZXJhdG9yVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIGlmIGZp
eGFibGVfY291bnQ6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1bShidWlsZGluZm9b
SlJHLkZJWEFCTEVfQ09VTlRdKSwgZml4YWJsZV9jb3VudCkKIAorICAgIGRlZiBfZmluZF90ZXN0
X2luX3RyaWUoc2VsZiwgcGF0aCwgdHJpZSk6CisgICAgICAgIHN1Yl90cmllID0gdHJpZQorICAg
ICAgICBub2RlcyA9IHBhdGguc3BsaXQoIi8iKQorICAgICAgICBmb3Igbm9kZSBpbiBub2RlczoK
KyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub2RlIGluIHN1Yl90cmllKQorICAgICAgICAg
ICAgc3ViX3RyaWUgPSBzdWJfdHJpZVtub2RlXQorICAgICAgICByZXR1cm4gc3ViX3RyaWUKKwog
ICAgIGRlZiB0ZXN0X2pzb25fZ2VuZXJhdGlvbihzZWxmKToKICAgICAgICAgc2VsZi5fdGVzdF9q
c29uX2dlbmVyYXRpb24oW10sIFtdKQogICAgICAgICBzZWxmLl90ZXN0X2pzb25fZ2VuZXJhdGlv
bihbJ0ExJywgJ0IxJ10sIFtdKQpAQCAtMTk3LDYgKzIwNSwxMCBAQCBjbGFzcyBKU09OR2VuZXJh
dG9yVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICAgICBbJ0ZMQUtZX0InLCAnRElT
QUJMRURfQycsICdGQUlMU19EJ10sCiAgICAgICAgICAgICBbJ0EnLCAnRkxBS1lfRSddKQogCisg
ICAgZGVmIHRlc3RfaGllcmFyY2hpY2FsX2pzb25fZ2VuZXJhdGlvbihzZWxmKToKKyAgICAgICAg
IyBGSVhNRShhYm94aGFsbCk6IHJlLXdvcmsgdGVzdHMgdG8gYmUgbW9yZSBjb21wcmVoZW5zaWJs
ZSBhbmQgY29tcHJlaGVuc2l2ZS4KKyAgICAgICAgc2VsZi5fdGVzdF9qc29uX2dlbmVyYXRpb24o
Wydmb28vQSddLCBbJ2Zvby9CJywgJ2Jhci9DJ10pCisKICAgICBkZWYgdGVzdF90ZXN0X3RpbWlu
Z3NfdHJpZShzZWxmKToKICAgICAgICAgdGVzdF9wb3J0ID0gdGVzdC5UZXN0UG9ydCgpCiAgICAg
ICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzID0gW10K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94170</attachid>
            <date>2011-05-19 21:36:57 -0700</date>
            <delta_ts>2011-05-22 23:32:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60869-20110520143655.patch</filename>
            <type>text/plain</type>
            <size>10901</size>
            <attacher name="Alice Boxhall">aboxhall</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODY5MjIKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA1MjlhMjIxODY5ZmU5OGIwMWUxMjQ2NDhjZGEzMGZlMTI3
M2MxMTMyLi5iOWU0ODU4ZTA0MTcyYjBjMjZlMDI0NDMzYTc5NDRkZTBhNjVjNzMwIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMTEtMDUtMTUgIEFsaWNlIEJveGhhbGwgIDxhYm94aGFsbEBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ29udmVydCBq
c29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5IHRvIG91dHB1dCB2ZXJzaW9uIDQgSlNPTi4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwODY5CisKKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xh
eW91dF9yZXN1bHRzX2dlbmVyYXRvci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5OgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25f
cmVzdWx0c19nZW5lcmF0b3JfdW5pdHRlc3QucHk6CisKIDIwMTEtMDUtMTkgIERtaXRyeSBMb21v
diAgPGRzbG9tb3ZAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJvYmVu
LgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0
X3BhY2thZ2UvanNvbl9sYXlvdXRfcmVzdWx0c19nZW5lcmF0b3IucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xheW91dF9yZXN1bHRz
X2dlbmVyYXRvci5weQppbmRleCBkYmIxNmMwM2UyNjMzMzUwOTQxMjBlY2VhZThjNzA2N2Q4ZDc4
MGYxLi5lYzI4MTY4ZjY2NjIwMGFiYWViNTU4ZDg4OTYyMzE3MjU5YjY4ZTA4IDEwMDY0NAotLS0g
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29u
X2xheW91dF9yZXN1bHRzX2dlbmVyYXRvci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xheW91dF9yZXN1bHRzX2dlbmVyYXRv
ci5weQpAQCAtMTMwLDMwICsxMzAsNiBAQCBjbGFzcyBKU09OTGF5b3V0UmVzdWx0c0dlbmVyYXRv
cihqc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLkpTT05SZXN1bHRzR2VuZXJhdG9yQmFzZQogICAgICAg
ICByZXR1cm4gc2VsZi5fZ2V0X21vZGlmaWVyX2NoYXIodGVzdF9uYW1lKQogCiAgICAgIyBvdmVy
cmlkZQotICAgIGRlZiBfY29udmVydF9qc29uX3RvX2N1cnJlbnRfdmVyc2lvbihzZWxmLCByZXN1
bHRzX2pzb24pOgotICAgICAgICBhcmNoaXZlX3ZlcnNpb24gPSBOb25lCi0gICAgICAgIGlmIHNl
bGYuVkVSU0lPTl9LRVkgaW4gcmVzdWx0c19qc29uOgotICAgICAgICAgICAgYXJjaGl2ZV92ZXJz
aW9uID0gcmVzdWx0c19qc29uW3NlbGYuVkVSU0lPTl9LRVldCi0KLSAgICAgICAgc3VwZXIoSlNP
TkxheW91dFJlc3VsdHNHZW5lcmF0b3IsCi0gICAgICAgICAgICAgIHNlbGYpLl9jb252ZXJ0X2pz
b25fdG9fY3VycmVudF92ZXJzaW9uKHJlc3VsdHNfanNvbikKLQotICAgICAgICAjIHZlcnNpb24g
Mi0+MwotICAgICAgICBpZiBhcmNoaXZlX3ZlcnNpb24gPT0gMjoKLSAgICAgICAgICAgIGZvciBy
ZXN1bHRzX2Zvcl9idWlsZGVyIGluIHJlc3VsdHNfanNvbi5pdGVydmFsdWVzKCk6Ci0gICAgICAg
ICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICB0ZXN0X3Jlc3VsdHMgPSByZXN1bHRz
X2Zvcl9idWlsZGVyW3NlbGYuVEVTVFNdCi0gICAgICAgICAgICAgICAgZXhjZXB0OgotICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZQotCi0gICAgICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0X3Jl
c3VsdHM6Ci0gICAgICAgICAgICAgICAgIyBNYWtlIHN1cmUgYWxsIHBhdGhzIGFyZSByZWxhdGl2
ZQotICAgICAgICAgICAgICAgIHRlc3RfcGF0aCA9IHNlbGYuX2dldF9wYXRoX3JlbGF0aXZlX3Rv
X2xheW91dF90ZXN0X3Jvb3QodGVzdCkKLSAgICAgICAgICAgICAgICBpZiB0ZXN0X3BhdGggIT0g
dGVzdDoKLSAgICAgICAgICAgICAgICAgICAgdGVzdF9yZXN1bHRzW3Rlc3RfcGF0aF0gPSB0ZXN0
X3Jlc3VsdHNbdGVzdF0KLSAgICAgICAgICAgICAgICAgICAgZGVsIHRlc3RfcmVzdWx0c1t0ZXN0
XQotCi0gICAgIyBvdmVycmlkZQogICAgIGRlZiBfaW5zZXJ0X2ZhaWx1cmVfc3VtbWFyaWVzKHNl
bGYsIHJlc3VsdHNfZm9yX2J1aWxkZXIpOgogICAgICAgICBzdW1tYXJ5ID0gc2VsZi5fcmVzdWx0
X3N1bW1hcnkKIApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5weSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5l
cmF0b3IucHkKaW5kZXggODJkMjFlNjJmNjRjZjdjMTQ5ZTZjMDEzOTg3ODA1MzlmMTNmMzAyYi4u
MDEwOGVmYjc0OTAwNzIyM2ZkYTliYTM2ODE3NmNjZmNiZjk4ODZkYiAxMDA2NDQKLS0tIGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1
bHRzX2dlbmVyYXRvci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CkBAIC02Nyw2ICs2Nyw0
OSBAQCBkZWYgd3JpdGVfanNvbihmaWxlc3lzdGVtLCBqc29uX29iamVjdCwgZmlsZV9wYXRoKToK
ICAgICBqc29uX3N0cmluZyA9IF9KU09OX1BSRUZJWCArIGpzb25fZGF0YSArIF9KU09OX1NVRkZJ
WAogICAgIGZpbGVzeXN0ZW0ud3JpdGVfdGV4dF9maWxlKGZpbGVfcGF0aCwganNvbl9zdHJpbmcp
CiAKKworZGVmIGNvbnZlcnRfdHJpZV90b19mbGF0X3BhdGhzKHRyaWUsIHByZWZpeD1Ob25lKToK
KyAgICAiIiJGbGF0dGVucyBhIHRyaWUgZGlyZWN0b3J5IHN0cnVjdHVyZSBpbnRvIGEgZmxhdCBz
dHJ1Y3R1cmUuCisKKyAgICBBcmdzOgorICAgICAgICB0cmllOiB0cmllIHN0cnVjdHVyZS4KKyAg
ICAgICAgcHJlZml4OiBhbGVhZHktY29tcHV0ZWQgcGF0aCB0byBwcmVwZW5kIHRvIHRoZSBldmVu
dHVhbCBwYXRoLCBpZiBhbnkuCisKKyAgICBSZXR1cm5zOgorICAgICAgICBUaGUgZmxhdHRlbmVk
IGRpcmVjdG9yeSBzdHJ1Y3R1cmUuCisgICAgIiIiCisgICAgcmVzdWx0ID0ge30KKyAgICBmb3Ig
bmFtZSwgZGF0YSBpbiB0cmllLml0ZXJpdGVtcygpOgorICAgICAgICBpZiBwcmVmaXg6CisgICAg
ICAgICAgICBmdWxsbmFtZSA9IHByZWZpeCArICIvIiArIG5hbWUKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIGZ1bGxuYW1lID0gbmFtZQorCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGRh
dGEsIGRpY3QpIG9yIG5vdCBsZW4oZGF0YSkgb3IgInJlc3VsdHMiIGluIGRhdGE6CisgICAgICAg
ICAgICByZXN1bHRbZnVsbG5hbWVdID0gZGF0YQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
cmVzdWx0LnVwZGF0ZShjb252ZXJ0X3RyaWVfdG9fZmxhdF9wYXRocyhkYXRhLCBmdWxsbmFtZSkp
CisKKyAgICByZXR1cm4gcmVzdWx0CisKKworZGVmIGFkZF9wYXRoX3RvX3RyaWUocGF0aCwgdmFs
dWUsIHRyaWUpOgorICAgICIiIkluc2VydHMgYSBzaW5nbGUgZmxhdCBwYXRoIGtleSBhbmQgdmFs
dWUgaW50byBhIHRyaWUgc3RydWN0dXJlLgorCisgICAgQXJnczoKKyAgICAgICAgcGF0aDogdGhl
IHBhdGggdG8gcGFyc2UuCisgICAgICAgIHZhbHVlOiB0aGUgZGF0YSB2YWx1ZSB0byBpbnNlcnQg
aW50byB0aGUgdHJpZS4KKyAgICAgICAgdHJpZTogdGhlIHRyaWUgaW50byB3aGljaCB0byBpbnNl
cnQgdGhlIHBhdGggYW5kIHZhbHVlLgorICAgICIiIgorICAgIGlmIG5vdCAiLyIgaW4gcGF0aDoK
KyAgICAgICAgdHJpZVtwYXRoXSA9IHZhbHVlCisgICAgICAgIHJldHVybgorCisgICAgZGlyZWN0
b3J5LCBzbGFzaCwgcmVzdCA9IHBhdGgucGFydGl0aW9uKCIvIikKKyAgICBpZiBub3QgZGlyZWN0
b3J5IGluIHRyaWU6CisgICAgICAgIHRyaWVbZGlyZWN0b3J5XSA9IHt9CisgICAgYWRkX3BhdGhf
dG9fdHJpZShyZXN0LCB2YWx1ZSwgdHJpZVtkaXJlY3RvcnldKQorCiBkZWYgdGVzdF90aW1pbmdz
X3RyaWUocG9ydCwgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpOgogICAgICIiIkJyZWFrcyBhIGZp
bGVuYW1lIGludG8gY2h1bmtzIGJ5IGRpcmVjdG9yeSBhbmQgcHV0cyB0aGUgdGVzdCB0aW1lIGFz
IGEgdmFsdWUgaW4gdGhlIGxvd2VzdCBwYXJ0LCBlLmcuCiAgICAgZm9vL2Jhci9iYXouaHRtbDog
MW1zCkBAIC04OCwxNiArMTMxLDggQEAgZGVmIHRlc3RfdGltaW5nc190cmllKHBvcnQsIGluZGl2
aWR1YWxfdGVzdF90aW1pbmdzKToKICAgICAgICAgICAgICMgRklYTUU6IEhhbmRsZSB0aGlzIGJl
dHRlci4gTm9uLWxheW91dCB0ZXN0cyBzaG91bGRuJ3QgYmUgcmVsYXRpdml6ZWQuCiAgICAgICAg
ICAgICB0ZXN0ID0gdGVzdF9yZXN1bHQuZmlsZW5hbWUKIAotICAgICAgICBwYXJ0cyA9IHRlc3Qu
c3BsaXQoJy8nKQotICAgICAgICBjdXJyZW50X21hcCA9IHRyaWUKLSAgICAgICAgZm9yIGksIHBh
cnQgaW4gZW51bWVyYXRlKHBhcnRzKToKLSAgICAgICAgICAgIGlmIGkgPT0gKGxlbihwYXJ0cykg
LSAxKToKLSAgICAgICAgICAgICAgICBjdXJyZW50X21hcFtwYXJ0XSA9IGludCgxMDAwICogdGVz
dF9yZXN1bHQudGVzdF9ydW5fdGltZSkKLSAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBh
ZGRfcGF0aF90b190cmllKHRlc3QsIGludCgxMDAwICogdGVzdF9yZXN1bHQudGVzdF9ydW5fdGlt
ZSksIHRyaWUpCiAKLSAgICAgICAgICAgIGlmIHBhcnQgbm90IGluIGN1cnJlbnRfbWFwOgotICAg
ICAgICAgICAgICAgIGN1cnJlbnRfbWFwW3BhcnRdID0ge30KLSAgICAgICAgICAgIGN1cnJlbnRf
bWFwID0gY3VycmVudF9tYXBbcGFydF0KICAgICByZXR1cm4gdHJpZQogCiAjIEZJWE1FOiBXZSBh
bHJlYWR5IGhhdmUgYSBUZXN0UmVzdWx0IGNsYXNzIGluIHRlc3RfcmVzdWx0cy5weQpAQCAtMTUz
LDcgKzE4OCw3IEBAIGNsYXNzIEpTT05SZXN1bHRzR2VuZXJhdG9yQmFzZShvYmplY3QpOgogICAg
ICAgICAgICAgICAgICAgICAgICAgVGVzdFJlc3VsdC5GQUlMUzogRkFJTF9SRVNVTFQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBUZXN0UmVzdWx0LkZMQUtZOiBGTEFLWV9SRVNVTFR9CiAKLSAg
ICBWRVJTSU9OID0gMworICAgIFZFUlNJT04gPSA0CiAgICAgVkVSU0lPTl9LRVkgPSAidmVyc2lv
biIKICAgICBSRVNVTFRTID0gInJlc3VsdHMiCiAgICAgVElNRVMgPSAidGltZXMiCkBAIC0yNTks
NiArMjk0LDcgQEAgY2xhc3MgSlNPTlJlc3VsdHNHZW5lcmF0b3JCYXNlKG9iamVjdCk6CiAgICAg
ICAgIHNlbGYuX2NvbnZlcnRfanNvbl90b19jdXJyZW50X3ZlcnNpb24ocmVzdWx0c19qc29uKQog
CiAgICAgICAgIGlmIGJ1aWxkZXJfbmFtZSBub3QgaW4gcmVzdWx0c19qc29uOgorICAgICAgICAg
ICAgX2xvZy5pbmZvKGJ1aWxkZXJfbmFtZSArICIgbm90IGluICIgKyBzdHIocmVzdWx0c19qc29u
KSkKICAgICAgICAgICAgIHJlc3VsdHNfanNvbltidWlsZGVyX25hbWVdID0gKAogICAgICAgICAg
ICAgICAgIHNlbGYuX2NyZWF0ZV9yZXN1bHRzX2Zvcl9idWlsZGVyX2pzb24oKSkKIApAQCAtMjcx
LDcgKzMwNyw4IEBAIGNsYXNzIEpTT05SZXN1bHRzR2VuZXJhdG9yQmFzZShvYmplY3QpOgogICAg
ICAgICAjIFVwZGF0ZSB0aGUgYWxsIGZhaWxpbmcgdGVzdHMgd2l0aCByZXN1bHQgdHlwZSBhbmQg
dGltZS4KICAgICAgICAgdGVzdHMgPSByZXN1bHRzX2Zvcl9idWlsZGVyW3NlbGYuVEVTVFNdCiAg
ICAgICAgIGFsbF9mYWlsaW5nX3Rlc3RzID0gc2VsZi5fZ2V0X2ZhaWxlZF90ZXN0X25hbWVzKCkK
LSAgICAgICAgYWxsX2ZhaWxpbmdfdGVzdHMudXBkYXRlKHRlc3RzLml0ZXJrZXlzKCkpCisgICAg
ICAgIGFsbF9mYWlsaW5nX3Rlc3RzLnVwZGF0ZShjb252ZXJ0X3RyaWVfdG9fZmxhdF9wYXRocyh0
ZXN0cykpCisKICAgICAgICAgZm9yIHRlc3QgaW4gYWxsX2ZhaWxpbmdfdGVzdHM6CiAgICAgICAg
ICAgICBzZWxmLl9pbnNlcnRfdGVzdF90aW1lX2FuZF9yZXN1bHQodGVzdCwgdGVzdHMpCiAKQEAg
LTUxMiw2ICs1NDksNyBAQCBjbGFzcyBKU09OUmVzdWx0c0dlbmVyYXRvckJhc2Uob2JqZWN0KToK
ICAgICAgICAgICAgIGludCh0aW1lLnRpbWUoKSksCiAgICAgICAgICAgICBzZWxmLlRJTUUpCiAK
KwogICAgIGRlZiBfaW5zZXJ0X3Rlc3RfdGltZV9hbmRfcmVzdWx0KHNlbGYsIHRlc3RfbmFtZSwg
dGVzdHMpOgogICAgICAgICAiIiIgSW5zZXJ0IGEgdGVzdCBpdGVtIHdpdGggaXRzIHJlc3VsdHMg
dG8gdGhlIGdpdmVuIHRlc3RzIGRpY3Rpb25hcnkuCiAKQEAgLTUyMiwxMCArNTYwLDE1IEBAIGNs
YXNzIEpTT05SZXN1bHRzR2VuZXJhdG9yQmFzZShvYmplY3QpOgogICAgICAgICByZXN1bHQgPSBz
ZWxmLl9nZXRfcmVzdWx0X2NoYXIodGVzdF9uYW1lKQogICAgICAgICB0aW1lID0gc2VsZi5fZ2V0
X3Rlc3RfdGltaW5nKHRlc3RfbmFtZSkKIAotICAgICAgICBpZiB0ZXN0X25hbWUgbm90IGluIHRl
c3RzOgotICAgICAgICAgICAgdGVzdHNbdGVzdF9uYW1lXSA9IHNlbGYuX2NyZWF0ZV9yZXN1bHRz
X2FuZF90aW1lc19qc29uKCkKKyAgICAgICAgdGhpc1Rlc3QgPSB0ZXN0cworICAgICAgICBmb3Ig
c2VnbWVudCBpbiB0ZXN0X25hbWUuc3BsaXQoIi8iKToKKyAgICAgICAgICAgIGlmIHNlZ21lbnQg
bm90IGluIHRoaXNUZXN0OgorICAgICAgICAgICAgICAgIHRoaXNUZXN0W3NlZ21lbnRdID0ge30K
KyAgICAgICAgICAgIHRoaXNUZXN0ID0gdGhpc1Rlc3Rbc2VnbWVudF0KKworICAgICAgICBpZiBu
b3QgbGVuKHRoaXNUZXN0KToKKyAgICAgICAgICAgIHNlbGYuX3BvcHVsYXRlX3Jlc3VsdHNfYW5k
X3RpbWVzX2pzb24odGhpc1Rlc3QpCiAKLSAgICAgICAgdGhpc1Rlc3QgPSB0ZXN0c1t0ZXN0X25h
bWVdCiAgICAgICAgIGlmIHNlbGYuUkVTVUxUUyBpbiB0aGlzVGVzdDoKICAgICAgICAgICAgIHNl
bGYuX2luc2VydF9pdGVtX3J1bl9sZW5ndGhfZW5jb2RlZChyZXN1bHQsIHRoaXNUZXN0W3NlbGYu
UkVTVUxUU10pCiAgICAgICAgIGVsc2U6CkBAIC01NDAsMTQgKzU4MywzMyBAQCBjbGFzcyBKU09O
UmVzdWx0c0dlbmVyYXRvckJhc2Uob2JqZWN0KToKICAgICAgICAgIiIiSWYgdGhlIEpTT04gZG9l
cyBub3QgbWF0Y2ggdGhlIGN1cnJlbnQgdmVyc2lvbiwgY29udmVydHMgaXQgdG8gdGhlCiAgICAg
ICAgIGN1cnJlbnQgdmVyc2lvbiBhbmQgYWRkcyBpbiB0aGUgbmV3IHZlcnNpb24gbnVtYmVyLgog
ICAgICAgICAiIiIKLSAgICAgICAgaWYgKHNlbGYuVkVSU0lPTl9LRVkgaW4gcmVzdWx0c19qc29u
IGFuZAotICAgICAgICAgICAgcmVzdWx0c19qc29uW3NlbGYuVkVSU0lPTl9LRVldID09IHNlbGYu
VkVSU0lPTik6Ci0gICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgc2VsZi5WRVJTSU9OX0tF
WSBpbiByZXN1bHRzX2pzb246CisgICAgICAgICAgICBhcmNoaXZlX3ZlcnNpb24gPSByZXN1bHRz
X2pzb25bc2VsZi5WRVJTSU9OX0tFWV0KKyAgICAgICAgICAgIGlmIGFyY2hpdmVfdmVyc2lvbiA9
PSBzZWxmLlZFUlNJT046CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICBhcmNoaXZlX3ZlcnNpb24gPSAzCisKKyAgICAgICAgIyB2ZXJzaW9uIDMtPjQK
KyAgICAgICAgaWYgYXJjaGl2ZV92ZXJzaW9uID09IDM6CisgICAgICAgICAgICBudW1fcmVzdWx0
cyA9IGxlbihyZXN1bHRzX2pzb24udmFsdWVzKCkpCisgICAgICAgICAgICBmb3IgYnVpbGRlciwg
cmVzdWx0cyBpbiByZXN1bHRzX2pzb24uaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgaWYg
bm90IHNlbGYuVEVTVFMgaW4gcmVzdWx0czoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUK
KworICAgICAgICAgICAgICAgIHRlc3RfcmVzdWx0cyA9IHJlc3VsdHNbc2VsZi5URVNUU10KKyAg
ICAgICAgICAgICAgICB0ZXN0X3Jlc3VsdHNfdHJpZSA9IHt9CisgICAgICAgICAgICAgICAgZm9y
IHRlc3QgaW4gdGVzdF9yZXN1bHRzLml0ZXJrZXlzKCk6CisgICAgICAgICAgICAgICAgICAgIHRl
c3RfcGF0aCA9IHNlbGYuX2dldF9wYXRoX3JlbGF0aXZlX3RvX2xheW91dF90ZXN0X3Jvb3QodGVz
dCkKKyAgICAgICAgICAgICAgICAgICAgc2luZ2xlX3Rlc3RfcmVzdWx0ID0gdGVzdF9yZXN1bHRz
W3Rlc3RdCisgICAgICAgICAgICAgICAgICAgIGFkZF9wYXRoX3RvX3RyaWUodGVzdF9wYXRoLCBz
aW5nbGVfdGVzdF9yZXN1bHQsIHRlc3RfcmVzdWx0c190cmllKQorCisgICAgICAgICAgICAgICAg
cmVzdWx0c1tzZWxmLlRFU1RTXSA9IHRlc3RfcmVzdWx0c190cmllCiAKICAgICAgICAgcmVzdWx0
c19qc29uW3NlbGYuVkVSU0lPTl9LRVldID0gc2VsZi5WRVJTSU9OCisgICAgICAgIF9sb2cuaW5m
bygiY29udmVydGVkIHRvIGN1cnJlbnQgdmVyc2lvbjogXG4iKQogCi0gICAgZGVmIF9jcmVhdGVf
cmVzdWx0c19hbmRfdGltZXNfanNvbihzZWxmKToKLSAgICAgICAgcmVzdWx0c19hbmRfdGltZXMg
PSB7fQorICAgIGRlZiBfcG9wdWxhdGVfcmVzdWx0c19hbmRfdGltZXNfanNvbihzZWxmLCByZXN1
bHRzX2FuZF90aW1lcyk6CiAgICAgICAgIHJlc3VsdHNfYW5kX3RpbWVzW3NlbGYuUkVTVUxUU10g
PSBbXQogICAgICAgICByZXN1bHRzX2FuZF90aW1lc1tzZWxmLlRJTUVTXSA9IFtdCiAgICAgICAg
IHJldHVybiByZXN1bHRzX2FuZF90aW1lcwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvcl91
bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL2pzb25fcmVzdWx0c19nZW5lcmF0b3JfdW5pdHRlc3QucHkKaW5kZXggMjQ4OTExYTk2
MmNhMGY5MDc1YmYzYmY5NzA0Yjk2ZWUwNThhYWYwYy4uZGQ0ZGI3OGNmYzI2MGUyZGIzMThkMjRi
MTBmNzE1MmVkNDIxMDU5ZSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvcl91bml0dGVzdC5w
eQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2Fn
ZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yX3VuaXR0ZXN0LnB5CkBAIC0xNTYsOCArMTU2LDcgQEAg
Y2xhc3MgSlNPTkdlbmVyYXRvclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBpZiBm
YWlsZWRfY291bnRfbWFwOgogICAgICAgICAgICAgdGVzdHMgPSBidWlsZGluZm9bSlJHLlRFU1RT
XQogICAgICAgICAgICAgZm9yIHRlc3RfbmFtZSBpbiBmYWlsZWRfY291bnRfbWFwLml0ZXJrZXlz
KCk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRlc3RfbmFtZSBpbiB0ZXN0cykK
LSAgICAgICAgICAgICAgICB0ZXN0ID0gdGVzdHNbdGVzdF9uYW1lXQorICAgICAgICAgICAgICAg
IHRlc3QgPSBzZWxmLl9maW5kX3Rlc3RfaW5fdHJpZSh0ZXN0X25hbWUsIHRlc3RzKQogCiAgICAg
ICAgICAgICAgICAgZmFpbGVkID0gMAogICAgICAgICAgICAgICAgIGZvciByZXN1bHQgaW4gdGVz
dFtKUkcuUkVTVUxUU106CkBAIC0xNzQsNiArMTczLDE0IEBAIGNsYXNzIEpTT05HZW5lcmF0b3JU
ZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgaWYgZml4YWJsZV9jb3VudDoKICAgICAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VtKGJ1aWxkaW5mb1tKUkcuRklYQUJMRV9DT1VOVF0p
LCBmaXhhYmxlX2NvdW50KQogCisgICAgZGVmIF9maW5kX3Rlc3RfaW5fdHJpZShzZWxmLCBwYXRo
LCB0cmllKToKKyAgICAgICAgc3ViX3RyaWUgPSB0cmllCisgICAgICAgIG5vZGVzID0gcGF0aC5z
cGxpdCgiLyIpCisgICAgICAgIGZvciBub2RlIGluIG5vZGVzOgorICAgICAgICAgICAgc2VsZi5h
c3NlcnRUcnVlKG5vZGUgaW4gc3ViX3RyaWUpCisgICAgICAgICAgICBzdWJfdHJpZSA9IHN1Yl90
cmllW25vZGVdCisgICAgICAgIHJldHVybiBzdWJfdHJpZQorCiAgICAgZGVmIHRlc3RfanNvbl9n
ZW5lcmF0aW9uKHNlbGYpOgogICAgICAgICBzZWxmLl90ZXN0X2pzb25fZ2VuZXJhdGlvbihbXSwg
W10pCiAgICAgICAgIHNlbGYuX3Rlc3RfanNvbl9nZW5lcmF0aW9uKFsnQTEnLCAnQjEnXSwgW10p
CkBAIC0xOTcsNiArMjA0LDEwIEBAIGNsYXNzIEpTT05HZW5lcmF0b3JUZXN0KHVuaXR0ZXN0LlRl
c3RDYXNlKToKICAgICAgICAgICAgIFsnRkxBS1lfQicsICdESVNBQkxFRF9DJywgJ0ZBSUxTX0Qn
XSwKICAgICAgICAgICAgIFsnQScsICdGTEFLWV9FJ10pCiAKKyAgICBkZWYgdGVzdF9oaWVyYXJj
aGljYWxfanNvbl9nZW5lcmF0aW9uKHNlbGYpOgorICAgICAgICAjIEZJWE1FKGFib3hoYWxsKTog
cmUtd29yayB0ZXN0cyB0byBiZSBtb3JlIGNvbXByZWhlbnNpYmxlIGFuZCBjb21wcmVoZW5zaXZl
LgorICAgICAgICBzZWxmLl90ZXN0X2pzb25fZ2VuZXJhdGlvbihbJ2Zvby9BJ10sIFsnZm9vL0In
LCAnYmFyL0MnXSkKKwogICAgIGRlZiB0ZXN0X3Rlc3RfdGltaW5nc190cmllKHNlbGYpOgogICAg
ICAgICB0ZXN0X3BvcnQgPSB0ZXN0LlRlc3RQb3J0KCkKICAgICAgICAgaW5kaXZpZHVhbF90ZXN0
X3RpbWluZ3MgPSBbXQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94371</attachid>
            <date>2011-05-22 23:23:36 -0700</date>
            <delta_ts>2011-05-22 23:27:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60869-20110523162334.patch</filename>
            <type>text/plain</type>
            <size>10558</size>
            <attacher name="Alice Boxhall">aboxhall</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODY5MjIKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA1MjlhMjIxODY5ZmU5OGIwMWUxMjQ2NDhjZGEzMGZlMTI3
M2MxMTMyLi5iOWU0ODU4ZTA0MTcyYjBjMjZlMDI0NDMzYTc5NDRkZTBhNjVjNzMwIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMTEtMDUtMTUgIEFsaWNlIEJveGhhbGwgIDxhYm94aGFsbEBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ29udmVydCBq
c29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5IHRvIG91dHB1dCB2ZXJzaW9uIDQgSlNPTi4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwODY5CisKKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xh
eW91dF9yZXN1bHRzX2dlbmVyYXRvci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5OgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25f
cmVzdWx0c19nZW5lcmF0b3JfdW5pdHRlc3QucHk6CisKIDIwMTEtMDUtMTkgIERtaXRyeSBMb21v
diAgPGRzbG9tb3ZAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJvYmVu
LgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0
X3BhY2thZ2UvanNvbl9sYXlvdXRfcmVzdWx0c19nZW5lcmF0b3IucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xheW91dF9yZXN1bHRz
X2dlbmVyYXRvci5weQppbmRleCBkYmIxNmMwM2UyNjMzMzUwOTQxMjBlY2VhZThjNzA2N2Q4ZDc4
MGYxLi5lYzI4MTY4ZjY2NjIwMGFiYWViNTU4ZDg4OTYyMzE3MjU5YjY4ZTA4IDEwMDY0NAotLS0g
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29u
X2xheW91dF9yZXN1bHRzX2dlbmVyYXRvci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xheW91dF9yZXN1bHRzX2dlbmVyYXRv
ci5weQpAQCAtMTMwLDMwICsxMzAsNiBAQCBjbGFzcyBKU09OTGF5b3V0UmVzdWx0c0dlbmVyYXRv
cihqc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLkpTT05SZXN1bHRzR2VuZXJhdG9yQmFzZQogICAgICAg
ICByZXR1cm4gc2VsZi5fZ2V0X21vZGlmaWVyX2NoYXIodGVzdF9uYW1lKQogCiAgICAgIyBvdmVy
cmlkZQotICAgIGRlZiBfY29udmVydF9qc29uX3RvX2N1cnJlbnRfdmVyc2lvbihzZWxmLCByZXN1
bHRzX2pzb24pOgotICAgICAgICBhcmNoaXZlX3ZlcnNpb24gPSBOb25lCi0gICAgICAgIGlmIHNl
bGYuVkVSU0lPTl9LRVkgaW4gcmVzdWx0c19qc29uOgotICAgICAgICAgICAgYXJjaGl2ZV92ZXJz
aW9uID0gcmVzdWx0c19qc29uW3NlbGYuVkVSU0lPTl9LRVldCi0KLSAgICAgICAgc3VwZXIoSlNP
TkxheW91dFJlc3VsdHNHZW5lcmF0b3IsCi0gICAgICAgICAgICAgIHNlbGYpLl9jb252ZXJ0X2pz
b25fdG9fY3VycmVudF92ZXJzaW9uKHJlc3VsdHNfanNvbikKLQotICAgICAgICAjIHZlcnNpb24g
Mi0+MwotICAgICAgICBpZiBhcmNoaXZlX3ZlcnNpb24gPT0gMjoKLSAgICAgICAgICAgIGZvciBy
ZXN1bHRzX2Zvcl9idWlsZGVyIGluIHJlc3VsdHNfanNvbi5pdGVydmFsdWVzKCk6Ci0gICAgICAg
ICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICB0ZXN0X3Jlc3VsdHMgPSByZXN1bHRz
X2Zvcl9idWlsZGVyW3NlbGYuVEVTVFNdCi0gICAgICAgICAgICAgICAgZXhjZXB0OgotICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZQotCi0gICAgICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0X3Jl
c3VsdHM6Ci0gICAgICAgICAgICAgICAgIyBNYWtlIHN1cmUgYWxsIHBhdGhzIGFyZSByZWxhdGl2
ZQotICAgICAgICAgICAgICAgIHRlc3RfcGF0aCA9IHNlbGYuX2dldF9wYXRoX3JlbGF0aXZlX3Rv
X2xheW91dF90ZXN0X3Jvb3QodGVzdCkKLSAgICAgICAgICAgICAgICBpZiB0ZXN0X3BhdGggIT0g
dGVzdDoKLSAgICAgICAgICAgICAgICAgICAgdGVzdF9yZXN1bHRzW3Rlc3RfcGF0aF0gPSB0ZXN0
X3Jlc3VsdHNbdGVzdF0KLSAgICAgICAgICAgICAgICAgICAgZGVsIHRlc3RfcmVzdWx0c1t0ZXN0
XQotCi0gICAgIyBvdmVycmlkZQogICAgIGRlZiBfaW5zZXJ0X2ZhaWx1cmVfc3VtbWFyaWVzKHNl
bGYsIHJlc3VsdHNfZm9yX2J1aWxkZXIpOgogICAgICAgICBzdW1tYXJ5ID0gc2VsZi5fcmVzdWx0
X3N1bW1hcnkKIApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5weSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5l
cmF0b3IucHkKaW5kZXggODJkMjFlNjJmNjRjZjdjMTQ5ZTZjMDEzOTg3ODA1MzlmMTNmMzAyYi4u
YTViMzgyZjMzM2M1NTYxMTlmNGQ2YjRkZGZlY2RhMGViZDRhOTc2OCAxMDA2NDQKLS0tIGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1
bHRzX2dlbmVyYXRvci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CkBAIC02Nyw2ICs2Nyw0
OSBAQCBkZWYgd3JpdGVfanNvbihmaWxlc3lzdGVtLCBqc29uX29iamVjdCwgZmlsZV9wYXRoKToK
ICAgICBqc29uX3N0cmluZyA9IF9KU09OX1BSRUZJWCArIGpzb25fZGF0YSArIF9KU09OX1NVRkZJ
WAogICAgIGZpbGVzeXN0ZW0ud3JpdGVfdGV4dF9maWxlKGZpbGVfcGF0aCwganNvbl9zdHJpbmcp
CiAKKworZGVmIGNvbnZlcnRfdHJpZV90b19mbGF0X3BhdGhzKHRyaWUsIHByZWZpeD1Ob25lKToK
KyAgICAiIiJGbGF0dGVucyBhIHRyaWUgZGlyZWN0b3J5IHN0cnVjdHVyZSBpbnRvIGEgZmxhdCBz
dHJ1Y3R1cmUuCisKKyAgICBBcmdzOgorICAgICAgICB0cmllOiB0cmllIHN0cnVjdHVyZS4KKyAg
ICAgICAgcHJlZml4OiBhbGVhZHktY29tcHV0ZWQgcGF0aCB0byBwcmVwZW5kIHRvIHRoZSBldmVu
dHVhbCBwYXRoLCBpZiBhbnkuCisKKyAgICBSZXR1cm5zOgorICAgICAgICBUaGUgZmxhdHRlbmVk
IGRpcmVjdG9yeSBzdHJ1Y3R1cmUuCisgICAgIiIiCisgICAgcmVzdWx0ID0ge30KKyAgICBmb3Ig
bmFtZSwgZGF0YSBpbiB0cmllLml0ZXJpdGVtcygpOgorICAgICAgICBpZiBwcmVmaXg6CisgICAg
ICAgICAgICBmdWxsbmFtZSA9IHByZWZpeCArICIvIiArIG5hbWUKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIGZ1bGxuYW1lID0gbmFtZQorCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGRh
dGEsIGRpY3QpIG9yIG5vdCBsZW4oZGF0YSkgb3IgInJlc3VsdHMiIGluIGRhdGE6CisgICAgICAg
ICAgICByZXN1bHRbZnVsbG5hbWVdID0gZGF0YQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
cmVzdWx0LnVwZGF0ZShjb252ZXJ0X3RyaWVfdG9fZmxhdF9wYXRocyhkYXRhLCBmdWxsbmFtZSkp
CisKKyAgICByZXR1cm4gcmVzdWx0CisKKworZGVmIGFkZF9wYXRoX3RvX3RyaWUocGF0aCwgdmFs
dWUsIHRyaWUpOgorICAgICIiIkluc2VydHMgYSBzaW5nbGUgZmxhdCBwYXRoIGtleSBhbmQgdmFs
dWUgaW50byBhIHRyaWUgc3RydWN0dXJlLgorCisgICAgQXJnczoKKyAgICAgICAgcGF0aDogdGhl
IHBhdGggdG8gcGFyc2UuCisgICAgICAgIHZhbHVlOiB0aGUgZGF0YSB2YWx1ZSB0byBpbnNlcnQg
aW50byB0aGUgdHJpZS4KKyAgICAgICAgdHJpZTogdGhlIHRyaWUgaW50byB3aGljaCB0byBpbnNl
cnQgdGhlIHBhdGggYW5kIHZhbHVlLgorICAgICIiIgorICAgIGlmIG5vdCAiLyIgaW4gcGF0aDoK
KyAgICAgICAgdHJpZVtwYXRoXSA9IHZhbHVlCisgICAgICAgIHJldHVybgorCisgICAgZGlyZWN0
b3J5LCBzbGFzaCwgcmVzdCA9IHBhdGgucGFydGl0aW9uKCIvIikKKyAgICBpZiBub3QgZGlyZWN0
b3J5IGluIHRyaWU6CisgICAgICAgIHRyaWVbZGlyZWN0b3J5XSA9IHt9CisgICAgYWRkX3BhdGhf
dG9fdHJpZShyZXN0LCB2YWx1ZSwgdHJpZVtkaXJlY3RvcnldKQorCiBkZWYgdGVzdF90aW1pbmdz
X3RyaWUocG9ydCwgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpOgogICAgICIiIkJyZWFrcyBhIGZp
bGVuYW1lIGludG8gY2h1bmtzIGJ5IGRpcmVjdG9yeSBhbmQgcHV0cyB0aGUgdGVzdCB0aW1lIGFz
IGEgdmFsdWUgaW4gdGhlIGxvd2VzdCBwYXJ0LCBlLmcuCiAgICAgZm9vL2Jhci9iYXouaHRtbDog
MW1zCkBAIC04OCwxNiArMTMxLDggQEAgZGVmIHRlc3RfdGltaW5nc190cmllKHBvcnQsIGluZGl2
aWR1YWxfdGVzdF90aW1pbmdzKToKICAgICAgICAgICAgICMgRklYTUU6IEhhbmRsZSB0aGlzIGJl
dHRlci4gTm9uLWxheW91dCB0ZXN0cyBzaG91bGRuJ3QgYmUgcmVsYXRpdml6ZWQuCiAgICAgICAg
ICAgICB0ZXN0ID0gdGVzdF9yZXN1bHQuZmlsZW5hbWUKIAotICAgICAgICBwYXJ0cyA9IHRlc3Qu
c3BsaXQoJy8nKQotICAgICAgICBjdXJyZW50X21hcCA9IHRyaWUKLSAgICAgICAgZm9yIGksIHBh
cnQgaW4gZW51bWVyYXRlKHBhcnRzKToKLSAgICAgICAgICAgIGlmIGkgPT0gKGxlbihwYXJ0cykg
LSAxKToKLSAgICAgICAgICAgICAgICBjdXJyZW50X21hcFtwYXJ0XSA9IGludCgxMDAwICogdGVz
dF9yZXN1bHQudGVzdF9ydW5fdGltZSkKLSAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBh
ZGRfcGF0aF90b190cmllKHRlc3QsIGludCgxMDAwICogdGVzdF9yZXN1bHQudGVzdF9ydW5fdGlt
ZSksIHRyaWUpCiAKLSAgICAgICAgICAgIGlmIHBhcnQgbm90IGluIGN1cnJlbnRfbWFwOgotICAg
ICAgICAgICAgICAgIGN1cnJlbnRfbWFwW3BhcnRdID0ge30KLSAgICAgICAgICAgIGN1cnJlbnRf
bWFwID0gY3VycmVudF9tYXBbcGFydF0KICAgICByZXR1cm4gdHJpZQogCiAjIEZJWE1FOiBXZSBh
bHJlYWR5IGhhdmUgYSBUZXN0UmVzdWx0IGNsYXNzIGluIHRlc3RfcmVzdWx0cy5weQpAQCAtMTUz
LDcgKzE4OCw3IEBAIGNsYXNzIEpTT05SZXN1bHRzR2VuZXJhdG9yQmFzZShvYmplY3QpOgogICAg
ICAgICAgICAgICAgICAgICAgICAgVGVzdFJlc3VsdC5GQUlMUzogRkFJTF9SRVNVTFQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBUZXN0UmVzdWx0LkZMQUtZOiBGTEFLWV9SRVNVTFR9CiAKLSAg
ICBWRVJTSU9OID0gMworICAgIFZFUlNJT04gPSA0CiAgICAgVkVSU0lPTl9LRVkgPSAidmVyc2lv
biIKICAgICBSRVNVTFRTID0gInJlc3VsdHMiCiAgICAgVElNRVMgPSAidGltZXMiCkBAIC0yNzEs
NyArMzA2LDggQEAgY2xhc3MgSlNPTlJlc3VsdHNHZW5lcmF0b3JCYXNlKG9iamVjdCk6CiAgICAg
ICAgICMgVXBkYXRlIHRoZSBhbGwgZmFpbGluZyB0ZXN0cyB3aXRoIHJlc3VsdCB0eXBlIGFuZCB0
aW1lLgogICAgICAgICB0ZXN0cyA9IHJlc3VsdHNfZm9yX2J1aWxkZXJbc2VsZi5URVNUU10KICAg
ICAgICAgYWxsX2ZhaWxpbmdfdGVzdHMgPSBzZWxmLl9nZXRfZmFpbGVkX3Rlc3RfbmFtZXMoKQot
ICAgICAgICBhbGxfZmFpbGluZ190ZXN0cy51cGRhdGUodGVzdHMuaXRlcmtleXMoKSkKKyAgICAg
ICAgYWxsX2ZhaWxpbmdfdGVzdHMudXBkYXRlKGNvbnZlcnRfdHJpZV90b19mbGF0X3BhdGhzKHRl
c3RzKSkKKwogICAgICAgICBmb3IgdGVzdCBpbiBhbGxfZmFpbGluZ190ZXN0czoKICAgICAgICAg
ICAgIHNlbGYuX2luc2VydF90ZXN0X3RpbWVfYW5kX3Jlc3VsdCh0ZXN0LCB0ZXN0cykKIApAQCAt
NTEyLDYgKzU0OCw3IEBAIGNsYXNzIEpTT05SZXN1bHRzR2VuZXJhdG9yQmFzZShvYmplY3QpOgog
ICAgICAgICAgICAgaW50KHRpbWUudGltZSgpKSwKICAgICAgICAgICAgIHNlbGYuVElNRSkKIAor
CiAgICAgZGVmIF9pbnNlcnRfdGVzdF90aW1lX2FuZF9yZXN1bHQoc2VsZiwgdGVzdF9uYW1lLCB0
ZXN0cyk6CiAgICAgICAgICIiIiBJbnNlcnQgYSB0ZXN0IGl0ZW0gd2l0aCBpdHMgcmVzdWx0cyB0
byB0aGUgZ2l2ZW4gdGVzdHMgZGljdGlvbmFyeS4KIApAQCAtNTIyLDEwICs1NTksMTUgQEAgY2xh
c3MgSlNPTlJlc3VsdHNHZW5lcmF0b3JCYXNlKG9iamVjdCk6CiAgICAgICAgIHJlc3VsdCA9IHNl
bGYuX2dldF9yZXN1bHRfY2hhcih0ZXN0X25hbWUpCiAgICAgICAgIHRpbWUgPSBzZWxmLl9nZXRf
dGVzdF90aW1pbmcodGVzdF9uYW1lKQogCi0gICAgICAgIGlmIHRlc3RfbmFtZSBub3QgaW4gdGVz
dHM6Ci0gICAgICAgICAgICB0ZXN0c1t0ZXN0X25hbWVdID0gc2VsZi5fY3JlYXRlX3Jlc3VsdHNf
YW5kX3RpbWVzX2pzb24oKQorICAgICAgICB0aGlzVGVzdCA9IHRlc3RzCisgICAgICAgIGZvciBz
ZWdtZW50IGluIHRlc3RfbmFtZS5zcGxpdCgiLyIpOgorICAgICAgICAgICAgaWYgc2VnbWVudCBu
b3QgaW4gdGhpc1Rlc3Q6CisgICAgICAgICAgICAgICAgdGhpc1Rlc3Rbc2VnbWVudF0gPSB7fQor
ICAgICAgICAgICAgdGhpc1Rlc3QgPSB0aGlzVGVzdFtzZWdtZW50XQorCisgICAgICAgIGlmIG5v
dCBsZW4odGhpc1Rlc3QpOgorICAgICAgICAgICAgc2VsZi5fcG9wdWxhdGVfcmVzdWx0c19hbmRf
dGltZXNfanNvbih0aGlzVGVzdCkKIAotICAgICAgICB0aGlzVGVzdCA9IHRlc3RzW3Rlc3RfbmFt
ZV0KICAgICAgICAgaWYgc2VsZi5SRVNVTFRTIGluIHRoaXNUZXN0OgogICAgICAgICAgICAgc2Vs
Zi5faW5zZXJ0X2l0ZW1fcnVuX2xlbmd0aF9lbmNvZGVkKHJlc3VsdCwgdGhpc1Rlc3Rbc2VsZi5S
RVNVTFRTXSkKICAgICAgICAgZWxzZToKQEAgLTU0MCwxNCArNTgyLDMzIEBAIGNsYXNzIEpTT05S
ZXN1bHRzR2VuZXJhdG9yQmFzZShvYmplY3QpOgogICAgICAgICAiIiJJZiB0aGUgSlNPTiBkb2Vz
IG5vdCBtYXRjaCB0aGUgY3VycmVudCB2ZXJzaW9uLCBjb252ZXJ0cyBpdCB0byB0aGUKICAgICAg
ICAgY3VycmVudCB2ZXJzaW9uIGFuZCBhZGRzIGluIHRoZSBuZXcgdmVyc2lvbiBudW1iZXIuCiAg
ICAgICAgICIiIgotICAgICAgICBpZiAoc2VsZi5WRVJTSU9OX0tFWSBpbiByZXN1bHRzX2pzb24g
YW5kCi0gICAgICAgICAgICByZXN1bHRzX2pzb25bc2VsZi5WRVJTSU9OX0tFWV0gPT0gc2VsZi5W
RVJTSU9OKToKLSAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBzZWxmLlZFUlNJT05fS0VZ
IGluIHJlc3VsdHNfanNvbjoKKyAgICAgICAgICAgIGFyY2hpdmVfdmVyc2lvbiA9IHJlc3VsdHNf
anNvbltzZWxmLlZFUlNJT05fS0VZXQorICAgICAgICAgICAgaWYgYXJjaGl2ZV92ZXJzaW9uID09
IHNlbGYuVkVSU0lPTjoKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIGFyY2hpdmVfdmVyc2lvbiA9IDMKKworICAgICAgICAjIHZlcnNpb24gMy0+NAor
ICAgICAgICBpZiBhcmNoaXZlX3ZlcnNpb24gPT0gMzoKKyAgICAgICAgICAgIG51bV9yZXN1bHRz
ID0gbGVuKHJlc3VsdHNfanNvbi52YWx1ZXMoKSkKKyAgICAgICAgICAgIGZvciBidWlsZGVyLCBy
ZXN1bHRzIGluIHJlc3VsdHNfanNvbi5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICBpZiBu
b3Qgc2VsZi5URVNUUyBpbiByZXN1bHRzOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQor
CisgICAgICAgICAgICAgICAgdGVzdF9yZXN1bHRzID0gcmVzdWx0c1tzZWxmLlRFU1RTXQorICAg
ICAgICAgICAgICAgIHRlc3RfcmVzdWx0c190cmllID0ge30KKyAgICAgICAgICAgICAgICBmb3Ig
dGVzdCBpbiB0ZXN0X3Jlc3VsdHMuaXRlcmtleXMoKToKKyAgICAgICAgICAgICAgICAgICAgdGVz
dF9wYXRoID0gc2VsZi5fZ2V0X3BhdGhfcmVsYXRpdmVfdG9fbGF5b3V0X3Rlc3Rfcm9vdCh0ZXN0
KQorICAgICAgICAgICAgICAgICAgICBzaW5nbGVfdGVzdF9yZXN1bHQgPSB0ZXN0X3Jlc3VsdHNb
dGVzdF0KKyAgICAgICAgICAgICAgICAgICAgYWRkX3BhdGhfdG9fdHJpZSh0ZXN0X3BhdGgsIHNp
bmdsZV90ZXN0X3Jlc3VsdCwgdGVzdF9yZXN1bHRzX3RyaWUpCisKKyAgICAgICAgICAgICAgICBy
ZXN1bHRzW3NlbGYuVEVTVFNdID0gdGVzdF9yZXN1bHRzX3RyaWUKIAogICAgICAgICByZXN1bHRz
X2pzb25bc2VsZi5WRVJTSU9OX0tFWV0gPSBzZWxmLlZFUlNJT04KKyAgICAgICAgX2xvZy5pbmZv
KCJjb252ZXJ0ZWQgdG8gY3VycmVudCB2ZXJzaW9uOiBcbiIpCiAKLSAgICBkZWYgX2NyZWF0ZV9y
ZXN1bHRzX2FuZF90aW1lc19qc29uKHNlbGYpOgotICAgICAgICByZXN1bHRzX2FuZF90aW1lcyA9
IHt9CisgICAgZGVmIF9wb3B1bGF0ZV9yZXN1bHRzX2FuZF90aW1lc19qc29uKHNlbGYsIHJlc3Vs
dHNfYW5kX3RpbWVzKToKICAgICAgICAgcmVzdWx0c19hbmRfdGltZXNbc2VsZi5SRVNVTFRTXSA9
IFtdCiAgICAgICAgIHJlc3VsdHNfYW5kX3RpbWVzW3NlbGYuVElNRVNdID0gW10KICAgICAgICAg
cmV0dXJuIHJlc3VsdHNfYW5kX3RpbWVzCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yX3Vu
aXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3Bh
Y2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvcl91bml0dGVzdC5weQppbmRleCAyNDg5MTFhOTYy
Y2EwZjkwNzViZjNiZjk3MDRiOTZlZTA1OGFhZjBjLi5kZDRkYjc4Y2ZjMjYwZTJkYjMxOGQyNGIx
MGY3MTUyZWQ0MjEwNTllIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yX3VuaXR0ZXN0LnB5
CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L2pzb25fcmVzdWx0c19nZW5lcmF0b3JfdW5pdHRlc3QucHkKQEAgLTE1Niw4ICsxNTYsNyBAQCBj
bGFzcyBKU09OR2VuZXJhdG9yVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIGlmIGZh
aWxlZF9jb3VudF9tYXA6CiAgICAgICAgICAgICB0ZXN0cyA9IGJ1aWxkaW5mb1tKUkcuVEVTVFNd
CiAgICAgICAgICAgICBmb3IgdGVzdF9uYW1lIGluIGZhaWxlZF9jb3VudF9tYXAuaXRlcmtleXMo
KToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodGVzdF9uYW1lIGluIHRlc3RzKQot
ICAgICAgICAgICAgICAgIHRlc3QgPSB0ZXN0c1t0ZXN0X25hbWVdCisgICAgICAgICAgICAgICAg
dGVzdCA9IHNlbGYuX2ZpbmRfdGVzdF9pbl90cmllKHRlc3RfbmFtZSwgdGVzdHMpCiAKICAgICAg
ICAgICAgICAgICBmYWlsZWQgPSAwCiAgICAgICAgICAgICAgICAgZm9yIHJlc3VsdCBpbiB0ZXN0
W0pSRy5SRVNVTFRTXToKQEAgLTE3NCw2ICsxNzMsMTQgQEAgY2xhc3MgSlNPTkdlbmVyYXRvclRl
c3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBpZiBmaXhhYmxlX2NvdW50OgogICAgICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdW0oYnVpbGRpbmZvW0pSRy5GSVhBQkxFX0NPVU5UXSks
IGZpeGFibGVfY291bnQpCiAKKyAgICBkZWYgX2ZpbmRfdGVzdF9pbl90cmllKHNlbGYsIHBhdGgs
IHRyaWUpOgorICAgICAgICBzdWJfdHJpZSA9IHRyaWUKKyAgICAgICAgbm9kZXMgPSBwYXRoLnNw
bGl0KCIvIikKKyAgICAgICAgZm9yIG5vZGUgaW4gbm9kZXM6CisgICAgICAgICAgICBzZWxmLmFz
c2VydFRydWUobm9kZSBpbiBzdWJfdHJpZSkKKyAgICAgICAgICAgIHN1Yl90cmllID0gc3ViX3Ry
aWVbbm9kZV0KKyAgICAgICAgcmV0dXJuIHN1Yl90cmllCisKICAgICBkZWYgdGVzdF9qc29uX2dl
bmVyYXRpb24oc2VsZik6CiAgICAgICAgIHNlbGYuX3Rlc3RfanNvbl9nZW5lcmF0aW9uKFtdLCBb
XSkKICAgICAgICAgc2VsZi5fdGVzdF9qc29uX2dlbmVyYXRpb24oWydBMScsICdCMSddLCBbXSkK
QEAgLTE5Nyw2ICsyMDQsMTAgQEAgY2xhc3MgSlNPTkdlbmVyYXRvclRlc3QodW5pdHRlc3QuVGVz
dENhc2UpOgogICAgICAgICAgICAgWydGTEFLWV9CJywgJ0RJU0FCTEVEX0MnLCAnRkFJTFNfRCdd
LAogICAgICAgICAgICAgWydBJywgJ0ZMQUtZX0UnXSkKIAorICAgIGRlZiB0ZXN0X2hpZXJhcmNo
aWNhbF9qc29uX2dlbmVyYXRpb24oc2VsZik6CisgICAgICAgICMgRklYTUUoYWJveGhhbGwpOiBy
ZS13b3JrIHRlc3RzIHRvIGJlIG1vcmUgY29tcHJlaGVuc2libGUgYW5kIGNvbXByZWhlbnNpdmUu
CisgICAgICAgIHNlbGYuX3Rlc3RfanNvbl9nZW5lcmF0aW9uKFsnZm9vL0EnXSwgWydmb28vQics
ICdiYXIvQyddKQorCiAgICAgZGVmIHRlc3RfdGVzdF90aW1pbmdzX3RyaWUoc2VsZik6CiAgICAg
ICAgIHRlc3RfcG9ydCA9IHRlc3QuVGVzdFBvcnQoKQogICAgICAgICBpbmRpdmlkdWFsX3Rlc3Rf
dGltaW5ncyA9IFtdCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94372</attachid>
            <date>2011-05-22 23:28:10 -0700</date>
            <delta_ts>2011-05-22 23:30:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60869-20110523162808.patch</filename>
            <type>text/plain</type>
            <size>10580</size>
            <attacher name="Alice Boxhall">aboxhall</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODY5MjIKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA1MjlhMjIxODY5ZmU5OGIwMWUxMjQ2NDhjZGEzMGZlMTI3
M2MxMTMyLi5iOWU0ODU4ZTA0MTcyYjBjMjZlMDI0NDMzYTc5NDRkZTBhNjVjNzMwIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMTEtMDUtMTUgIEFsaWNlIEJveGhhbGwgIDxhYm94aGFsbEBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ29udmVydCBq
c29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5IHRvIG91dHB1dCB2ZXJzaW9uIDQgSlNPTi4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwODY5CisKKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xh
eW91dF9yZXN1bHRzX2dlbmVyYXRvci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5OgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25f
cmVzdWx0c19nZW5lcmF0b3JfdW5pdHRlc3QucHk6CisKIDIwMTEtMDUtMTkgIERtaXRyeSBMb21v
diAgPGRzbG9tb3ZAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJvYmVu
LgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0
X3BhY2thZ2UvanNvbl9sYXlvdXRfcmVzdWx0c19nZW5lcmF0b3IucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xheW91dF9yZXN1bHRz
X2dlbmVyYXRvci5weQppbmRleCBkYmIxNmMwM2UyNjMzMzUwOTQxMjBlY2VhZThjNzA2N2Q4ZDc4
MGYxLi5lYzI4MTY4ZjY2NjIwMGFiYWViNTU4ZDg4OTYyMzE3MjU5YjY4ZTA4IDEwMDY0NAotLS0g
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29u
X2xheW91dF9yZXN1bHRzX2dlbmVyYXRvci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xheW91dF9yZXN1bHRzX2dlbmVyYXRv
ci5weQpAQCAtMTMwLDMwICsxMzAsNiBAQCBjbGFzcyBKU09OTGF5b3V0UmVzdWx0c0dlbmVyYXRv
cihqc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLkpTT05SZXN1bHRzR2VuZXJhdG9yQmFzZQogICAgICAg
ICByZXR1cm4gc2VsZi5fZ2V0X21vZGlmaWVyX2NoYXIodGVzdF9uYW1lKQogCiAgICAgIyBvdmVy
cmlkZQotICAgIGRlZiBfY29udmVydF9qc29uX3RvX2N1cnJlbnRfdmVyc2lvbihzZWxmLCByZXN1
bHRzX2pzb24pOgotICAgICAgICBhcmNoaXZlX3ZlcnNpb24gPSBOb25lCi0gICAgICAgIGlmIHNl
bGYuVkVSU0lPTl9LRVkgaW4gcmVzdWx0c19qc29uOgotICAgICAgICAgICAgYXJjaGl2ZV92ZXJz
aW9uID0gcmVzdWx0c19qc29uW3NlbGYuVkVSU0lPTl9LRVldCi0KLSAgICAgICAgc3VwZXIoSlNP
TkxheW91dFJlc3VsdHNHZW5lcmF0b3IsCi0gICAgICAgICAgICAgIHNlbGYpLl9jb252ZXJ0X2pz
b25fdG9fY3VycmVudF92ZXJzaW9uKHJlc3VsdHNfanNvbikKLQotICAgICAgICAjIHZlcnNpb24g
Mi0+MwotICAgICAgICBpZiBhcmNoaXZlX3ZlcnNpb24gPT0gMjoKLSAgICAgICAgICAgIGZvciBy
ZXN1bHRzX2Zvcl9idWlsZGVyIGluIHJlc3VsdHNfanNvbi5pdGVydmFsdWVzKCk6Ci0gICAgICAg
ICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICB0ZXN0X3Jlc3VsdHMgPSByZXN1bHRz
X2Zvcl9idWlsZGVyW3NlbGYuVEVTVFNdCi0gICAgICAgICAgICAgICAgZXhjZXB0OgotICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZQotCi0gICAgICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0X3Jl
c3VsdHM6Ci0gICAgICAgICAgICAgICAgIyBNYWtlIHN1cmUgYWxsIHBhdGhzIGFyZSByZWxhdGl2
ZQotICAgICAgICAgICAgICAgIHRlc3RfcGF0aCA9IHNlbGYuX2dldF9wYXRoX3JlbGF0aXZlX3Rv
X2xheW91dF90ZXN0X3Jvb3QodGVzdCkKLSAgICAgICAgICAgICAgICBpZiB0ZXN0X3BhdGggIT0g
dGVzdDoKLSAgICAgICAgICAgICAgICAgICAgdGVzdF9yZXN1bHRzW3Rlc3RfcGF0aF0gPSB0ZXN0
X3Jlc3VsdHNbdGVzdF0KLSAgICAgICAgICAgICAgICAgICAgZGVsIHRlc3RfcmVzdWx0c1t0ZXN0
XQotCi0gICAgIyBvdmVycmlkZQogICAgIGRlZiBfaW5zZXJ0X2ZhaWx1cmVfc3VtbWFyaWVzKHNl
bGYsIHJlc3VsdHNfZm9yX2J1aWxkZXIpOgogICAgICAgICBzdW1tYXJ5ID0gc2VsZi5fcmVzdWx0
X3N1bW1hcnkKIApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5weSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5l
cmF0b3IucHkKaW5kZXggODJkMjFlNjJmNjRjZjdjMTQ5ZTZjMDEzOTg3ODA1MzlmMTNmMzAyYi4u
NWQwOGY2ZmUyNDg4MGQ4NWVjZTI0OTNiMzkyYzcyOTc5NGZlNDlhNiAxMDA2NDQKLS0tIGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1
bHRzX2dlbmVyYXRvci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CkBAIC02Nyw2ICs2Nyw0
OSBAQCBkZWYgd3JpdGVfanNvbihmaWxlc3lzdGVtLCBqc29uX29iamVjdCwgZmlsZV9wYXRoKToK
ICAgICBqc29uX3N0cmluZyA9IF9KU09OX1BSRUZJWCArIGpzb25fZGF0YSArIF9KU09OX1NVRkZJ
WAogICAgIGZpbGVzeXN0ZW0ud3JpdGVfdGV4dF9maWxlKGZpbGVfcGF0aCwganNvbl9zdHJpbmcp
CiAKKworZGVmIGNvbnZlcnRfdHJpZV90b19mbGF0X3BhdGhzKHRyaWUsIHByZWZpeD1Ob25lKToK
KyAgICAiIiJGbGF0dGVucyBhIHRyaWUgZGlyZWN0b3J5IHN0cnVjdHVyZSBpbnRvIGEgZmxhdCBz
dHJ1Y3R1cmUuCisKKyAgICBBcmdzOgorICAgICAgICB0cmllOiB0cmllIHN0cnVjdHVyZS4KKyAg
ICAgICAgcHJlZml4OiBhbGVhZHktY29tcHV0ZWQgcGF0aCB0byBwcmVwZW5kIHRvIHRoZSBldmVu
dHVhbCBwYXRoLCBpZiBhbnkuCisKKyAgICBSZXR1cm5zOgorICAgICAgICBUaGUgZmxhdHRlbmVk
IGRpcmVjdG9yeSBzdHJ1Y3R1cmUuCisgICAgIiIiCisgICAgcmVzdWx0ID0ge30KKyAgICBmb3Ig
bmFtZSwgZGF0YSBpbiB0cmllLml0ZXJpdGVtcygpOgorICAgICAgICBpZiBwcmVmaXg6CisgICAg
ICAgICAgICBmdWxsbmFtZSA9IHByZWZpeCArICIvIiArIG5hbWUKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIGZ1bGxuYW1lID0gbmFtZQorCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGRh
dGEsIGRpY3QpIG9yIG5vdCBsZW4oZGF0YSkgb3IgInJlc3VsdHMiIGluIGRhdGE6CisgICAgICAg
ICAgICByZXN1bHRbZnVsbG5hbWVdID0gZGF0YQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
cmVzdWx0LnVwZGF0ZShjb252ZXJ0X3RyaWVfdG9fZmxhdF9wYXRocyhkYXRhLCBmdWxsbmFtZSkp
CisKKyAgICByZXR1cm4gcmVzdWx0CisKKworZGVmIGFkZF9wYXRoX3RvX3RyaWUocGF0aCwgdmFs
dWUsIHRyaWUpOgorICAgICIiIkluc2VydHMgYSBzaW5nbGUgZmxhdCBwYXRoIGtleSBhbmQgdmFs
dWUgaW50byBhIHRyaWUgc3RydWN0dXJlLgorCisgICAgQXJnczoKKyAgICAgICAgcGF0aDogdGhl
IHBhdGggdG8gcGFyc2UuCisgICAgICAgIHZhbHVlOiB0aGUgZGF0YSB2YWx1ZSB0byBpbnNlcnQg
aW50byB0aGUgdHJpZS4KKyAgICAgICAgdHJpZTogdGhlIHRyaWUgaW50byB3aGljaCB0byBpbnNl
cnQgdGhlIHBhdGggYW5kIHZhbHVlLgorICAgICIiIgorICAgIGlmIG5vdCAiLyIgaW4gcGF0aDoK
KyAgICAgICAgdHJpZVtwYXRoXSA9IHZhbHVlCisgICAgICAgIHJldHVybgorCisgICAgZGlyZWN0
b3J5LCBzbGFzaCwgcmVzdCA9IHBhdGgucGFydGl0aW9uKCIvIikKKyAgICBpZiBub3QgZGlyZWN0
b3J5IGluIHRyaWU6CisgICAgICAgIHRyaWVbZGlyZWN0b3J5XSA9IHt9CisgICAgYWRkX3BhdGhf
dG9fdHJpZShyZXN0LCB2YWx1ZSwgdHJpZVtkaXJlY3RvcnldKQorCiBkZWYgdGVzdF90aW1pbmdz
X3RyaWUocG9ydCwgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpOgogICAgICIiIkJyZWFrcyBhIGZp
bGVuYW1lIGludG8gY2h1bmtzIGJ5IGRpcmVjdG9yeSBhbmQgcHV0cyB0aGUgdGVzdCB0aW1lIGFz
IGEgdmFsdWUgaW4gdGhlIGxvd2VzdCBwYXJ0LCBlLmcuCiAgICAgZm9vL2Jhci9iYXouaHRtbDog
MW1zCkBAIC04OCwxNiArMTMxLDggQEAgZGVmIHRlc3RfdGltaW5nc190cmllKHBvcnQsIGluZGl2
aWR1YWxfdGVzdF90aW1pbmdzKToKICAgICAgICAgICAgICMgRklYTUU6IEhhbmRsZSB0aGlzIGJl
dHRlci4gTm9uLWxheW91dCB0ZXN0cyBzaG91bGRuJ3QgYmUgcmVsYXRpdml6ZWQuCiAgICAgICAg
ICAgICB0ZXN0ID0gdGVzdF9yZXN1bHQuZmlsZW5hbWUKIAotICAgICAgICBwYXJ0cyA9IHRlc3Qu
c3BsaXQoJy8nKQotICAgICAgICBjdXJyZW50X21hcCA9IHRyaWUKLSAgICAgICAgZm9yIGksIHBh
cnQgaW4gZW51bWVyYXRlKHBhcnRzKToKLSAgICAgICAgICAgIGlmIGkgPT0gKGxlbihwYXJ0cykg
LSAxKToKLSAgICAgICAgICAgICAgICBjdXJyZW50X21hcFtwYXJ0XSA9IGludCgxMDAwICogdGVz
dF9yZXN1bHQudGVzdF9ydW5fdGltZSkKLSAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBh
ZGRfcGF0aF90b190cmllKHRlc3QsIGludCgxMDAwICogdGVzdF9yZXN1bHQudGVzdF9ydW5fdGlt
ZSksIHRyaWUpCiAKLSAgICAgICAgICAgIGlmIHBhcnQgbm90IGluIGN1cnJlbnRfbWFwOgotICAg
ICAgICAgICAgICAgIGN1cnJlbnRfbWFwW3BhcnRdID0ge30KLSAgICAgICAgICAgIGN1cnJlbnRf
bWFwID0gY3VycmVudF9tYXBbcGFydF0KICAgICByZXR1cm4gdHJpZQogCiAjIEZJWE1FOiBXZSBh
bHJlYWR5IGhhdmUgYSBUZXN0UmVzdWx0IGNsYXNzIGluIHRlc3RfcmVzdWx0cy5weQpAQCAtMTUz
LDcgKzE4OCw3IEBAIGNsYXNzIEpTT05SZXN1bHRzR2VuZXJhdG9yQmFzZShvYmplY3QpOgogICAg
ICAgICAgICAgICAgICAgICAgICAgVGVzdFJlc3VsdC5GQUlMUzogRkFJTF9SRVNVTFQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBUZXN0UmVzdWx0LkZMQUtZOiBGTEFLWV9SRVNVTFR9CiAKLSAg
ICBWRVJTSU9OID0gMworICAgIFZFUlNJT04gPSA0CiAgICAgVkVSU0lPTl9LRVkgPSAidmVyc2lv
biIKICAgICBSRVNVTFRTID0gInJlc3VsdHMiCiAgICAgVElNRVMgPSAidGltZXMiCkBAIC0yNzEs
NyArMzA2LDggQEAgY2xhc3MgSlNPTlJlc3VsdHNHZW5lcmF0b3JCYXNlKG9iamVjdCk6CiAgICAg
ICAgICMgVXBkYXRlIHRoZSBhbGwgZmFpbGluZyB0ZXN0cyB3aXRoIHJlc3VsdCB0eXBlIGFuZCB0
aW1lLgogICAgICAgICB0ZXN0cyA9IHJlc3VsdHNfZm9yX2J1aWxkZXJbc2VsZi5URVNUU10KICAg
ICAgICAgYWxsX2ZhaWxpbmdfdGVzdHMgPSBzZWxmLl9nZXRfZmFpbGVkX3Rlc3RfbmFtZXMoKQot
ICAgICAgICBhbGxfZmFpbGluZ190ZXN0cy51cGRhdGUodGVzdHMuaXRlcmtleXMoKSkKKyAgICAg
ICAgYWxsX2ZhaWxpbmdfdGVzdHMudXBkYXRlKGNvbnZlcnRfdHJpZV90b19mbGF0X3BhdGhzKHRl
c3RzKSkKKwogICAgICAgICBmb3IgdGVzdCBpbiBhbGxfZmFpbGluZ190ZXN0czoKICAgICAgICAg
ICAgIHNlbGYuX2luc2VydF90ZXN0X3RpbWVfYW5kX3Jlc3VsdCh0ZXN0LCB0ZXN0cykKIApAQCAt
NTEyLDYgKzU0OCw3IEBAIGNsYXNzIEpTT05SZXN1bHRzR2VuZXJhdG9yQmFzZShvYmplY3QpOgog
ICAgICAgICAgICAgaW50KHRpbWUudGltZSgpKSwKICAgICAgICAgICAgIHNlbGYuVElNRSkKIAor
CiAgICAgZGVmIF9pbnNlcnRfdGVzdF90aW1lX2FuZF9yZXN1bHQoc2VsZiwgdGVzdF9uYW1lLCB0
ZXN0cyk6CiAgICAgICAgICIiIiBJbnNlcnQgYSB0ZXN0IGl0ZW0gd2l0aCBpdHMgcmVzdWx0cyB0
byB0aGUgZ2l2ZW4gdGVzdHMgZGljdGlvbmFyeS4KIApAQCAtNTIyLDEwICs1NTksMTUgQEAgY2xh
c3MgSlNPTlJlc3VsdHNHZW5lcmF0b3JCYXNlKG9iamVjdCk6CiAgICAgICAgIHJlc3VsdCA9IHNl
bGYuX2dldF9yZXN1bHRfY2hhcih0ZXN0X25hbWUpCiAgICAgICAgIHRpbWUgPSBzZWxmLl9nZXRf
dGVzdF90aW1pbmcodGVzdF9uYW1lKQogCi0gICAgICAgIGlmIHRlc3RfbmFtZSBub3QgaW4gdGVz
dHM6Ci0gICAgICAgICAgICB0ZXN0c1t0ZXN0X25hbWVdID0gc2VsZi5fY3JlYXRlX3Jlc3VsdHNf
YW5kX3RpbWVzX2pzb24oKQorICAgICAgICB0aGlzVGVzdCA9IHRlc3RzCisgICAgICAgIGZvciBz
ZWdtZW50IGluIHRlc3RfbmFtZS5zcGxpdCgiLyIpOgorICAgICAgICAgICAgaWYgc2VnbWVudCBu
b3QgaW4gdGhpc1Rlc3Q6CisgICAgICAgICAgICAgICAgdGhpc1Rlc3Rbc2VnbWVudF0gPSB7fQor
ICAgICAgICAgICAgdGhpc1Rlc3QgPSB0aGlzVGVzdFtzZWdtZW50XQorCisgICAgICAgIGlmIG5v
dCBsZW4odGhpc1Rlc3QpOgorICAgICAgICAgICAgc2VsZi5fcG9wdWxhdGVfcmVzdWx0c19hbmRf
dGltZXNfanNvbih0aGlzVGVzdCkKIAotICAgICAgICB0aGlzVGVzdCA9IHRlc3RzW3Rlc3RfbmFt
ZV0KICAgICAgICAgaWYgc2VsZi5SRVNVTFRTIGluIHRoaXNUZXN0OgogICAgICAgICAgICAgc2Vs
Zi5faW5zZXJ0X2l0ZW1fcnVuX2xlbmd0aF9lbmNvZGVkKHJlc3VsdCwgdGhpc1Rlc3Rbc2VsZi5S
RVNVTFRTXSkKICAgICAgICAgZWxzZToKQEAgLTU0MCwxNCArNTgyLDMzIEBAIGNsYXNzIEpTT05S
ZXN1bHRzR2VuZXJhdG9yQmFzZShvYmplY3QpOgogICAgICAgICAiIiJJZiB0aGUgSlNPTiBkb2Vz
IG5vdCBtYXRjaCB0aGUgY3VycmVudCB2ZXJzaW9uLCBjb252ZXJ0cyBpdCB0byB0aGUKICAgICAg
ICAgY3VycmVudCB2ZXJzaW9uIGFuZCBhZGRzIGluIHRoZSBuZXcgdmVyc2lvbiBudW1iZXIuCiAg
ICAgICAgICIiIgotICAgICAgICBpZiAoc2VsZi5WRVJTSU9OX0tFWSBpbiByZXN1bHRzX2pzb24g
YW5kCi0gICAgICAgICAgICByZXN1bHRzX2pzb25bc2VsZi5WRVJTSU9OX0tFWV0gPT0gc2VsZi5W
RVJTSU9OKToKLSAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBzZWxmLlZFUlNJT05fS0VZ
IGluIHJlc3VsdHNfanNvbjoKKyAgICAgICAgICAgIGFyY2hpdmVfdmVyc2lvbiA9IHJlc3VsdHNf
anNvbltzZWxmLlZFUlNJT05fS0VZXQorICAgICAgICAgICAgaWYgYXJjaGl2ZV92ZXJzaW9uID09
IHNlbGYuVkVSU0lPTjoKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIGFyY2hpdmVfdmVyc2lvbiA9IDMKKworICAgICAgICAjIHZlcnNpb24gMy0+NAor
ICAgICAgICBpZiBhcmNoaXZlX3ZlcnNpb24gPT0gMzoKKyAgICAgICAgICAgIG51bV9yZXN1bHRz
ID0gbGVuKHJlc3VsdHNfanNvbi52YWx1ZXMoKSkKKyAgICAgICAgICAgIGZvciBidWlsZGVyLCBy
ZXN1bHRzIGluIHJlc3VsdHNfanNvbi5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICBpZiBu
b3Qgc2VsZi5URVNUUyBpbiByZXN1bHRzOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQor
CisgICAgICAgICAgICAgICAgdGVzdF9yZXN1bHRzID0gcmVzdWx0c1tzZWxmLlRFU1RTXQorICAg
ICAgICAgICAgICAgIHRlc3RfcmVzdWx0c190cmllID0ge30KKyAgICAgICAgICAgICAgICBmb3Ig
dGVzdCBpbiB0ZXN0X3Jlc3VsdHMuaXRlcmtleXMoKToKKyAgICAgICAgICAgICAgICAgICAgdGVz
dF9wYXRoID0gc2VsZi5fZ2V0X3BhdGhfcmVsYXRpdmVfdG9fbGF5b3V0X3Rlc3Rfcm9vdCh0ZXN0
KQorICAgICAgICAgICAgICAgICAgICBzaW5nbGVfdGVzdF9yZXN1bHQgPSB0ZXN0X3Jlc3VsdHNb
dGVzdF0KKyAgICAgICAgICAgICAgICAgICAgYWRkX3BhdGhfdG9fdHJpZSh0ZXN0X3BhdGgsIHNp
bmdsZV90ZXN0X3Jlc3VsdCwgdGVzdF9yZXN1bHRzX3RyaWUpCisKKyAgICAgICAgICAgICAgICBy
ZXN1bHRzW3NlbGYuVEVTVFNdID0gdGVzdF9yZXN1bHRzX3RyaWUKIAogICAgICAgICByZXN1bHRz
X2pzb25bc2VsZi5WRVJTSU9OX0tFWV0gPSBzZWxmLlZFUlNJT04KKyAgICAgICAgX2xvZy5pbmZv
KCJDb252ZXJ0ZWQgSlNPTiB0byBjdXJyZW50IHZlcnNpb24gKCVkKS4iICUgc2VsZi5WRVJTSU9O
KQogCi0gICAgZGVmIF9jcmVhdGVfcmVzdWx0c19hbmRfdGltZXNfanNvbihzZWxmKToKLSAgICAg
ICAgcmVzdWx0c19hbmRfdGltZXMgPSB7fQorICAgIGRlZiBfcG9wdWxhdGVfcmVzdWx0c19hbmRf
dGltZXNfanNvbihzZWxmLCByZXN1bHRzX2FuZF90aW1lcyk6CiAgICAgICAgIHJlc3VsdHNfYW5k
X3RpbWVzW3NlbGYuUkVTVUxUU10gPSBbXQogICAgICAgICByZXN1bHRzX2FuZF90aW1lc1tzZWxm
LlRJTUVTXSA9IFtdCiAgICAgICAgIHJldHVybiByZXN1bHRzX2FuZF90aW1lcwpkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNv
bl9yZXN1bHRzX2dlbmVyYXRvcl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5lcmF0b3JfdW5pdHRl
c3QucHkKaW5kZXggMjQ4OTExYTk2MmNhMGY5MDc1YmYzYmY5NzA0Yjk2ZWUwNThhYWYwYy4uZGQ0
ZGI3OGNmYzI2MGUyZGIzMThkMjRiMTBmNzE1MmVkNDIxMDU5ZSAxMDA2NDQKLS0tIGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRz
X2dlbmVyYXRvcl91bml0dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yX3VuaXR0ZXN0LnB5
CkBAIC0xNTYsOCArMTU2LDcgQEAgY2xhc3MgSlNPTkdlbmVyYXRvclRlc3QodW5pdHRlc3QuVGVz
dENhc2UpOgogICAgICAgICBpZiBmYWlsZWRfY291bnRfbWFwOgogICAgICAgICAgICAgdGVzdHMg
PSBidWlsZGluZm9bSlJHLlRFU1RTXQogICAgICAgICAgICAgZm9yIHRlc3RfbmFtZSBpbiBmYWls
ZWRfY291bnRfbWFwLml0ZXJrZXlzKCk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KHRlc3RfbmFtZSBpbiB0ZXN0cykKLSAgICAgICAgICAgICAgICB0ZXN0ID0gdGVzdHNbdGVzdF9u
YW1lXQorICAgICAgICAgICAgICAgIHRlc3QgPSBzZWxmLl9maW5kX3Rlc3RfaW5fdHJpZSh0ZXN0
X25hbWUsIHRlc3RzKQogCiAgICAgICAgICAgICAgICAgZmFpbGVkID0gMAogICAgICAgICAgICAg
ICAgIGZvciByZXN1bHQgaW4gdGVzdFtKUkcuUkVTVUxUU106CkBAIC0xNzQsNiArMTczLDE0IEBA
IGNsYXNzIEpTT05HZW5lcmF0b3JUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgaWYg
Zml4YWJsZV9jb3VudDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VtKGJ1aWxkaW5m
b1tKUkcuRklYQUJMRV9DT1VOVF0pLCBmaXhhYmxlX2NvdW50KQogCisgICAgZGVmIF9maW5kX3Rl
c3RfaW5fdHJpZShzZWxmLCBwYXRoLCB0cmllKToKKyAgICAgICAgc3ViX3RyaWUgPSB0cmllCisg
ICAgICAgIG5vZGVzID0gcGF0aC5zcGxpdCgiLyIpCisgICAgICAgIGZvciBub2RlIGluIG5vZGVz
OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vZGUgaW4gc3ViX3RyaWUpCisgICAgICAg
ICAgICBzdWJfdHJpZSA9IHN1Yl90cmllW25vZGVdCisgICAgICAgIHJldHVybiBzdWJfdHJpZQor
CiAgICAgZGVmIHRlc3RfanNvbl9nZW5lcmF0aW9uKHNlbGYpOgogICAgICAgICBzZWxmLl90ZXN0
X2pzb25fZ2VuZXJhdGlvbihbXSwgW10pCiAgICAgICAgIHNlbGYuX3Rlc3RfanNvbl9nZW5lcmF0
aW9uKFsnQTEnLCAnQjEnXSwgW10pCkBAIC0xOTcsNiArMjA0LDEwIEBAIGNsYXNzIEpTT05HZW5l
cmF0b3JUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgICAgIFsnRkxBS1lfQicsICdE
SVNBQkxFRF9DJywgJ0ZBSUxTX0QnXSwKICAgICAgICAgICAgIFsnQScsICdGTEFLWV9FJ10pCiAK
KyAgICBkZWYgdGVzdF9oaWVyYXJjaGljYWxfanNvbl9nZW5lcmF0aW9uKHNlbGYpOgorICAgICAg
ICAjIEZJWE1FKGFib3hoYWxsKTogcmUtd29yayB0ZXN0cyB0byBiZSBtb3JlIGNvbXByZWhlbnNp
YmxlIGFuZCBjb21wcmVoZW5zaXZlLgorICAgICAgICBzZWxmLl90ZXN0X2pzb25fZ2VuZXJhdGlv
bihbJ2Zvby9BJ10sIFsnZm9vL0InLCAnYmFyL0MnXSkKKwogICAgIGRlZiB0ZXN0X3Rlc3RfdGlt
aW5nc190cmllKHNlbGYpOgogICAgICAgICB0ZXN0X3BvcnQgPSB0ZXN0LlRlc3RQb3J0KCkKICAg
ICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MgPSBbXQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94374</attachid>
            <date>2011-05-22 23:30:38 -0700</date>
            <delta_ts>2011-06-19 22:42:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60869-20110523163036.patch</filename>
            <type>text/plain</type>
            <size>10503</size>
            <attacher name="Alice Boxhall">aboxhall</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODY5MjIKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA1MjlhMjIxODY5ZmU5OGIwMWUxMjQ2NDhjZGEzMGZlMTI3
M2MxMTMyLi5iOWU0ODU4ZTA0MTcyYjBjMjZlMDI0NDMzYTc5NDRkZTBhNjVjNzMwIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMTEtMDUtMTUgIEFsaWNlIEJveGhhbGwgIDxhYm94aGFsbEBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ29udmVydCBq
c29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5IHRvIG91dHB1dCB2ZXJzaW9uIDQgSlNPTi4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwODY5CisKKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xh
eW91dF9yZXN1bHRzX2dlbmVyYXRvci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5OgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25f
cmVzdWx0c19nZW5lcmF0b3JfdW5pdHRlc3QucHk6CisKIDIwMTEtMDUtMTkgIERtaXRyeSBMb21v
diAgPGRzbG9tb3ZAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJvYmVu
LgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0
X3BhY2thZ2UvanNvbl9sYXlvdXRfcmVzdWx0c19nZW5lcmF0b3IucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xheW91dF9yZXN1bHRz
X2dlbmVyYXRvci5weQppbmRleCBkYmIxNmMwM2UyNjMzMzUwOTQxMjBlY2VhZThjNzA2N2Q4ZDc4
MGYxLi5lYzI4MTY4ZjY2NjIwMGFiYWViNTU4ZDg4OTYyMzE3MjU5YjY4ZTA4IDEwMDY0NAotLS0g
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29u
X2xheW91dF9yZXN1bHRzX2dlbmVyYXRvci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xheW91dF9yZXN1bHRzX2dlbmVyYXRv
ci5weQpAQCAtMTMwLDMwICsxMzAsNiBAQCBjbGFzcyBKU09OTGF5b3V0UmVzdWx0c0dlbmVyYXRv
cihqc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLkpTT05SZXN1bHRzR2VuZXJhdG9yQmFzZQogICAgICAg
ICByZXR1cm4gc2VsZi5fZ2V0X21vZGlmaWVyX2NoYXIodGVzdF9uYW1lKQogCiAgICAgIyBvdmVy
cmlkZQotICAgIGRlZiBfY29udmVydF9qc29uX3RvX2N1cnJlbnRfdmVyc2lvbihzZWxmLCByZXN1
bHRzX2pzb24pOgotICAgICAgICBhcmNoaXZlX3ZlcnNpb24gPSBOb25lCi0gICAgICAgIGlmIHNl
bGYuVkVSU0lPTl9LRVkgaW4gcmVzdWx0c19qc29uOgotICAgICAgICAgICAgYXJjaGl2ZV92ZXJz
aW9uID0gcmVzdWx0c19qc29uW3NlbGYuVkVSU0lPTl9LRVldCi0KLSAgICAgICAgc3VwZXIoSlNP
TkxheW91dFJlc3VsdHNHZW5lcmF0b3IsCi0gICAgICAgICAgICAgIHNlbGYpLl9jb252ZXJ0X2pz
b25fdG9fY3VycmVudF92ZXJzaW9uKHJlc3VsdHNfanNvbikKLQotICAgICAgICAjIHZlcnNpb24g
Mi0+MwotICAgICAgICBpZiBhcmNoaXZlX3ZlcnNpb24gPT0gMjoKLSAgICAgICAgICAgIGZvciBy
ZXN1bHRzX2Zvcl9idWlsZGVyIGluIHJlc3VsdHNfanNvbi5pdGVydmFsdWVzKCk6Ci0gICAgICAg
ICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICB0ZXN0X3Jlc3VsdHMgPSByZXN1bHRz
X2Zvcl9idWlsZGVyW3NlbGYuVEVTVFNdCi0gICAgICAgICAgICAgICAgZXhjZXB0OgotICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZQotCi0gICAgICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0X3Jl
c3VsdHM6Ci0gICAgICAgICAgICAgICAgIyBNYWtlIHN1cmUgYWxsIHBhdGhzIGFyZSByZWxhdGl2
ZQotICAgICAgICAgICAgICAgIHRlc3RfcGF0aCA9IHNlbGYuX2dldF9wYXRoX3JlbGF0aXZlX3Rv
X2xheW91dF90ZXN0X3Jvb3QodGVzdCkKLSAgICAgICAgICAgICAgICBpZiB0ZXN0X3BhdGggIT0g
dGVzdDoKLSAgICAgICAgICAgICAgICAgICAgdGVzdF9yZXN1bHRzW3Rlc3RfcGF0aF0gPSB0ZXN0
X3Jlc3VsdHNbdGVzdF0KLSAgICAgICAgICAgICAgICAgICAgZGVsIHRlc3RfcmVzdWx0c1t0ZXN0
XQotCi0gICAgIyBvdmVycmlkZQogICAgIGRlZiBfaW5zZXJ0X2ZhaWx1cmVfc3VtbWFyaWVzKHNl
bGYsIHJlc3VsdHNfZm9yX2J1aWxkZXIpOgogICAgICAgICBzdW1tYXJ5ID0gc2VsZi5fcmVzdWx0
X3N1bW1hcnkKIApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5weSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5l
cmF0b3IucHkKaW5kZXggODJkMjFlNjJmNjRjZjdjMTQ5ZTZjMDEzOTg3ODA1MzlmMTNmMzAyYi4u
ZGNkYjcwNGYzODNiN2UzNThmNzhlMmNiZDEwZTM3YzhlYTNhYjI3NiAxMDA2NDQKLS0tIGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1
bHRzX2dlbmVyYXRvci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CkBAIC02Nyw2ICs2Nyw0
OSBAQCBkZWYgd3JpdGVfanNvbihmaWxlc3lzdGVtLCBqc29uX29iamVjdCwgZmlsZV9wYXRoKToK
ICAgICBqc29uX3N0cmluZyA9IF9KU09OX1BSRUZJWCArIGpzb25fZGF0YSArIF9KU09OX1NVRkZJ
WAogICAgIGZpbGVzeXN0ZW0ud3JpdGVfdGV4dF9maWxlKGZpbGVfcGF0aCwganNvbl9zdHJpbmcp
CiAKKworZGVmIGNvbnZlcnRfdHJpZV90b19mbGF0X3BhdGhzKHRyaWUsIHByZWZpeD1Ob25lKToK
KyAgICAiIiJGbGF0dGVucyBhIHRyaWUgZGlyZWN0b3J5IHN0cnVjdHVyZSBpbnRvIGEgZmxhdCBz
dHJ1Y3R1cmUuCisKKyAgICBBcmdzOgorICAgICAgICB0cmllOiB0cmllIHN0cnVjdHVyZS4KKyAg
ICAgICAgcHJlZml4OiBhbGVhZHktY29tcHV0ZWQgcGF0aCB0byBwcmVwZW5kIHRvIHRoZSBldmVu
dHVhbCBwYXRoLCBpZiBhbnkuCisKKyAgICBSZXR1cm5zOgorICAgICAgICBUaGUgZmxhdHRlbmVk
IGRpcmVjdG9yeSBzdHJ1Y3R1cmUuCisgICAgIiIiCisgICAgcmVzdWx0ID0ge30KKyAgICBmb3Ig
bmFtZSwgZGF0YSBpbiB0cmllLml0ZXJpdGVtcygpOgorICAgICAgICBpZiBwcmVmaXg6CisgICAg
ICAgICAgICBmdWxsbmFtZSA9IHByZWZpeCArICIvIiArIG5hbWUKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIGZ1bGxuYW1lID0gbmFtZQorCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGRh
dGEsIGRpY3QpIG9yIG5vdCBsZW4oZGF0YSkgb3IgInJlc3VsdHMiIGluIGRhdGE6CisgICAgICAg
ICAgICByZXN1bHRbZnVsbG5hbWVdID0gZGF0YQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
cmVzdWx0LnVwZGF0ZShjb252ZXJ0X3RyaWVfdG9fZmxhdF9wYXRocyhkYXRhLCBmdWxsbmFtZSkp
CisKKyAgICByZXR1cm4gcmVzdWx0CisKKworZGVmIGFkZF9wYXRoX3RvX3RyaWUocGF0aCwgdmFs
dWUsIHRyaWUpOgorICAgICIiIkluc2VydHMgYSBzaW5nbGUgZmxhdCBwYXRoIGtleSBhbmQgdmFs
dWUgaW50byBhIHRyaWUgc3RydWN0dXJlLgorCisgICAgQXJnczoKKyAgICAgICAgcGF0aDogdGhl
IHBhdGggdG8gcGFyc2UuCisgICAgICAgIHZhbHVlOiB0aGUgZGF0YSB2YWx1ZSB0byBpbnNlcnQg
aW50byB0aGUgdHJpZS4KKyAgICAgICAgdHJpZTogdGhlIHRyaWUgaW50byB3aGljaCB0byBpbnNl
cnQgdGhlIHBhdGggYW5kIHZhbHVlLgorICAgICIiIgorICAgIGlmIG5vdCAiLyIgaW4gcGF0aDoK
KyAgICAgICAgdHJpZVtwYXRoXSA9IHZhbHVlCisgICAgICAgIHJldHVybgorCisgICAgZGlyZWN0
b3J5LCBzbGFzaCwgcmVzdCA9IHBhdGgucGFydGl0aW9uKCIvIikKKyAgICBpZiBub3QgZGlyZWN0
b3J5IGluIHRyaWU6CisgICAgICAgIHRyaWVbZGlyZWN0b3J5XSA9IHt9CisgICAgYWRkX3BhdGhf
dG9fdHJpZShyZXN0LCB2YWx1ZSwgdHJpZVtkaXJlY3RvcnldKQorCiBkZWYgdGVzdF90aW1pbmdz
X3RyaWUocG9ydCwgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpOgogICAgICIiIkJyZWFrcyBhIGZp
bGVuYW1lIGludG8gY2h1bmtzIGJ5IGRpcmVjdG9yeSBhbmQgcHV0cyB0aGUgdGVzdCB0aW1lIGFz
IGEgdmFsdWUgaW4gdGhlIGxvd2VzdCBwYXJ0LCBlLmcuCiAgICAgZm9vL2Jhci9iYXouaHRtbDog
MW1zCkBAIC04OCwxNiArMTMxLDggQEAgZGVmIHRlc3RfdGltaW5nc190cmllKHBvcnQsIGluZGl2
aWR1YWxfdGVzdF90aW1pbmdzKToKICAgICAgICAgICAgICMgRklYTUU6IEhhbmRsZSB0aGlzIGJl
dHRlci4gTm9uLWxheW91dCB0ZXN0cyBzaG91bGRuJ3QgYmUgcmVsYXRpdml6ZWQuCiAgICAgICAg
ICAgICB0ZXN0ID0gdGVzdF9yZXN1bHQuZmlsZW5hbWUKIAotICAgICAgICBwYXJ0cyA9IHRlc3Qu
c3BsaXQoJy8nKQotICAgICAgICBjdXJyZW50X21hcCA9IHRyaWUKLSAgICAgICAgZm9yIGksIHBh
cnQgaW4gZW51bWVyYXRlKHBhcnRzKToKLSAgICAgICAgICAgIGlmIGkgPT0gKGxlbihwYXJ0cykg
LSAxKToKLSAgICAgICAgICAgICAgICBjdXJyZW50X21hcFtwYXJ0XSA9IGludCgxMDAwICogdGVz
dF9yZXN1bHQudGVzdF9ydW5fdGltZSkKLSAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBh
ZGRfcGF0aF90b190cmllKHRlc3QsIGludCgxMDAwICogdGVzdF9yZXN1bHQudGVzdF9ydW5fdGlt
ZSksIHRyaWUpCiAKLSAgICAgICAgICAgIGlmIHBhcnQgbm90IGluIGN1cnJlbnRfbWFwOgotICAg
ICAgICAgICAgICAgIGN1cnJlbnRfbWFwW3BhcnRdID0ge30KLSAgICAgICAgICAgIGN1cnJlbnRf
bWFwID0gY3VycmVudF9tYXBbcGFydF0KICAgICByZXR1cm4gdHJpZQogCiAjIEZJWE1FOiBXZSBh
bHJlYWR5IGhhdmUgYSBUZXN0UmVzdWx0IGNsYXNzIGluIHRlc3RfcmVzdWx0cy5weQpAQCAtMTUz
LDcgKzE4OCw3IEBAIGNsYXNzIEpTT05SZXN1bHRzR2VuZXJhdG9yQmFzZShvYmplY3QpOgogICAg
ICAgICAgICAgICAgICAgICAgICAgVGVzdFJlc3VsdC5GQUlMUzogRkFJTF9SRVNVTFQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBUZXN0UmVzdWx0LkZMQUtZOiBGTEFLWV9SRVNVTFR9CiAKLSAg
ICBWRVJTSU9OID0gMworICAgIFZFUlNJT04gPSA0CiAgICAgVkVSU0lPTl9LRVkgPSAidmVyc2lv
biIKICAgICBSRVNVTFRTID0gInJlc3VsdHMiCiAgICAgVElNRVMgPSAidGltZXMiCkBAIC0yNzEs
NyArMzA2LDggQEAgY2xhc3MgSlNPTlJlc3VsdHNHZW5lcmF0b3JCYXNlKG9iamVjdCk6CiAgICAg
ICAgICMgVXBkYXRlIHRoZSBhbGwgZmFpbGluZyB0ZXN0cyB3aXRoIHJlc3VsdCB0eXBlIGFuZCB0
aW1lLgogICAgICAgICB0ZXN0cyA9IHJlc3VsdHNfZm9yX2J1aWxkZXJbc2VsZi5URVNUU10KICAg
ICAgICAgYWxsX2ZhaWxpbmdfdGVzdHMgPSBzZWxmLl9nZXRfZmFpbGVkX3Rlc3RfbmFtZXMoKQot
ICAgICAgICBhbGxfZmFpbGluZ190ZXN0cy51cGRhdGUodGVzdHMuaXRlcmtleXMoKSkKKyAgICAg
ICAgYWxsX2ZhaWxpbmdfdGVzdHMudXBkYXRlKGNvbnZlcnRfdHJpZV90b19mbGF0X3BhdGhzKHRl
c3RzKSkKKwogICAgICAgICBmb3IgdGVzdCBpbiBhbGxfZmFpbGluZ190ZXN0czoKICAgICAgICAg
ICAgIHNlbGYuX2luc2VydF90ZXN0X3RpbWVfYW5kX3Jlc3VsdCh0ZXN0LCB0ZXN0cykKIApAQCAt
NTEyLDYgKzU0OCw3IEBAIGNsYXNzIEpTT05SZXN1bHRzR2VuZXJhdG9yQmFzZShvYmplY3QpOgog
ICAgICAgICAgICAgaW50KHRpbWUudGltZSgpKSwKICAgICAgICAgICAgIHNlbGYuVElNRSkKIAor
CiAgICAgZGVmIF9pbnNlcnRfdGVzdF90aW1lX2FuZF9yZXN1bHQoc2VsZiwgdGVzdF9uYW1lLCB0
ZXN0cyk6CiAgICAgICAgICIiIiBJbnNlcnQgYSB0ZXN0IGl0ZW0gd2l0aCBpdHMgcmVzdWx0cyB0
byB0aGUgZ2l2ZW4gdGVzdHMgZGljdGlvbmFyeS4KIApAQCAtNTIyLDEwICs1NTksMTUgQEAgY2xh
c3MgSlNPTlJlc3VsdHNHZW5lcmF0b3JCYXNlKG9iamVjdCk6CiAgICAgICAgIHJlc3VsdCA9IHNl
bGYuX2dldF9yZXN1bHRfY2hhcih0ZXN0X25hbWUpCiAgICAgICAgIHRpbWUgPSBzZWxmLl9nZXRf
dGVzdF90aW1pbmcodGVzdF9uYW1lKQogCi0gICAgICAgIGlmIHRlc3RfbmFtZSBub3QgaW4gdGVz
dHM6Ci0gICAgICAgICAgICB0ZXN0c1t0ZXN0X25hbWVdID0gc2VsZi5fY3JlYXRlX3Jlc3VsdHNf
YW5kX3RpbWVzX2pzb24oKQorICAgICAgICB0aGlzVGVzdCA9IHRlc3RzCisgICAgICAgIGZvciBz
ZWdtZW50IGluIHRlc3RfbmFtZS5zcGxpdCgiLyIpOgorICAgICAgICAgICAgaWYgc2VnbWVudCBu
b3QgaW4gdGhpc1Rlc3Q6CisgICAgICAgICAgICAgICAgdGhpc1Rlc3Rbc2VnbWVudF0gPSB7fQor
ICAgICAgICAgICAgdGhpc1Rlc3QgPSB0aGlzVGVzdFtzZWdtZW50XQorCisgICAgICAgIGlmIG5v
dCBsZW4odGhpc1Rlc3QpOgorICAgICAgICAgICAgc2VsZi5fcG9wdWxhdGVfcmVzdWx0c19hbmRf
dGltZXNfanNvbih0aGlzVGVzdCkKIAotICAgICAgICB0aGlzVGVzdCA9IHRlc3RzW3Rlc3RfbmFt
ZV0KICAgICAgICAgaWYgc2VsZi5SRVNVTFRTIGluIHRoaXNUZXN0OgogICAgICAgICAgICAgc2Vs
Zi5faW5zZXJ0X2l0ZW1fcnVuX2xlbmd0aF9lbmNvZGVkKHJlc3VsdCwgdGhpc1Rlc3Rbc2VsZi5S
RVNVTFRTXSkKICAgICAgICAgZWxzZToKQEAgLTU0MCwxNCArNTgyLDMyIEBAIGNsYXNzIEpTT05S
ZXN1bHRzR2VuZXJhdG9yQmFzZShvYmplY3QpOgogICAgICAgICAiIiJJZiB0aGUgSlNPTiBkb2Vz
IG5vdCBtYXRjaCB0aGUgY3VycmVudCB2ZXJzaW9uLCBjb252ZXJ0cyBpdCB0byB0aGUKICAgICAg
ICAgY3VycmVudCB2ZXJzaW9uIGFuZCBhZGRzIGluIHRoZSBuZXcgdmVyc2lvbiBudW1iZXIuCiAg
ICAgICAgICIiIgotICAgICAgICBpZiAoc2VsZi5WRVJTSU9OX0tFWSBpbiByZXN1bHRzX2pzb24g
YW5kCi0gICAgICAgICAgICByZXN1bHRzX2pzb25bc2VsZi5WRVJTSU9OX0tFWV0gPT0gc2VsZi5W
RVJTSU9OKToKLSAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBzZWxmLlZFUlNJT05fS0VZ
IGluIHJlc3VsdHNfanNvbjoKKyAgICAgICAgICAgIGFyY2hpdmVfdmVyc2lvbiA9IHJlc3VsdHNf
anNvbltzZWxmLlZFUlNJT05fS0VZXQorICAgICAgICAgICAgaWYgYXJjaGl2ZV92ZXJzaW9uID09
IHNlbGYuVkVSU0lPTjoKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIGFyY2hpdmVfdmVyc2lvbiA9IDMKKworICAgICAgICAjIHZlcnNpb24gMy0+NAor
ICAgICAgICBpZiBhcmNoaXZlX3ZlcnNpb24gPT0gMzoKKyAgICAgICAgICAgIG51bV9yZXN1bHRz
ID0gbGVuKHJlc3VsdHNfanNvbi52YWx1ZXMoKSkKKyAgICAgICAgICAgIGZvciBidWlsZGVyLCBy
ZXN1bHRzIGluIHJlc3VsdHNfanNvbi5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICBpZiBu
b3Qgc2VsZi5URVNUUyBpbiByZXN1bHRzOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQor
CisgICAgICAgICAgICAgICAgdGVzdF9yZXN1bHRzID0gcmVzdWx0c1tzZWxmLlRFU1RTXQorICAg
ICAgICAgICAgICAgIHRlc3RfcmVzdWx0c190cmllID0ge30KKyAgICAgICAgICAgICAgICBmb3Ig
dGVzdCBpbiB0ZXN0X3Jlc3VsdHMuaXRlcmtleXMoKToKKyAgICAgICAgICAgICAgICAgICAgdGVz
dF9wYXRoID0gc2VsZi5fZ2V0X3BhdGhfcmVsYXRpdmVfdG9fbGF5b3V0X3Rlc3Rfcm9vdCh0ZXN0
KQorICAgICAgICAgICAgICAgICAgICBzaW5nbGVfdGVzdF9yZXN1bHQgPSB0ZXN0X3Jlc3VsdHNb
dGVzdF0KKyAgICAgICAgICAgICAgICAgICAgYWRkX3BhdGhfdG9fdHJpZSh0ZXN0X3BhdGgsIHNp
bmdsZV90ZXN0X3Jlc3VsdCwgdGVzdF9yZXN1bHRzX3RyaWUpCisKKyAgICAgICAgICAgICAgICBy
ZXN1bHRzW3NlbGYuVEVTVFNdID0gdGVzdF9yZXN1bHRzX3RyaWUKIAogICAgICAgICByZXN1bHRz
X2pzb25bc2VsZi5WRVJTSU9OX0tFWV0gPSBzZWxmLlZFUlNJT04KIAotICAgIGRlZiBfY3JlYXRl
X3Jlc3VsdHNfYW5kX3RpbWVzX2pzb24oc2VsZik6Ci0gICAgICAgIHJlc3VsdHNfYW5kX3RpbWVz
ID0ge30KKyAgICBkZWYgX3BvcHVsYXRlX3Jlc3VsdHNfYW5kX3RpbWVzX2pzb24oc2VsZiwgcmVz
dWx0c19hbmRfdGltZXMpOgogICAgICAgICByZXN1bHRzX2FuZF90aW1lc1tzZWxmLlJFU1VMVFNd
ID0gW10KICAgICAgICAgcmVzdWx0c19hbmRfdGltZXNbc2VsZi5USU1FU10gPSBbXQogICAgICAg
ICByZXR1cm4gcmVzdWx0c19hbmRfdGltZXMKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5lcmF0b3Jf
dW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRf
cGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yX3VuaXR0ZXN0LnB5CmluZGV4IDI0ODkxMWE5
NjJjYTBmOTA3NWJmM2JmOTcwNGI5NmVlMDU4YWFmMGMuLmRkNGRiNzhjZmMyNjBlMmRiMzE4ZDI0
YjEwZjcxNTJlZDQyMTA1OWUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5lcmF0b3JfdW5pdHRlc3Qu
cHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2th
Z2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvcl91bml0dGVzdC5weQpAQCAtMTU2LDggKzE1Niw3IEBA
IGNsYXNzIEpTT05HZW5lcmF0b3JUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgaWYg
ZmFpbGVkX2NvdW50X21hcDoKICAgICAgICAgICAgIHRlc3RzID0gYnVpbGRpbmZvW0pSRy5URVNU
U10KICAgICAgICAgICAgIGZvciB0ZXN0X25hbWUgaW4gZmFpbGVkX2NvdW50X21hcC5pdGVya2V5
cygpOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ZXN0X25hbWUgaW4gdGVzdHMp
Ci0gICAgICAgICAgICAgICAgdGVzdCA9IHRlc3RzW3Rlc3RfbmFtZV0KKyAgICAgICAgICAgICAg
ICB0ZXN0ID0gc2VsZi5fZmluZF90ZXN0X2luX3RyaWUodGVzdF9uYW1lLCB0ZXN0cykKIAogICAg
ICAgICAgICAgICAgIGZhaWxlZCA9IDAKICAgICAgICAgICAgICAgICBmb3IgcmVzdWx0IGluIHRl
c3RbSlJHLlJFU1VMVFNdOgpAQCAtMTc0LDYgKzE3MywxNCBAQCBjbGFzcyBKU09OR2VuZXJhdG9y
VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIGlmIGZpeGFibGVfY291bnQ6CiAgICAg
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1bShidWlsZGluZm9bSlJHLkZJWEFCTEVfQ09VTlRd
KSwgZml4YWJsZV9jb3VudCkKIAorICAgIGRlZiBfZmluZF90ZXN0X2luX3RyaWUoc2VsZiwgcGF0
aCwgdHJpZSk6CisgICAgICAgIHN1Yl90cmllID0gdHJpZQorICAgICAgICBub2RlcyA9IHBhdGgu
c3BsaXQoIi8iKQorICAgICAgICBmb3Igbm9kZSBpbiBub2RlczoKKyAgICAgICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZShub2RlIGluIHN1Yl90cmllKQorICAgICAgICAgICAgc3ViX3RyaWUgPSBzdWJf
dHJpZVtub2RlXQorICAgICAgICByZXR1cm4gc3ViX3RyaWUKKwogICAgIGRlZiB0ZXN0X2pzb25f
Z2VuZXJhdGlvbihzZWxmKToKICAgICAgICAgc2VsZi5fdGVzdF9qc29uX2dlbmVyYXRpb24oW10s
IFtdKQogICAgICAgICBzZWxmLl90ZXN0X2pzb25fZ2VuZXJhdGlvbihbJ0ExJywgJ0IxJ10sIFtd
KQpAQCAtMTk3LDYgKzIwNCwxMCBAQCBjbGFzcyBKU09OR2VuZXJhdG9yVGVzdCh1bml0dGVzdC5U
ZXN0Q2FzZSk6CiAgICAgICAgICAgICBbJ0ZMQUtZX0InLCAnRElTQUJMRURfQycsICdGQUlMU19E
J10sCiAgICAgICAgICAgICBbJ0EnLCAnRkxBS1lfRSddKQogCisgICAgZGVmIHRlc3RfaGllcmFy
Y2hpY2FsX2pzb25fZ2VuZXJhdGlvbihzZWxmKToKKyAgICAgICAgIyBGSVhNRShhYm94aGFsbCk6
IHJlLXdvcmsgdGVzdHMgdG8gYmUgbW9yZSBjb21wcmVoZW5zaWJsZSBhbmQgY29tcHJlaGVuc2l2
ZS4KKyAgICAgICAgc2VsZi5fdGVzdF9qc29uX2dlbmVyYXRpb24oWydmb28vQSddLCBbJ2Zvby9C
JywgJ2Jhci9DJ10pCisKICAgICBkZWYgdGVzdF90ZXN0X3RpbWluZ3NfdHJpZShzZWxmKToKICAg
ICAgICAgdGVzdF9wb3J0ID0gdGVzdC5UZXN0UG9ydCgpCiAgICAgICAgIGluZGl2aWR1YWxfdGVz
dF90aW1pbmdzID0gW10K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94560</attachid>
            <date>2011-05-23 21:45:06 -0700</date>
            <delta_ts>2011-05-23 23:29:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60869-20110524144503.patch</filename>
            <type>text/plain</type>
            <size>10523</size>
            <attacher name="Alice Boxhall">aboxhall</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODY5MjIKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA1MjlhMjIxODY5ZmU5OGIwMWUxMjQ2NDhjZGEzMGZlMTI3
M2MxMTMyLi5iOWU0ODU4ZTA0MTcyYjBjMjZlMDI0NDMzYTc5NDRkZTBhNjVjNzMwIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMTEtMDUtMTUgIEFsaWNlIEJveGhhbGwgIDxhYm94aGFsbEBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ29udmVydCBq
c29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5IHRvIG91dHB1dCB2ZXJzaW9uIDQgSlNPTi4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwODY5CisKKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xh
eW91dF9yZXN1bHRzX2dlbmVyYXRvci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5OgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25f
cmVzdWx0c19nZW5lcmF0b3JfdW5pdHRlc3QucHk6CisKIDIwMTEtMDUtMTkgIERtaXRyeSBMb21v
diAgPGRzbG9tb3ZAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJvYmVu
LgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0
X3BhY2thZ2UvanNvbl9sYXlvdXRfcmVzdWx0c19nZW5lcmF0b3IucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xheW91dF9yZXN1bHRz
X2dlbmVyYXRvci5weQppbmRleCBkYmIxNmMwM2UyNjMzMzUwOTQxMjBlY2VhZThjNzA2N2Q4ZDc4
MGYxLi5lYzI4MTY4ZjY2NjIwMGFiYWViNTU4ZDg4OTYyMzE3MjU5YjY4ZTA4IDEwMDY0NAotLS0g
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29u
X2xheW91dF9yZXN1bHRzX2dlbmVyYXRvci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xheW91dF9yZXN1bHRzX2dlbmVyYXRv
ci5weQpAQCAtMTMwLDMwICsxMzAsNiBAQCBjbGFzcyBKU09OTGF5b3V0UmVzdWx0c0dlbmVyYXRv
cihqc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLkpTT05SZXN1bHRzR2VuZXJhdG9yQmFzZQogICAgICAg
ICByZXR1cm4gc2VsZi5fZ2V0X21vZGlmaWVyX2NoYXIodGVzdF9uYW1lKQogCiAgICAgIyBvdmVy
cmlkZQotICAgIGRlZiBfY29udmVydF9qc29uX3RvX2N1cnJlbnRfdmVyc2lvbihzZWxmLCByZXN1
bHRzX2pzb24pOgotICAgICAgICBhcmNoaXZlX3ZlcnNpb24gPSBOb25lCi0gICAgICAgIGlmIHNl
bGYuVkVSU0lPTl9LRVkgaW4gcmVzdWx0c19qc29uOgotICAgICAgICAgICAgYXJjaGl2ZV92ZXJz
aW9uID0gcmVzdWx0c19qc29uW3NlbGYuVkVSU0lPTl9LRVldCi0KLSAgICAgICAgc3VwZXIoSlNP
TkxheW91dFJlc3VsdHNHZW5lcmF0b3IsCi0gICAgICAgICAgICAgIHNlbGYpLl9jb252ZXJ0X2pz
b25fdG9fY3VycmVudF92ZXJzaW9uKHJlc3VsdHNfanNvbikKLQotICAgICAgICAjIHZlcnNpb24g
Mi0+MwotICAgICAgICBpZiBhcmNoaXZlX3ZlcnNpb24gPT0gMjoKLSAgICAgICAgICAgIGZvciBy
ZXN1bHRzX2Zvcl9idWlsZGVyIGluIHJlc3VsdHNfanNvbi5pdGVydmFsdWVzKCk6Ci0gICAgICAg
ICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICB0ZXN0X3Jlc3VsdHMgPSByZXN1bHRz
X2Zvcl9idWlsZGVyW3NlbGYuVEVTVFNdCi0gICAgICAgICAgICAgICAgZXhjZXB0OgotICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZQotCi0gICAgICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0X3Jl
c3VsdHM6Ci0gICAgICAgICAgICAgICAgIyBNYWtlIHN1cmUgYWxsIHBhdGhzIGFyZSByZWxhdGl2
ZQotICAgICAgICAgICAgICAgIHRlc3RfcGF0aCA9IHNlbGYuX2dldF9wYXRoX3JlbGF0aXZlX3Rv
X2xheW91dF90ZXN0X3Jvb3QodGVzdCkKLSAgICAgICAgICAgICAgICBpZiB0ZXN0X3BhdGggIT0g
dGVzdDoKLSAgICAgICAgICAgICAgICAgICAgdGVzdF9yZXN1bHRzW3Rlc3RfcGF0aF0gPSB0ZXN0
X3Jlc3VsdHNbdGVzdF0KLSAgICAgICAgICAgICAgICAgICAgZGVsIHRlc3RfcmVzdWx0c1t0ZXN0
XQotCi0gICAgIyBvdmVycmlkZQogICAgIGRlZiBfaW5zZXJ0X2ZhaWx1cmVfc3VtbWFyaWVzKHNl
bGYsIHJlc3VsdHNfZm9yX2J1aWxkZXIpOgogICAgICAgICBzdW1tYXJ5ID0gc2VsZi5fcmVzdWx0
X3N1bW1hcnkKIApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5weSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5l
cmF0b3IucHkKaW5kZXggODJkMjFlNjJmNjRjZjdjMTQ5ZTZjMDEzOTg3ODA1MzlmMTNmMzAyYi4u
NDlkYzM4YWZlZTY2MGZmZmFmZjg4NmYzY2QzOTM4Zjg5ZDFiMTlhMiAxMDA2NDQKLS0tIGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1
bHRzX2dlbmVyYXRvci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CkBAIC02Nyw2ICs2Nyw0
OSBAQCBkZWYgd3JpdGVfanNvbihmaWxlc3lzdGVtLCBqc29uX29iamVjdCwgZmlsZV9wYXRoKToK
ICAgICBqc29uX3N0cmluZyA9IF9KU09OX1BSRUZJWCArIGpzb25fZGF0YSArIF9KU09OX1NVRkZJ
WAogICAgIGZpbGVzeXN0ZW0ud3JpdGVfdGV4dF9maWxlKGZpbGVfcGF0aCwganNvbl9zdHJpbmcp
CiAKKworZGVmIGNvbnZlcnRfdHJpZV90b19mbGF0X3BhdGhzKHRyaWUsIHByZWZpeD1Ob25lKToK
KyAgICAiIiJGbGF0dGVucyBhIHRyaWUgZGlyZWN0b3J5IHN0cnVjdHVyZSBpbnRvIGEgZmxhdCBz
dHJ1Y3R1cmUuCisKKyAgICBBcmdzOgorICAgICAgICB0cmllOiB0cmllIHN0cnVjdHVyZS4KKyAg
ICAgICAgcHJlZml4OiBhbGVhZHktY29tcHV0ZWQgcGF0aCB0byBwcmVwZW5kIHRvIHRoZSBldmVu
dHVhbCBwYXRoLCBpZiBhbnkuCisKKyAgICBSZXR1cm5zOgorICAgICAgICBUaGUgZmxhdHRlbmVk
IGRpcmVjdG9yeSBzdHJ1Y3R1cmUuCisgICAgIiIiCisgICAgcmVzdWx0ID0ge30KKyAgICBmb3Ig
bmFtZSwgZGF0YSBpbiB0cmllLml0ZXJpdGVtcygpOgorICAgICAgICBpZiBwcmVmaXg6CisgICAg
ICAgICAgICBmdWxsbmFtZSA9IHByZWZpeCArICIvIiArIG5hbWUKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIGZ1bGxuYW1lID0gbmFtZQorCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGRh
dGEsIGRpY3QpIG9yIG5vdCBsZW4oZGF0YSkgb3IgInJlc3VsdHMiIGluIGRhdGE6CisgICAgICAg
ICAgICByZXN1bHRbZnVsbG5hbWVdID0gZGF0YQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
cmVzdWx0LnVwZGF0ZShjb252ZXJ0X3RyaWVfdG9fZmxhdF9wYXRocyhkYXRhLCBmdWxsbmFtZSkp
CisKKyAgICByZXR1cm4gcmVzdWx0CisKKworZGVmIGFkZF9wYXRoX3RvX3RyaWUocGF0aCwgdmFs
dWUsIHRyaWUpOgorICAgICIiIkluc2VydHMgYSBzaW5nbGUgZmxhdCBwYXRoIGtleSBhbmQgdmFs
dWUgaW50byBhIHRyaWUgc3RydWN0dXJlLgorCisgICAgQXJnczoKKyAgICAgICAgcGF0aDogdGhl
IHBhdGggdG8gcGFyc2UuCisgICAgICAgIHZhbHVlOiB0aGUgZGF0YSB2YWx1ZSB0byBpbnNlcnQg
aW50byB0aGUgdHJpZS4KKyAgICAgICAgdHJpZTogdGhlIHRyaWUgaW50byB3aGljaCB0byBpbnNl
cnQgdGhlIHBhdGggYW5kIHZhbHVlLgorICAgICIiIgorICAgIGlmIG5vdCAiLyIgaW4gcGF0aDoK
KyAgICAgICAgdHJpZVtwYXRoXSA9IHZhbHVlCisgICAgICAgIHJldHVybgorCisgICAgZGlyZWN0
b3J5LCBzbGFzaCwgcmVzdCA9IHBhdGgucGFydGl0aW9uKCIvIikKKyAgICBpZiBub3QgZGlyZWN0
b3J5IGluIHRyaWU6CisgICAgICAgIHRyaWVbZGlyZWN0b3J5XSA9IHt9CisgICAgYWRkX3BhdGhf
dG9fdHJpZShyZXN0LCB2YWx1ZSwgdHJpZVtkaXJlY3RvcnldKQorCiBkZWYgdGVzdF90aW1pbmdz
X3RyaWUocG9ydCwgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpOgogICAgICIiIkJyZWFrcyBhIGZp
bGVuYW1lIGludG8gY2h1bmtzIGJ5IGRpcmVjdG9yeSBhbmQgcHV0cyB0aGUgdGVzdCB0aW1lIGFz
IGEgdmFsdWUgaW4gdGhlIGxvd2VzdCBwYXJ0LCBlLmcuCiAgICAgZm9vL2Jhci9iYXouaHRtbDog
MW1zCkBAIC04OCwxNiArMTMxLDggQEAgZGVmIHRlc3RfdGltaW5nc190cmllKHBvcnQsIGluZGl2
aWR1YWxfdGVzdF90aW1pbmdzKToKICAgICAgICAgICAgICMgRklYTUU6IEhhbmRsZSB0aGlzIGJl
dHRlci4gTm9uLWxheW91dCB0ZXN0cyBzaG91bGRuJ3QgYmUgcmVsYXRpdml6ZWQuCiAgICAgICAg
ICAgICB0ZXN0ID0gdGVzdF9yZXN1bHQuZmlsZW5hbWUKIAotICAgICAgICBwYXJ0cyA9IHRlc3Qu
c3BsaXQoJy8nKQotICAgICAgICBjdXJyZW50X21hcCA9IHRyaWUKLSAgICAgICAgZm9yIGksIHBh
cnQgaW4gZW51bWVyYXRlKHBhcnRzKToKLSAgICAgICAgICAgIGlmIGkgPT0gKGxlbihwYXJ0cykg
LSAxKToKLSAgICAgICAgICAgICAgICBjdXJyZW50X21hcFtwYXJ0XSA9IGludCgxMDAwICogdGVz
dF9yZXN1bHQudGVzdF9ydW5fdGltZSkKLSAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBh
ZGRfcGF0aF90b190cmllKHRlc3QsIGludCgxMDAwICogdGVzdF9yZXN1bHQudGVzdF9ydW5fdGlt
ZSksIHRyaWUpCiAKLSAgICAgICAgICAgIGlmIHBhcnQgbm90IGluIGN1cnJlbnRfbWFwOgotICAg
ICAgICAgICAgICAgIGN1cnJlbnRfbWFwW3BhcnRdID0ge30KLSAgICAgICAgICAgIGN1cnJlbnRf
bWFwID0gY3VycmVudF9tYXBbcGFydF0KICAgICByZXR1cm4gdHJpZQogCiAjIEZJWE1FOiBXZSBh
bHJlYWR5IGhhdmUgYSBUZXN0UmVzdWx0IGNsYXNzIGluIHRlc3RfcmVzdWx0cy5weQpAQCAtMTUz
LDcgKzE4OCw3IEBAIGNsYXNzIEpTT05SZXN1bHRzR2VuZXJhdG9yQmFzZShvYmplY3QpOgogICAg
ICAgICAgICAgICAgICAgICAgICAgVGVzdFJlc3VsdC5GQUlMUzogRkFJTF9SRVNVTFQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBUZXN0UmVzdWx0LkZMQUtZOiBGTEFLWV9SRVNVTFR9CiAKLSAg
ICBWRVJTSU9OID0gMworICAgIFZFUlNJT04gPSA0CiAgICAgVkVSU0lPTl9LRVkgPSAidmVyc2lv
biIKICAgICBSRVNVTFRTID0gInJlc3VsdHMiCiAgICAgVElNRVMgPSAidGltZXMiCkBAIC0yNzEs
NyArMzA2LDggQEAgY2xhc3MgSlNPTlJlc3VsdHNHZW5lcmF0b3JCYXNlKG9iamVjdCk6CiAgICAg
ICAgICMgVXBkYXRlIHRoZSBhbGwgZmFpbGluZyB0ZXN0cyB3aXRoIHJlc3VsdCB0eXBlIGFuZCB0
aW1lLgogICAgICAgICB0ZXN0cyA9IHJlc3VsdHNfZm9yX2J1aWxkZXJbc2VsZi5URVNUU10KICAg
ICAgICAgYWxsX2ZhaWxpbmdfdGVzdHMgPSBzZWxmLl9nZXRfZmFpbGVkX3Rlc3RfbmFtZXMoKQot
ICAgICAgICBhbGxfZmFpbGluZ190ZXN0cy51cGRhdGUodGVzdHMuaXRlcmtleXMoKSkKKyAgICAg
ICAgYWxsX2ZhaWxpbmdfdGVzdHMudXBkYXRlKGNvbnZlcnRfdHJpZV90b19mbGF0X3BhdGhzKHRl
c3RzKSkKKwogICAgICAgICBmb3IgdGVzdCBpbiBhbGxfZmFpbGluZ190ZXN0czoKICAgICAgICAg
ICAgIHNlbGYuX2luc2VydF90ZXN0X3RpbWVfYW5kX3Jlc3VsdCh0ZXN0LCB0ZXN0cykKIApAQCAt
NTEyLDYgKzU0OCw3IEBAIGNsYXNzIEpTT05SZXN1bHRzR2VuZXJhdG9yQmFzZShvYmplY3QpOgog
ICAgICAgICAgICAgaW50KHRpbWUudGltZSgpKSwKICAgICAgICAgICAgIHNlbGYuVElNRSkKIAor
CiAgICAgZGVmIF9pbnNlcnRfdGVzdF90aW1lX2FuZF9yZXN1bHQoc2VsZiwgdGVzdF9uYW1lLCB0
ZXN0cyk6CiAgICAgICAgICIiIiBJbnNlcnQgYSB0ZXN0IGl0ZW0gd2l0aCBpdHMgcmVzdWx0cyB0
byB0aGUgZ2l2ZW4gdGVzdHMgZGljdGlvbmFyeS4KIApAQCAtNTIyLDEwICs1NTksMTUgQEAgY2xh
c3MgSlNPTlJlc3VsdHNHZW5lcmF0b3JCYXNlKG9iamVjdCk6CiAgICAgICAgIHJlc3VsdCA9IHNl
bGYuX2dldF9yZXN1bHRfY2hhcih0ZXN0X25hbWUpCiAgICAgICAgIHRpbWUgPSBzZWxmLl9nZXRf
dGVzdF90aW1pbmcodGVzdF9uYW1lKQogCi0gICAgICAgIGlmIHRlc3RfbmFtZSBub3QgaW4gdGVz
dHM6Ci0gICAgICAgICAgICB0ZXN0c1t0ZXN0X25hbWVdID0gc2VsZi5fY3JlYXRlX3Jlc3VsdHNf
YW5kX3RpbWVzX2pzb24oKQorICAgICAgICB0aGlzVGVzdCA9IHRlc3RzCisgICAgICAgIGZvciBz
ZWdtZW50IGluIHRlc3RfbmFtZS5zcGxpdCgiLyIpOgorICAgICAgICAgICAgaWYgc2VnbWVudCBu
b3QgaW4gdGhpc1Rlc3Q6CisgICAgICAgICAgICAgICAgdGhpc1Rlc3Rbc2VnbWVudF0gPSB7fQor
ICAgICAgICAgICAgdGhpc1Rlc3QgPSB0aGlzVGVzdFtzZWdtZW50XQorCisgICAgICAgIGlmIG5v
dCBsZW4odGhpc1Rlc3QpOgorICAgICAgICAgICAgc2VsZi5fcG9wdWxhdGVfcmVzdWx0c19hbmRf
dGltZXNfanNvbih0aGlzVGVzdCkKIAotICAgICAgICB0aGlzVGVzdCA9IHRlc3RzW3Rlc3RfbmFt
ZV0KICAgICAgICAgaWYgc2VsZi5SRVNVTFRTIGluIHRoaXNUZXN0OgogICAgICAgICAgICAgc2Vs
Zi5faW5zZXJ0X2l0ZW1fcnVuX2xlbmd0aF9lbmNvZGVkKHJlc3VsdCwgdGhpc1Rlc3Rbc2VsZi5S
RVNVTFRTXSkKICAgICAgICAgZWxzZToKQEAgLTU0MCwxNCArNTgyLDM1IEBAIGNsYXNzIEpTT05S
ZXN1bHRzR2VuZXJhdG9yQmFzZShvYmplY3QpOgogICAgICAgICAiIiJJZiB0aGUgSlNPTiBkb2Vz
IG5vdCBtYXRjaCB0aGUgY3VycmVudCB2ZXJzaW9uLCBjb252ZXJ0cyBpdCB0byB0aGUKICAgICAg
ICAgY3VycmVudCB2ZXJzaW9uIGFuZCBhZGRzIGluIHRoZSBuZXcgdmVyc2lvbiBudW1iZXIuCiAg
ICAgICAgICIiIgotICAgICAgICBpZiAoc2VsZi5WRVJTSU9OX0tFWSBpbiByZXN1bHRzX2pzb24g
YW5kCi0gICAgICAgICAgICByZXN1bHRzX2pzb25bc2VsZi5WRVJTSU9OX0tFWV0gPT0gc2VsZi5W
RVJTSU9OKToKLSAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBzZWxmLlZFUlNJT05fS0VZ
IGluIHJlc3VsdHNfanNvbjoKKyAgICAgICAgICAgIGFyY2hpdmVfdmVyc2lvbiA9IHJlc3VsdHNf
anNvbltzZWxmLlZFUlNJT05fS0VZXQorICAgICAgICAgICAgaWYgYXJjaGl2ZV92ZXJzaW9uID09
IHNlbGYuVkVSU0lPTjoKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIGFyY2hpdmVfdmVyc2lvbiA9IDMKKworICAgICAgICAjIHZlcnNpb24gMy0+NAor
ICAgICAgICBpZiBhcmNoaXZlX3ZlcnNpb24gPT0gMzoKKyAgICAgICAgICAgIG51bV9yZXN1bHRz
ID0gbGVuKHJlc3VsdHNfanNvbi52YWx1ZXMoKSkKKyAgICAgICAgICAgIGZvciBidWlsZGVyLCBy
ZXN1bHRzIGluIHJlc3VsdHNfanNvbi5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICBzZWxm
Ll9jb252ZXJ0X3Rlc3RzX3RvX3RyaWUocmVzdWx0cykKIAogICAgICAgICByZXN1bHRzX2pzb25b
c2VsZi5WRVJTSU9OX0tFWV0gPSBzZWxmLlZFUlNJT04KIAotICAgIGRlZiBfY3JlYXRlX3Jlc3Vs
dHNfYW5kX3RpbWVzX2pzb24oc2VsZik6Ci0gICAgICAgIHJlc3VsdHNfYW5kX3RpbWVzID0ge30K
KyAgICBkZWYgX2NvbnZlcnRfdGVzdHNfdG9fdHJpZShzZWxmLCByZXN1bHRzKToKKyAgICAgICAg
aWYgbm90IHNlbGYuVEVTVFMgaW4gcmVzdWx0czoKKyAgICAgICAgICAgIHJldHVybgorCisgICAg
ICAgIHRlc3RfcmVzdWx0cyA9IHJlc3VsdHNbc2VsZi5URVNUU10KKyAgICAgICAgdGVzdF9yZXN1
bHRzX3RyaWUgPSB7fQorICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0X3Jlc3VsdHMuaXRlcmtleXMo
KToKKyAgICAgICAgICAgIHRlc3RfcGF0aCA9IHNlbGYuX2dldF9wYXRoX3JlbGF0aXZlX3RvX2xh
eW91dF90ZXN0X3Jvb3QodGVzdCkKKyAgICAgICAgICAgIHNpbmdsZV90ZXN0X3Jlc3VsdCA9IHRl
c3RfcmVzdWx0c1t0ZXN0XQorICAgICAgICAgICAgYWRkX3BhdGhfdG9fdHJpZSh0ZXN0X3BhdGgs
IHNpbmdsZV90ZXN0X3Jlc3VsdCwgdGVzdF9yZXN1bHRzX3RyaWUpCisKKyAgICAgICAgcmVzdWx0
c1tzZWxmLlRFU1RTXSA9IHRlc3RfcmVzdWx0c190cmllCisKKyAgICBkZWYgX3BvcHVsYXRlX3Jl
c3VsdHNfYW5kX3RpbWVzX2pzb24oc2VsZiwgcmVzdWx0c19hbmRfdGltZXMpOgogICAgICAgICBy
ZXN1bHRzX2FuZF90aW1lc1tzZWxmLlJFU1VMVFNdID0gW10KICAgICAgICAgcmVzdWx0c19hbmRf
dGltZXNbc2VsZi5USU1FU10gPSBbXQogICAgICAgICByZXR1cm4gcmVzdWx0c19hbmRfdGltZXMK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL2pzb25fcmVzdWx0c19nZW5lcmF0b3JfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJh
dG9yX3VuaXR0ZXN0LnB5CmluZGV4IDI0ODkxMWE5NjJjYTBmOTA3NWJmM2JmOTcwNGI5NmVlMDU4
YWFmMGMuLmI0NWFkYmZkYjZjZjBjOTg1YmFjODFhZjQ5MmFlNzFiZWNmZjI3OWQgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pz
b25fcmVzdWx0c19nZW5lcmF0b3JfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvcl91
bml0dGVzdC5weQpAQCAtMTU2LDggKzE1Niw3IEBAIGNsYXNzIEpTT05HZW5lcmF0b3JUZXN0KHVu
aXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgaWYgZmFpbGVkX2NvdW50X21hcDoKICAgICAgICAg
ICAgIHRlc3RzID0gYnVpbGRpbmZvW0pSRy5URVNUU10KICAgICAgICAgICAgIGZvciB0ZXN0X25h
bWUgaW4gZmFpbGVkX2NvdW50X21hcC5pdGVya2V5cygpOgotICAgICAgICAgICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZSh0ZXN0X25hbWUgaW4gdGVzdHMpCi0gICAgICAgICAgICAgICAgdGVzdCA9IHRl
c3RzW3Rlc3RfbmFtZV0KKyAgICAgICAgICAgICAgICB0ZXN0ID0gc2VsZi5fZmluZF90ZXN0X2lu
X3RyaWUodGVzdF9uYW1lLCB0ZXN0cykKIAogICAgICAgICAgICAgICAgIGZhaWxlZCA9IDAKICAg
ICAgICAgICAgICAgICBmb3IgcmVzdWx0IGluIHRlc3RbSlJHLlJFU1VMVFNdOgpAQCAtMTc0LDYg
KzE3MywxNCBAQCBjbGFzcyBKU09OR2VuZXJhdG9yVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAg
ICAgICAgIGlmIGZpeGFibGVfY291bnQ6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1
bShidWlsZGluZm9bSlJHLkZJWEFCTEVfQ09VTlRdKSwgZml4YWJsZV9jb3VudCkKIAorICAgIGRl
ZiBfZmluZF90ZXN0X2luX3RyaWUoc2VsZiwgcGF0aCwgdHJpZSk6CisgICAgICAgIHN1Yl90cmll
ID0gdHJpZQorICAgICAgICBub2RlcyA9IHBhdGguc3BsaXQoIi8iKQorICAgICAgICBmb3Igbm9k
ZSBpbiBub2RlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub2RlIGluIHN1Yl90cmll
KQorICAgICAgICAgICAgc3ViX3RyaWUgPSBzdWJfdHJpZVtub2RlXQorICAgICAgICByZXR1cm4g
c3ViX3RyaWUKKwogICAgIGRlZiB0ZXN0X2pzb25fZ2VuZXJhdGlvbihzZWxmKToKICAgICAgICAg
c2VsZi5fdGVzdF9qc29uX2dlbmVyYXRpb24oW10sIFtdKQogICAgICAgICBzZWxmLl90ZXN0X2pz
b25fZ2VuZXJhdGlvbihbJ0ExJywgJ0IxJ10sIFtdKQpAQCAtMTk3LDYgKzIwNCwxMCBAQCBjbGFz
cyBKU09OR2VuZXJhdG9yVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICAgICBbJ0ZM
QUtZX0InLCAnRElTQUJMRURfQycsICdGQUlMU19EJ10sCiAgICAgICAgICAgICBbJ0EnLCAnRkxB
S1lfRSddKQogCisgICAgZGVmIHRlc3RfaGllcmFyY2hpY2FsX2pzb25fZ2VuZXJhdGlvbihzZWxm
KToKKyAgICAgICAgIyBGSVhNRTogUmUtd29yayB0ZXN0cyB0byBiZSBtb3JlIGNvbXByZWhlbnNp
YmxlIGFuZCBjb21wcmVoZW5zaXZlLgorICAgICAgICBzZWxmLl90ZXN0X2pzb25fZ2VuZXJhdGlv
bihbJ2Zvby9BJ10sIFsnZm9vL0InLCAnYmFyL0MnXSkKKwogICAgIGRlZiB0ZXN0X3Rlc3RfdGlt
aW5nc190cmllKHNlbGYpOgogICAgICAgICB0ZXN0X3BvcnQgPSB0ZXN0LlRlc3RQb3J0KCkKICAg
ICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MgPSBbXQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94571</attachid>
            <date>2011-05-23 23:29:32 -0700</date>
            <delta_ts>2011-05-24 16:59:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60869-20110524162930.patch</filename>
            <type>text/plain</type>
            <size>10705</size>
            <attacher name="Alice Boxhall">aboxhall</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODY5MjIKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA1MjlhMjIxODY5ZmU5OGIwMWUxMjQ2NDhjZGEzMGZlMTI3
M2MxMTMyLi5iOWU0ODU4ZTA0MTcyYjBjMjZlMDI0NDMzYTc5NDRkZTBhNjVjNzMwIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMTEtMDUtMTUgIEFsaWNlIEJveGhhbGwgIDxhYm94aGFsbEBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ29udmVydCBq
c29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5IHRvIG91dHB1dCB2ZXJzaW9uIDQgSlNPTi4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwODY5CisKKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xh
eW91dF9yZXN1bHRzX2dlbmVyYXRvci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5OgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25f
cmVzdWx0c19nZW5lcmF0b3JfdW5pdHRlc3QucHk6CisKIDIwMTEtMDUtMTkgIERtaXRyeSBMb21v
diAgPGRzbG9tb3ZAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJvYmVu
LgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0
X3BhY2thZ2UvanNvbl9sYXlvdXRfcmVzdWx0c19nZW5lcmF0b3IucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xheW91dF9yZXN1bHRz
X2dlbmVyYXRvci5weQppbmRleCBkYmIxNmMwM2UyNjMzMzUwOTQxMjBlY2VhZThjNzA2N2Q4ZDc4
MGYxLi5lYzI4MTY4ZjY2NjIwMGFiYWViNTU4ZDg4OTYyMzE3MjU5YjY4ZTA4IDEwMDY0NAotLS0g
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29u
X2xheW91dF9yZXN1bHRzX2dlbmVyYXRvci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xheW91dF9yZXN1bHRzX2dlbmVyYXRv
ci5weQpAQCAtMTMwLDMwICsxMzAsNiBAQCBjbGFzcyBKU09OTGF5b3V0UmVzdWx0c0dlbmVyYXRv
cihqc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLkpTT05SZXN1bHRzR2VuZXJhdG9yQmFzZQogICAgICAg
ICByZXR1cm4gc2VsZi5fZ2V0X21vZGlmaWVyX2NoYXIodGVzdF9uYW1lKQogCiAgICAgIyBvdmVy
cmlkZQotICAgIGRlZiBfY29udmVydF9qc29uX3RvX2N1cnJlbnRfdmVyc2lvbihzZWxmLCByZXN1
bHRzX2pzb24pOgotICAgICAgICBhcmNoaXZlX3ZlcnNpb24gPSBOb25lCi0gICAgICAgIGlmIHNl
bGYuVkVSU0lPTl9LRVkgaW4gcmVzdWx0c19qc29uOgotICAgICAgICAgICAgYXJjaGl2ZV92ZXJz
aW9uID0gcmVzdWx0c19qc29uW3NlbGYuVkVSU0lPTl9LRVldCi0KLSAgICAgICAgc3VwZXIoSlNP
TkxheW91dFJlc3VsdHNHZW5lcmF0b3IsCi0gICAgICAgICAgICAgIHNlbGYpLl9jb252ZXJ0X2pz
b25fdG9fY3VycmVudF92ZXJzaW9uKHJlc3VsdHNfanNvbikKLQotICAgICAgICAjIHZlcnNpb24g
Mi0+MwotICAgICAgICBpZiBhcmNoaXZlX3ZlcnNpb24gPT0gMjoKLSAgICAgICAgICAgIGZvciBy
ZXN1bHRzX2Zvcl9idWlsZGVyIGluIHJlc3VsdHNfanNvbi5pdGVydmFsdWVzKCk6Ci0gICAgICAg
ICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICB0ZXN0X3Jlc3VsdHMgPSByZXN1bHRz
X2Zvcl9idWlsZGVyW3NlbGYuVEVTVFNdCi0gICAgICAgICAgICAgICAgZXhjZXB0OgotICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZQotCi0gICAgICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0X3Jl
c3VsdHM6Ci0gICAgICAgICAgICAgICAgIyBNYWtlIHN1cmUgYWxsIHBhdGhzIGFyZSByZWxhdGl2
ZQotICAgICAgICAgICAgICAgIHRlc3RfcGF0aCA9IHNlbGYuX2dldF9wYXRoX3JlbGF0aXZlX3Rv
X2xheW91dF90ZXN0X3Jvb3QodGVzdCkKLSAgICAgICAgICAgICAgICBpZiB0ZXN0X3BhdGggIT0g
dGVzdDoKLSAgICAgICAgICAgICAgICAgICAgdGVzdF9yZXN1bHRzW3Rlc3RfcGF0aF0gPSB0ZXN0
X3Jlc3VsdHNbdGVzdF0KLSAgICAgICAgICAgICAgICAgICAgZGVsIHRlc3RfcmVzdWx0c1t0ZXN0
XQotCi0gICAgIyBvdmVycmlkZQogICAgIGRlZiBfaW5zZXJ0X2ZhaWx1cmVfc3VtbWFyaWVzKHNl
bGYsIHJlc3VsdHNfZm9yX2J1aWxkZXIpOgogICAgICAgICBzdW1tYXJ5ID0gc2VsZi5fcmVzdWx0
X3N1bW1hcnkKIApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5weSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5l
cmF0b3IucHkKaW5kZXggODJkMjFlNjJmNjRjZjdjMTQ5ZTZjMDEzOTg3ODA1MzlmMTNmMzAyYi4u
NmMxZmIwYjkxYTE0YWFmZGMyMGFmZGY1NjhlYzgzMzc4YjQyMTZhMCAxMDA2NDQKLS0tIGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1
bHRzX2dlbmVyYXRvci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CkBAIC02Nyw2ICs2Nywz
MyBAQCBkZWYgd3JpdGVfanNvbihmaWxlc3lzdGVtLCBqc29uX29iamVjdCwgZmlsZV9wYXRoKToK
ICAgICBqc29uX3N0cmluZyA9IF9KU09OX1BSRUZJWCArIGpzb25fZGF0YSArIF9KU09OX1NVRkZJ
WAogICAgIGZpbGVzeXN0ZW0ud3JpdGVfdGV4dF9maWxlKGZpbGVfcGF0aCwganNvbl9zdHJpbmcp
CiAKKworZGVmIGNvbnZlcnRfdHJpZV90b19mbGF0X3BhdGhzKHRyaWUsIHByZWZpeD1Ob25lKToK
KyAgICAiIiJDb252ZXJ0cyB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBpbiB0aGUgZ2l2ZW4gdHJp
ZSB0byBmbGF0IHBhdGhzLCBwcmVwZW5kaW5nIGEgcHJlZml4IHRvIGVhY2guIiIiCisgICAgcmVz
dWx0ID0ge30KKyAgICBmb3IgbmFtZSwgZGF0YSBpbiB0cmllLml0ZXJpdGVtcygpOgorICAgICAg
ICBpZiBwcmVmaXg6CisgICAgICAgICAgICBuYW1lID0gcHJlZml4ICsgIi8iICsgbmFtZQorCisg
ICAgICAgIGlmIG5vdCAicmVzdWx0cyIgaW4gZGF0YToKKyAgICAgICAgICAgIHJlc3VsdC51cGRh
dGUoY29udmVydF90cmllX3RvX2ZsYXRfcGF0aHMoZGF0YSwgbmFtZSkpCisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICByZXN1bHRbbmFtZV0gPSBkYXRhCisKKyAgICByZXR1cm4gcmVzdWx0CisK
KworZGVmIGFkZF9wYXRoX3RvX3RyaWUocGF0aCwgdmFsdWUsIHRyaWUpOgorICAgICIiIkluc2Vy
dHMgYSBzaW5nbGUgZmxhdCBkaXJlY3RvcnkgcGF0aCBhbmQgYXNzb2NpYXRlZCB2YWx1ZSBpbnRv
IGEgZGlyZWN0b3J5IHRyaWUgc3RydWN0dXJlLiIiIgorICAgIGlmIG5vdCAiLyIgaW4gcGF0aDoK
KyAgICAgICAgdHJpZVtwYXRoXSA9IHZhbHVlCisgICAgICAgIHJldHVybgorCisgICAgZGlyZWN0
b3J5LCBzbGFzaCwgcmVzdCA9IHBhdGgucGFydGl0aW9uKCIvIikKKyAgICBpZiBub3QgZGlyZWN0
b3J5IGluIHRyaWU6CisgICAgICAgIHRyaWVbZGlyZWN0b3J5XSA9IHt9CisgICAgYWRkX3BhdGhf
dG9fdHJpZShyZXN0LCB2YWx1ZSwgdHJpZVtkaXJlY3RvcnldKQorCiBkZWYgdGVzdF90aW1pbmdz
X3RyaWUocG9ydCwgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpOgogICAgICIiIkJyZWFrcyBhIGZp
bGVuYW1lIGludG8gY2h1bmtzIGJ5IGRpcmVjdG9yeSBhbmQgcHV0cyB0aGUgdGVzdCB0aW1lIGFz
IGEgdmFsdWUgaW4gdGhlIGxvd2VzdCBwYXJ0LCBlLmcuCiAgICAgZm9vL2Jhci9iYXouaHRtbDog
MW1zCkBAIC04OCwxNiArMTE1LDggQEAgZGVmIHRlc3RfdGltaW5nc190cmllKHBvcnQsIGluZGl2
aWR1YWxfdGVzdF90aW1pbmdzKToKICAgICAgICAgICAgICMgRklYTUU6IEhhbmRsZSB0aGlzIGJl
dHRlci4gTm9uLWxheW91dCB0ZXN0cyBzaG91bGRuJ3QgYmUgcmVsYXRpdml6ZWQuCiAgICAgICAg
ICAgICB0ZXN0ID0gdGVzdF9yZXN1bHQuZmlsZW5hbWUKIAotICAgICAgICBwYXJ0cyA9IHRlc3Qu
c3BsaXQoJy8nKQotICAgICAgICBjdXJyZW50X21hcCA9IHRyaWUKLSAgICAgICAgZm9yIGksIHBh
cnQgaW4gZW51bWVyYXRlKHBhcnRzKToKLSAgICAgICAgICAgIGlmIGkgPT0gKGxlbihwYXJ0cykg
LSAxKToKLSAgICAgICAgICAgICAgICBjdXJyZW50X21hcFtwYXJ0XSA9IGludCgxMDAwICogdGVz
dF9yZXN1bHQudGVzdF9ydW5fdGltZSkKLSAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBh
ZGRfcGF0aF90b190cmllKHRlc3QsIGludCgxMDAwICogdGVzdF9yZXN1bHQudGVzdF9ydW5fdGlt
ZSksIHRyaWUpCiAKLSAgICAgICAgICAgIGlmIHBhcnQgbm90IGluIGN1cnJlbnRfbWFwOgotICAg
ICAgICAgICAgICAgIGN1cnJlbnRfbWFwW3BhcnRdID0ge30KLSAgICAgICAgICAgIGN1cnJlbnRf
bWFwID0gY3VycmVudF9tYXBbcGFydF0KICAgICByZXR1cm4gdHJpZQogCiAjIEZJWE1FOiBXZSBh
bHJlYWR5IGhhdmUgYSBUZXN0UmVzdWx0IGNsYXNzIGluIHRlc3RfcmVzdWx0cy5weQpAQCAtMTUz
LDcgKzE3Miw3IEBAIGNsYXNzIEpTT05SZXN1bHRzR2VuZXJhdG9yQmFzZShvYmplY3QpOgogICAg
ICAgICAgICAgICAgICAgICAgICAgVGVzdFJlc3VsdC5GQUlMUzogRkFJTF9SRVNVTFQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBUZXN0UmVzdWx0LkZMQUtZOiBGTEFLWV9SRVNVTFR9CiAKLSAg
ICBWRVJTSU9OID0gMworICAgIFZFUlNJT04gPSA0CiAgICAgVkVSU0lPTl9LRVkgPSAidmVyc2lv
biIKICAgICBSRVNVTFRTID0gInJlc3VsdHMiCiAgICAgVElNRVMgPSAidGltZXMiCkBAIC0yNzEs
NyArMjkwLDggQEAgY2xhc3MgSlNPTlJlc3VsdHNHZW5lcmF0b3JCYXNlKG9iamVjdCk6CiAgICAg
ICAgICMgVXBkYXRlIHRoZSBhbGwgZmFpbGluZyB0ZXN0cyB3aXRoIHJlc3VsdCB0eXBlIGFuZCB0
aW1lLgogICAgICAgICB0ZXN0cyA9IHJlc3VsdHNfZm9yX2J1aWxkZXJbc2VsZi5URVNUU10KICAg
ICAgICAgYWxsX2ZhaWxpbmdfdGVzdHMgPSBzZWxmLl9nZXRfZmFpbGVkX3Rlc3RfbmFtZXMoKQot
ICAgICAgICBhbGxfZmFpbGluZ190ZXN0cy51cGRhdGUodGVzdHMuaXRlcmtleXMoKSkKKyAgICAg
ICAgYWxsX2ZhaWxpbmdfdGVzdHMudXBkYXRlKGNvbnZlcnRfdHJpZV90b19mbGF0X3BhdGhzKHRl
c3RzKSkKKwogICAgICAgICBmb3IgdGVzdCBpbiBhbGxfZmFpbGluZ190ZXN0czoKICAgICAgICAg
ICAgIHNlbGYuX2luc2VydF90ZXN0X3RpbWVfYW5kX3Jlc3VsdCh0ZXN0LCB0ZXN0cykKIApAQCAt
NTEyLDYgKzUzMiw3IEBAIGNsYXNzIEpTT05SZXN1bHRzR2VuZXJhdG9yQmFzZShvYmplY3QpOgog
ICAgICAgICAgICAgaW50KHRpbWUudGltZSgpKSwKICAgICAgICAgICAgIHNlbGYuVElNRSkKIAor
CiAgICAgZGVmIF9pbnNlcnRfdGVzdF90aW1lX2FuZF9yZXN1bHQoc2VsZiwgdGVzdF9uYW1lLCB0
ZXN0cyk6CiAgICAgICAgICIiIiBJbnNlcnQgYSB0ZXN0IGl0ZW0gd2l0aCBpdHMgcmVzdWx0cyB0
byB0aGUgZ2l2ZW4gdGVzdHMgZGljdGlvbmFyeS4KIApAQCAtNTIyLDMyICs1NDMsNTggQEAgY2xh
c3MgSlNPTlJlc3VsdHNHZW5lcmF0b3JCYXNlKG9iamVjdCk6CiAgICAgICAgIHJlc3VsdCA9IHNl
bGYuX2dldF9yZXN1bHRfY2hhcih0ZXN0X25hbWUpCiAgICAgICAgIHRpbWUgPSBzZWxmLl9nZXRf
dGVzdF90aW1pbmcodGVzdF9uYW1lKQogCi0gICAgICAgIGlmIHRlc3RfbmFtZSBub3QgaW4gdGVz
dHM6Ci0gICAgICAgICAgICB0ZXN0c1t0ZXN0X25hbWVdID0gc2VsZi5fY3JlYXRlX3Jlc3VsdHNf
YW5kX3RpbWVzX2pzb24oKQorICAgICAgICB0aGlzX3Rlc3QgPSB0ZXN0cworICAgICAgICBmb3Ig
c2VnbWVudCBpbiB0ZXN0X25hbWUuc3BsaXQoIi8iKToKKyAgICAgICAgICAgIGlmIHNlZ21lbnQg
bm90IGluIHRoaXNfdGVzdDoKKyAgICAgICAgICAgICAgICB0aGlzX3Rlc3Rbc2VnbWVudF0gPSB7
fQorICAgICAgICAgICAgdGhpc190ZXN0ID0gdGhpc190ZXN0W3NlZ21lbnRdCisKKyAgICAgICAg
aWYgbm90IGxlbih0aGlzX3Rlc3QpOgorICAgICAgICAgICAgc2VsZi5fcG9wdWxhdGVfcmVzdWx0
c19hbmRfdGltZXNfanNvbih0aGlzX3Rlc3QpCiAKLSAgICAgICAgdGhpc1Rlc3QgPSB0ZXN0c1t0
ZXN0X25hbWVdCi0gICAgICAgIGlmIHNlbGYuUkVTVUxUUyBpbiB0aGlzVGVzdDoKLSAgICAgICAg
ICAgIHNlbGYuX2luc2VydF9pdGVtX3J1bl9sZW5ndGhfZW5jb2RlZChyZXN1bHQsIHRoaXNUZXN0
W3NlbGYuUkVTVUxUU10pCisgICAgICAgIGlmIHNlbGYuUkVTVUxUUyBpbiB0aGlzX3Rlc3Q6Cisg
ICAgICAgICAgICBzZWxmLl9pbnNlcnRfaXRlbV9ydW5fbGVuZ3RoX2VuY29kZWQocmVzdWx0LCB0
aGlzX3Rlc3Rbc2VsZi5SRVNVTFRTXSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHRoaXNU
ZXN0W3NlbGYuUkVTVUxUU10gPSBbWzEsIHJlc3VsdF1dCisgICAgICAgICAgICB0aGlzX3Rlc3Rb
c2VsZi5SRVNVTFRTXSA9IFtbMSwgcmVzdWx0XV0KIAotICAgICAgICBpZiBzZWxmLlRJTUVTIGlu
IHRoaXNUZXN0OgotICAgICAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1fcnVuX2xlbmd0aF9lbmNv
ZGVkKHRpbWUsIHRoaXNUZXN0W3NlbGYuVElNRVNdKQorICAgICAgICBpZiBzZWxmLlRJTUVTIGlu
IHRoaXNfdGVzdDoKKyAgICAgICAgICAgIHNlbGYuX2luc2VydF9pdGVtX3J1bl9sZW5ndGhfZW5j
b2RlZCh0aW1lLCB0aGlzX3Rlc3Rbc2VsZi5USU1FU10pCiAgICAgICAgIGVsc2U6Ci0gICAgICAg
ICAgICB0aGlzVGVzdFtzZWxmLlRJTUVTXSA9IFtbMSwgdGltZV1dCisgICAgICAgICAgICB0aGlz
X3Rlc3Rbc2VsZi5USU1FU10gPSBbWzEsIHRpbWVdXQogCiAgICAgZGVmIF9jb252ZXJ0X2pzb25f
dG9fY3VycmVudF92ZXJzaW9uKHNlbGYsIHJlc3VsdHNfanNvbik6CiAgICAgICAgICIiIklmIHRo
ZSBKU09OIGRvZXMgbm90IG1hdGNoIHRoZSBjdXJyZW50IHZlcnNpb24sIGNvbnZlcnRzIGl0IHRv
IHRoZQogICAgICAgICBjdXJyZW50IHZlcnNpb24gYW5kIGFkZHMgaW4gdGhlIG5ldyB2ZXJzaW9u
IG51bWJlci4KICAgICAgICAgIiIiCi0gICAgICAgIGlmIChzZWxmLlZFUlNJT05fS0VZIGluIHJl
c3VsdHNfanNvbiBhbmQKLSAgICAgICAgICAgIHJlc3VsdHNfanNvbltzZWxmLlZFUlNJT05fS0VZ
XSA9PSBzZWxmLlZFUlNJT04pOgotICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIHNlbGYu
VkVSU0lPTl9LRVkgaW4gcmVzdWx0c19qc29uOgorICAgICAgICAgICAgYXJjaGl2ZV92ZXJzaW9u
ID0gcmVzdWx0c19qc29uW3NlbGYuVkVSU0lPTl9LRVldCisgICAgICAgICAgICBpZiBhcmNoaXZl
X3ZlcnNpb24gPT0gc2VsZi5WRVJTSU9OOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgYXJjaGl2ZV92ZXJzaW9uID0gMworCisgICAgICAgICMgdmVy
c2lvbiAzLT40CisgICAgICAgIGlmIGFyY2hpdmVfdmVyc2lvbiA9PSAzOgorICAgICAgICAgICAg
bnVtX3Jlc3VsdHMgPSBsZW4ocmVzdWx0c19qc29uLnZhbHVlcygpKQorICAgICAgICAgICAgZm9y
IGJ1aWxkZXIsIHJlc3VsdHMgaW4gcmVzdWx0c19qc29uLml0ZXJpdGVtcygpOgorICAgICAgICAg
ICAgICAgIHNlbGYuX2NvbnZlcnRfdGVzdHNfdG9fdHJpZShyZXN1bHRzKQogCiAgICAgICAgIHJl
c3VsdHNfanNvbltzZWxmLlZFUlNJT05fS0VZXSA9IHNlbGYuVkVSU0lPTgogCi0gICAgZGVmIF9j
cmVhdGVfcmVzdWx0c19hbmRfdGltZXNfanNvbihzZWxmKToKLSAgICAgICAgcmVzdWx0c19hbmRf
dGltZXMgPSB7fQorICAgIGRlZiBfY29udmVydF90ZXN0c190b190cmllKHNlbGYsIHJlc3VsdHMp
OgorICAgICAgICBpZiBub3Qgc2VsZi5URVNUUyBpbiByZXN1bHRzOgorICAgICAgICAgICAgcmV0
dXJuCisKKyAgICAgICAgdGVzdF9yZXN1bHRzID0gcmVzdWx0c1tzZWxmLlRFU1RTXQorICAgICAg
ICB0ZXN0X3Jlc3VsdHNfdHJpZSA9IHt9CisgICAgICAgIGZvciB0ZXN0IGluIHRlc3RfcmVzdWx0
cy5pdGVya2V5cygpOgorICAgICAgICAgICAgdGVzdF9wYXRoID0gc2VsZi5fZ2V0X3BhdGhfcmVs
YXRpdmVfdG9fbGF5b3V0X3Rlc3Rfcm9vdCh0ZXN0KQorICAgICAgICAgICAgc2luZ2xlX3Rlc3Rf
cmVzdWx0ID0gdGVzdF9yZXN1bHRzW3Rlc3RdCisgICAgICAgICAgICBhZGRfcGF0aF90b190cmll
KHRlc3RfcGF0aCwgc2luZ2xlX3Rlc3RfcmVzdWx0LCB0ZXN0X3Jlc3VsdHNfdHJpZSkKKworICAg
ICAgICByZXN1bHRzW3NlbGYuVEVTVFNdID0gdGVzdF9yZXN1bHRzX3RyaWUKKworICAgIGRlZiBf
cG9wdWxhdGVfcmVzdWx0c19hbmRfdGltZXNfanNvbihzZWxmLCByZXN1bHRzX2FuZF90aW1lcyk6
CiAgICAgICAgIHJlc3VsdHNfYW5kX3RpbWVzW3NlbGYuUkVTVUxUU10gPSBbXQogICAgICAgICBy
ZXN1bHRzX2FuZF90aW1lc1tzZWxmLlRJTUVTXSA9IFtdCiAgICAgICAgIHJldHVybiByZXN1bHRz
X2FuZF90aW1lcwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvcl91bml0dGVzdC5weSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fcmVz
dWx0c19nZW5lcmF0b3JfdW5pdHRlc3QucHkKaW5kZXggMjQ4OTExYTk2MmNhMGY5MDc1YmYzYmY5
NzA0Yjk2ZWUwNThhYWYwYy4uYjQ1YWRiZmRiNmNmMGM5ODViYWM4MWFmNDkyYWU3MWJlY2ZmMjc5
ZCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0
X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvcl91bml0dGVzdC5weQorKysgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNf
Z2VuZXJhdG9yX3VuaXR0ZXN0LnB5CkBAIC0xNTYsOCArMTU2LDcgQEAgY2xhc3MgSlNPTkdlbmVy
YXRvclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBpZiBmYWlsZWRfY291bnRfbWFw
OgogICAgICAgICAgICAgdGVzdHMgPSBidWlsZGluZm9bSlJHLlRFU1RTXQogICAgICAgICAgICAg
Zm9yIHRlc3RfbmFtZSBpbiBmYWlsZWRfY291bnRfbWFwLml0ZXJrZXlzKCk6Ci0gICAgICAgICAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKHRlc3RfbmFtZSBpbiB0ZXN0cykKLSAgICAgICAgICAgICAg
ICB0ZXN0ID0gdGVzdHNbdGVzdF9uYW1lXQorICAgICAgICAgICAgICAgIHRlc3QgPSBzZWxmLl9m
aW5kX3Rlc3RfaW5fdHJpZSh0ZXN0X25hbWUsIHRlc3RzKQogCiAgICAgICAgICAgICAgICAgZmFp
bGVkID0gMAogICAgICAgICAgICAgICAgIGZvciByZXN1bHQgaW4gdGVzdFtKUkcuUkVTVUxUU106
CkBAIC0xNzQsNiArMTczLDE0IEBAIGNsYXNzIEpTT05HZW5lcmF0b3JUZXN0KHVuaXR0ZXN0LlRl
c3RDYXNlKToKICAgICAgICAgaWYgZml4YWJsZV9jb3VudDoKICAgICAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoc3VtKGJ1aWxkaW5mb1tKUkcuRklYQUJMRV9DT1VOVF0pLCBmaXhhYmxlX2NvdW50
KQogCisgICAgZGVmIF9maW5kX3Rlc3RfaW5fdHJpZShzZWxmLCBwYXRoLCB0cmllKToKKyAgICAg
ICAgc3ViX3RyaWUgPSB0cmllCisgICAgICAgIG5vZGVzID0gcGF0aC5zcGxpdCgiLyIpCisgICAg
ICAgIGZvciBub2RlIGluIG5vZGVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vZGUg
aW4gc3ViX3RyaWUpCisgICAgICAgICAgICBzdWJfdHJpZSA9IHN1Yl90cmllW25vZGVdCisgICAg
ICAgIHJldHVybiBzdWJfdHJpZQorCiAgICAgZGVmIHRlc3RfanNvbl9nZW5lcmF0aW9uKHNlbGYp
OgogICAgICAgICBzZWxmLl90ZXN0X2pzb25fZ2VuZXJhdGlvbihbXSwgW10pCiAgICAgICAgIHNl
bGYuX3Rlc3RfanNvbl9nZW5lcmF0aW9uKFsnQTEnLCAnQjEnXSwgW10pCkBAIC0xOTcsNiArMjA0
LDEwIEBAIGNsYXNzIEpTT05HZW5lcmF0b3JUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAg
ICAgICAgIFsnRkxBS1lfQicsICdESVNBQkxFRF9DJywgJ0ZBSUxTX0QnXSwKICAgICAgICAgICAg
IFsnQScsICdGTEFLWV9FJ10pCiAKKyAgICBkZWYgdGVzdF9oaWVyYXJjaGljYWxfanNvbl9nZW5l
cmF0aW9uKHNlbGYpOgorICAgICAgICAjIEZJWE1FOiBSZS13b3JrIHRlc3RzIHRvIGJlIG1vcmUg
Y29tcHJlaGVuc2libGUgYW5kIGNvbXByZWhlbnNpdmUuCisgICAgICAgIHNlbGYuX3Rlc3RfanNv
bl9nZW5lcmF0aW9uKFsnZm9vL0EnXSwgWydmb28vQicsICdiYXIvQyddKQorCiAgICAgZGVmIHRl
c3RfdGVzdF90aW1pbmdzX3RyaWUoc2VsZik6CiAgICAgICAgIHRlc3RfcG9ydCA9IHRlc3QuVGVz
dFBvcnQoKQogICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncyA9IFtdCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94717</attachid>
            <date>2011-05-24 16:59:41 -0700</date>
            <delta_ts>2011-06-19 22:43:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60869-20110525095939.patch</filename>
            <type>text/plain</type>
            <size>10705</size>
            <attacher name="Alice Boxhall">aboxhall</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODY5MjIKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA1MjlhMjIxODY5ZmU5OGIwMWUxMjQ2NDhjZGEzMGZlMTI3
M2MxMTMyLi5iOWU0ODU4ZTA0MTcyYjBjMjZlMDI0NDMzYTc5NDRkZTBhNjVjNzMwIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMTEtMDUtMTUgIEFsaWNlIEJveGhhbGwgIDxhYm94aGFsbEBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ29udmVydCBq
c29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5IHRvIG91dHB1dCB2ZXJzaW9uIDQgSlNPTi4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwODY5CisKKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xh
eW91dF9yZXN1bHRzX2dlbmVyYXRvci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5OgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25f
cmVzdWx0c19nZW5lcmF0b3JfdW5pdHRlc3QucHk6CisKIDIwMTEtMDUtMTkgIERtaXRyeSBMb21v
diAgPGRzbG9tb3ZAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJvYmVu
LgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0
X3BhY2thZ2UvanNvbl9sYXlvdXRfcmVzdWx0c19nZW5lcmF0b3IucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xheW91dF9yZXN1bHRz
X2dlbmVyYXRvci5weQppbmRleCBkYmIxNmMwM2UyNjMzMzUwOTQxMjBlY2VhZThjNzA2N2Q4ZDc4
MGYxLi5lYzI4MTY4ZjY2NjIwMGFiYWViNTU4ZDg4OTYyMzE3MjU5YjY4ZTA4IDEwMDY0NAotLS0g
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29u
X2xheW91dF9yZXN1bHRzX2dlbmVyYXRvci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xheW91dF9yZXN1bHRzX2dlbmVyYXRv
ci5weQpAQCAtMTMwLDMwICsxMzAsNiBAQCBjbGFzcyBKU09OTGF5b3V0UmVzdWx0c0dlbmVyYXRv
cihqc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLkpTT05SZXN1bHRzR2VuZXJhdG9yQmFzZQogICAgICAg
ICByZXR1cm4gc2VsZi5fZ2V0X21vZGlmaWVyX2NoYXIodGVzdF9uYW1lKQogCiAgICAgIyBvdmVy
cmlkZQotICAgIGRlZiBfY29udmVydF9qc29uX3RvX2N1cnJlbnRfdmVyc2lvbihzZWxmLCByZXN1
bHRzX2pzb24pOgotICAgICAgICBhcmNoaXZlX3ZlcnNpb24gPSBOb25lCi0gICAgICAgIGlmIHNl
bGYuVkVSU0lPTl9LRVkgaW4gcmVzdWx0c19qc29uOgotICAgICAgICAgICAgYXJjaGl2ZV92ZXJz
aW9uID0gcmVzdWx0c19qc29uW3NlbGYuVkVSU0lPTl9LRVldCi0KLSAgICAgICAgc3VwZXIoSlNP
TkxheW91dFJlc3VsdHNHZW5lcmF0b3IsCi0gICAgICAgICAgICAgIHNlbGYpLl9jb252ZXJ0X2pz
b25fdG9fY3VycmVudF92ZXJzaW9uKHJlc3VsdHNfanNvbikKLQotICAgICAgICAjIHZlcnNpb24g
Mi0+MwotICAgICAgICBpZiBhcmNoaXZlX3ZlcnNpb24gPT0gMjoKLSAgICAgICAgICAgIGZvciBy
ZXN1bHRzX2Zvcl9idWlsZGVyIGluIHJlc3VsdHNfanNvbi5pdGVydmFsdWVzKCk6Ci0gICAgICAg
ICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICB0ZXN0X3Jlc3VsdHMgPSByZXN1bHRz
X2Zvcl9idWlsZGVyW3NlbGYuVEVTVFNdCi0gICAgICAgICAgICAgICAgZXhjZXB0OgotICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZQotCi0gICAgICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0X3Jl
c3VsdHM6Ci0gICAgICAgICAgICAgICAgIyBNYWtlIHN1cmUgYWxsIHBhdGhzIGFyZSByZWxhdGl2
ZQotICAgICAgICAgICAgICAgIHRlc3RfcGF0aCA9IHNlbGYuX2dldF9wYXRoX3JlbGF0aXZlX3Rv
X2xheW91dF90ZXN0X3Jvb3QodGVzdCkKLSAgICAgICAgICAgICAgICBpZiB0ZXN0X3BhdGggIT0g
dGVzdDoKLSAgICAgICAgICAgICAgICAgICAgdGVzdF9yZXN1bHRzW3Rlc3RfcGF0aF0gPSB0ZXN0
X3Jlc3VsdHNbdGVzdF0KLSAgICAgICAgICAgICAgICAgICAgZGVsIHRlc3RfcmVzdWx0c1t0ZXN0
XQotCi0gICAgIyBvdmVycmlkZQogICAgIGRlZiBfaW5zZXJ0X2ZhaWx1cmVfc3VtbWFyaWVzKHNl
bGYsIHJlc3VsdHNfZm9yX2J1aWxkZXIpOgogICAgICAgICBzdW1tYXJ5ID0gc2VsZi5fcmVzdWx0
X3N1bW1hcnkKIApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5weSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5l
cmF0b3IucHkKaW5kZXggODJkMjFlNjJmNjRjZjdjMTQ5ZTZjMDEzOTg3ODA1MzlmMTNmMzAyYi4u
NmMxZmIwYjkxYTE0YWFmZGMyMGFmZGY1NjhlYzgzMzc4YjQyMTZhMCAxMDA2NDQKLS0tIGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1
bHRzX2dlbmVyYXRvci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CkBAIC02Nyw2ICs2Nywz
MyBAQCBkZWYgd3JpdGVfanNvbihmaWxlc3lzdGVtLCBqc29uX29iamVjdCwgZmlsZV9wYXRoKToK
ICAgICBqc29uX3N0cmluZyA9IF9KU09OX1BSRUZJWCArIGpzb25fZGF0YSArIF9KU09OX1NVRkZJ
WAogICAgIGZpbGVzeXN0ZW0ud3JpdGVfdGV4dF9maWxlKGZpbGVfcGF0aCwganNvbl9zdHJpbmcp
CiAKKworZGVmIGNvbnZlcnRfdHJpZV90b19mbGF0X3BhdGhzKHRyaWUsIHByZWZpeD1Ob25lKToK
KyAgICAiIiJDb252ZXJ0cyB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBpbiB0aGUgZ2l2ZW4gdHJp
ZSB0byBmbGF0IHBhdGhzLCBwcmVwZW5kaW5nIGEgcHJlZml4IHRvIGVhY2guIiIiCisgICAgcmVz
dWx0ID0ge30KKyAgICBmb3IgbmFtZSwgZGF0YSBpbiB0cmllLml0ZXJpdGVtcygpOgorICAgICAg
ICBpZiBwcmVmaXg6CisgICAgICAgICAgICBuYW1lID0gcHJlZml4ICsgIi8iICsgbmFtZQorCisg
ICAgICAgIGlmIG5vdCAicmVzdWx0cyIgaW4gZGF0YToKKyAgICAgICAgICAgIHJlc3VsdC51cGRh
dGUoY29udmVydF90cmllX3RvX2ZsYXRfcGF0aHMoZGF0YSwgbmFtZSkpCisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICByZXN1bHRbbmFtZV0gPSBkYXRhCisKKyAgICByZXR1cm4gcmVzdWx0CisK
KworZGVmIGFkZF9wYXRoX3RvX3RyaWUocGF0aCwgdmFsdWUsIHRyaWUpOgorICAgICIiIkluc2Vy
dHMgYSBzaW5nbGUgZmxhdCBkaXJlY3RvcnkgcGF0aCBhbmQgYXNzb2NpYXRlZCB2YWx1ZSBpbnRv
IGEgZGlyZWN0b3J5IHRyaWUgc3RydWN0dXJlLiIiIgorICAgIGlmIG5vdCAiLyIgaW4gcGF0aDoK
KyAgICAgICAgdHJpZVtwYXRoXSA9IHZhbHVlCisgICAgICAgIHJldHVybgorCisgICAgZGlyZWN0
b3J5LCBzbGFzaCwgcmVzdCA9IHBhdGgucGFydGl0aW9uKCIvIikKKyAgICBpZiBub3QgZGlyZWN0
b3J5IGluIHRyaWU6CisgICAgICAgIHRyaWVbZGlyZWN0b3J5XSA9IHt9CisgICAgYWRkX3BhdGhf
dG9fdHJpZShyZXN0LCB2YWx1ZSwgdHJpZVtkaXJlY3RvcnldKQorCiBkZWYgdGVzdF90aW1pbmdz
X3RyaWUocG9ydCwgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpOgogICAgICIiIkJyZWFrcyBhIGZp
bGVuYW1lIGludG8gY2h1bmtzIGJ5IGRpcmVjdG9yeSBhbmQgcHV0cyB0aGUgdGVzdCB0aW1lIGFz
IGEgdmFsdWUgaW4gdGhlIGxvd2VzdCBwYXJ0LCBlLmcuCiAgICAgZm9vL2Jhci9iYXouaHRtbDog
MW1zCkBAIC04OCwxNiArMTE1LDggQEAgZGVmIHRlc3RfdGltaW5nc190cmllKHBvcnQsIGluZGl2
aWR1YWxfdGVzdF90aW1pbmdzKToKICAgICAgICAgICAgICMgRklYTUU6IEhhbmRsZSB0aGlzIGJl
dHRlci4gTm9uLWxheW91dCB0ZXN0cyBzaG91bGRuJ3QgYmUgcmVsYXRpdml6ZWQuCiAgICAgICAg
ICAgICB0ZXN0ID0gdGVzdF9yZXN1bHQuZmlsZW5hbWUKIAotICAgICAgICBwYXJ0cyA9IHRlc3Qu
c3BsaXQoJy8nKQotICAgICAgICBjdXJyZW50X21hcCA9IHRyaWUKLSAgICAgICAgZm9yIGksIHBh
cnQgaW4gZW51bWVyYXRlKHBhcnRzKToKLSAgICAgICAgICAgIGlmIGkgPT0gKGxlbihwYXJ0cykg
LSAxKToKLSAgICAgICAgICAgICAgICBjdXJyZW50X21hcFtwYXJ0XSA9IGludCgxMDAwICogdGVz
dF9yZXN1bHQudGVzdF9ydW5fdGltZSkKLSAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBh
ZGRfcGF0aF90b190cmllKHRlc3QsIGludCgxMDAwICogdGVzdF9yZXN1bHQudGVzdF9ydW5fdGlt
ZSksIHRyaWUpCiAKLSAgICAgICAgICAgIGlmIHBhcnQgbm90IGluIGN1cnJlbnRfbWFwOgotICAg
ICAgICAgICAgICAgIGN1cnJlbnRfbWFwW3BhcnRdID0ge30KLSAgICAgICAgICAgIGN1cnJlbnRf
bWFwID0gY3VycmVudF9tYXBbcGFydF0KICAgICByZXR1cm4gdHJpZQogCiAjIEZJWE1FOiBXZSBh
bHJlYWR5IGhhdmUgYSBUZXN0UmVzdWx0IGNsYXNzIGluIHRlc3RfcmVzdWx0cy5weQpAQCAtMTUz
LDcgKzE3Miw3IEBAIGNsYXNzIEpTT05SZXN1bHRzR2VuZXJhdG9yQmFzZShvYmplY3QpOgogICAg
ICAgICAgICAgICAgICAgICAgICAgVGVzdFJlc3VsdC5GQUlMUzogRkFJTF9SRVNVTFQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBUZXN0UmVzdWx0LkZMQUtZOiBGTEFLWV9SRVNVTFR9CiAKLSAg
ICBWRVJTSU9OID0gMworICAgIFZFUlNJT04gPSA0CiAgICAgVkVSU0lPTl9LRVkgPSAidmVyc2lv
biIKICAgICBSRVNVTFRTID0gInJlc3VsdHMiCiAgICAgVElNRVMgPSAidGltZXMiCkBAIC0yNzEs
NyArMjkwLDggQEAgY2xhc3MgSlNPTlJlc3VsdHNHZW5lcmF0b3JCYXNlKG9iamVjdCk6CiAgICAg
ICAgICMgVXBkYXRlIHRoZSBhbGwgZmFpbGluZyB0ZXN0cyB3aXRoIHJlc3VsdCB0eXBlIGFuZCB0
aW1lLgogICAgICAgICB0ZXN0cyA9IHJlc3VsdHNfZm9yX2J1aWxkZXJbc2VsZi5URVNUU10KICAg
ICAgICAgYWxsX2ZhaWxpbmdfdGVzdHMgPSBzZWxmLl9nZXRfZmFpbGVkX3Rlc3RfbmFtZXMoKQot
ICAgICAgICBhbGxfZmFpbGluZ190ZXN0cy51cGRhdGUodGVzdHMuaXRlcmtleXMoKSkKKyAgICAg
ICAgYWxsX2ZhaWxpbmdfdGVzdHMudXBkYXRlKGNvbnZlcnRfdHJpZV90b19mbGF0X3BhdGhzKHRl
c3RzKSkKKwogICAgICAgICBmb3IgdGVzdCBpbiBhbGxfZmFpbGluZ190ZXN0czoKICAgICAgICAg
ICAgIHNlbGYuX2luc2VydF90ZXN0X3RpbWVfYW5kX3Jlc3VsdCh0ZXN0LCB0ZXN0cykKIApAQCAt
NTEyLDYgKzUzMiw3IEBAIGNsYXNzIEpTT05SZXN1bHRzR2VuZXJhdG9yQmFzZShvYmplY3QpOgog
ICAgICAgICAgICAgaW50KHRpbWUudGltZSgpKSwKICAgICAgICAgICAgIHNlbGYuVElNRSkKIAor
CiAgICAgZGVmIF9pbnNlcnRfdGVzdF90aW1lX2FuZF9yZXN1bHQoc2VsZiwgdGVzdF9uYW1lLCB0
ZXN0cyk6CiAgICAgICAgICIiIiBJbnNlcnQgYSB0ZXN0IGl0ZW0gd2l0aCBpdHMgcmVzdWx0cyB0
byB0aGUgZ2l2ZW4gdGVzdHMgZGljdGlvbmFyeS4KIApAQCAtNTIyLDMyICs1NDMsNTggQEAgY2xh
c3MgSlNPTlJlc3VsdHNHZW5lcmF0b3JCYXNlKG9iamVjdCk6CiAgICAgICAgIHJlc3VsdCA9IHNl
bGYuX2dldF9yZXN1bHRfY2hhcih0ZXN0X25hbWUpCiAgICAgICAgIHRpbWUgPSBzZWxmLl9nZXRf
dGVzdF90aW1pbmcodGVzdF9uYW1lKQogCi0gICAgICAgIGlmIHRlc3RfbmFtZSBub3QgaW4gdGVz
dHM6Ci0gICAgICAgICAgICB0ZXN0c1t0ZXN0X25hbWVdID0gc2VsZi5fY3JlYXRlX3Jlc3VsdHNf
YW5kX3RpbWVzX2pzb24oKQorICAgICAgICB0aGlzX3Rlc3QgPSB0ZXN0cworICAgICAgICBmb3Ig
c2VnbWVudCBpbiB0ZXN0X25hbWUuc3BsaXQoIi8iKToKKyAgICAgICAgICAgIGlmIHNlZ21lbnQg
bm90IGluIHRoaXNfdGVzdDoKKyAgICAgICAgICAgICAgICB0aGlzX3Rlc3Rbc2VnbWVudF0gPSB7
fQorICAgICAgICAgICAgdGhpc190ZXN0ID0gdGhpc190ZXN0W3NlZ21lbnRdCisKKyAgICAgICAg
aWYgbm90IGxlbih0aGlzX3Rlc3QpOgorICAgICAgICAgICAgc2VsZi5fcG9wdWxhdGVfcmVzdWx0
c19hbmRfdGltZXNfanNvbih0aGlzX3Rlc3QpCiAKLSAgICAgICAgdGhpc1Rlc3QgPSB0ZXN0c1t0
ZXN0X25hbWVdCi0gICAgICAgIGlmIHNlbGYuUkVTVUxUUyBpbiB0aGlzVGVzdDoKLSAgICAgICAg
ICAgIHNlbGYuX2luc2VydF9pdGVtX3J1bl9sZW5ndGhfZW5jb2RlZChyZXN1bHQsIHRoaXNUZXN0
W3NlbGYuUkVTVUxUU10pCisgICAgICAgIGlmIHNlbGYuUkVTVUxUUyBpbiB0aGlzX3Rlc3Q6Cisg
ICAgICAgICAgICBzZWxmLl9pbnNlcnRfaXRlbV9ydW5fbGVuZ3RoX2VuY29kZWQocmVzdWx0LCB0
aGlzX3Rlc3Rbc2VsZi5SRVNVTFRTXSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHRoaXNU
ZXN0W3NlbGYuUkVTVUxUU10gPSBbWzEsIHJlc3VsdF1dCisgICAgICAgICAgICB0aGlzX3Rlc3Rb
c2VsZi5SRVNVTFRTXSA9IFtbMSwgcmVzdWx0XV0KIAotICAgICAgICBpZiBzZWxmLlRJTUVTIGlu
IHRoaXNUZXN0OgotICAgICAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1fcnVuX2xlbmd0aF9lbmNv
ZGVkKHRpbWUsIHRoaXNUZXN0W3NlbGYuVElNRVNdKQorICAgICAgICBpZiBzZWxmLlRJTUVTIGlu
IHRoaXNfdGVzdDoKKyAgICAgICAgICAgIHNlbGYuX2luc2VydF9pdGVtX3J1bl9sZW5ndGhfZW5j
b2RlZCh0aW1lLCB0aGlzX3Rlc3Rbc2VsZi5USU1FU10pCiAgICAgICAgIGVsc2U6Ci0gICAgICAg
ICAgICB0aGlzVGVzdFtzZWxmLlRJTUVTXSA9IFtbMSwgdGltZV1dCisgICAgICAgICAgICB0aGlz
X3Rlc3Rbc2VsZi5USU1FU10gPSBbWzEsIHRpbWVdXQogCiAgICAgZGVmIF9jb252ZXJ0X2pzb25f
dG9fY3VycmVudF92ZXJzaW9uKHNlbGYsIHJlc3VsdHNfanNvbik6CiAgICAgICAgICIiIklmIHRo
ZSBKU09OIGRvZXMgbm90IG1hdGNoIHRoZSBjdXJyZW50IHZlcnNpb24sIGNvbnZlcnRzIGl0IHRv
IHRoZQogICAgICAgICBjdXJyZW50IHZlcnNpb24gYW5kIGFkZHMgaW4gdGhlIG5ldyB2ZXJzaW9u
IG51bWJlci4KICAgICAgICAgIiIiCi0gICAgICAgIGlmIChzZWxmLlZFUlNJT05fS0VZIGluIHJl
c3VsdHNfanNvbiBhbmQKLSAgICAgICAgICAgIHJlc3VsdHNfanNvbltzZWxmLlZFUlNJT05fS0VZ
XSA9PSBzZWxmLlZFUlNJT04pOgotICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIHNlbGYu
VkVSU0lPTl9LRVkgaW4gcmVzdWx0c19qc29uOgorICAgICAgICAgICAgYXJjaGl2ZV92ZXJzaW9u
ID0gcmVzdWx0c19qc29uW3NlbGYuVkVSU0lPTl9LRVldCisgICAgICAgICAgICBpZiBhcmNoaXZl
X3ZlcnNpb24gPT0gc2VsZi5WRVJTSU9OOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgYXJjaGl2ZV92ZXJzaW9uID0gMworCisgICAgICAgICMgdmVy
c2lvbiAzLT40CisgICAgICAgIGlmIGFyY2hpdmVfdmVyc2lvbiA9PSAzOgorICAgICAgICAgICAg
bnVtX3Jlc3VsdHMgPSBsZW4ocmVzdWx0c19qc29uLnZhbHVlcygpKQorICAgICAgICAgICAgZm9y
IGJ1aWxkZXIsIHJlc3VsdHMgaW4gcmVzdWx0c19qc29uLml0ZXJpdGVtcygpOgorICAgICAgICAg
ICAgICAgIHNlbGYuX2NvbnZlcnRfdGVzdHNfdG9fdHJpZShyZXN1bHRzKQogCiAgICAgICAgIHJl
c3VsdHNfanNvbltzZWxmLlZFUlNJT05fS0VZXSA9IHNlbGYuVkVSU0lPTgogCi0gICAgZGVmIF9j
cmVhdGVfcmVzdWx0c19hbmRfdGltZXNfanNvbihzZWxmKToKLSAgICAgICAgcmVzdWx0c19hbmRf
dGltZXMgPSB7fQorICAgIGRlZiBfY29udmVydF90ZXN0c190b190cmllKHNlbGYsIHJlc3VsdHMp
OgorICAgICAgICBpZiBub3Qgc2VsZi5URVNUUyBpbiByZXN1bHRzOgorICAgICAgICAgICAgcmV0
dXJuCisKKyAgICAgICAgdGVzdF9yZXN1bHRzID0gcmVzdWx0c1tzZWxmLlRFU1RTXQorICAgICAg
ICB0ZXN0X3Jlc3VsdHNfdHJpZSA9IHt9CisgICAgICAgIGZvciB0ZXN0IGluIHRlc3RfcmVzdWx0
cy5pdGVya2V5cygpOgorICAgICAgICAgICAgdGVzdF9wYXRoID0gc2VsZi5fZ2V0X3BhdGhfcmVs
YXRpdmVfdG9fbGF5b3V0X3Rlc3Rfcm9vdCh0ZXN0KQorICAgICAgICAgICAgc2luZ2xlX3Rlc3Rf
cmVzdWx0ID0gdGVzdF9yZXN1bHRzW3Rlc3RdCisgICAgICAgICAgICBhZGRfcGF0aF90b190cmll
KHRlc3RfcGF0aCwgc2luZ2xlX3Rlc3RfcmVzdWx0LCB0ZXN0X3Jlc3VsdHNfdHJpZSkKKworICAg
ICAgICByZXN1bHRzW3NlbGYuVEVTVFNdID0gdGVzdF9yZXN1bHRzX3RyaWUKKworICAgIGRlZiBf
cG9wdWxhdGVfcmVzdWx0c19hbmRfdGltZXNfanNvbihzZWxmLCByZXN1bHRzX2FuZF90aW1lcyk6
CiAgICAgICAgIHJlc3VsdHNfYW5kX3RpbWVzW3NlbGYuUkVTVUxUU10gPSBbXQogICAgICAgICBy
ZXN1bHRzX2FuZF90aW1lc1tzZWxmLlRJTUVTXSA9IFtdCiAgICAgICAgIHJldHVybiByZXN1bHRz
X2FuZF90aW1lcwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvcl91bml0dGVzdC5weSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fcmVz
dWx0c19nZW5lcmF0b3JfdW5pdHRlc3QucHkKaW5kZXggMjQ4OTExYTk2MmNhMGY5MDc1YmYzYmY5
NzA0Yjk2ZWUwNThhYWYwYy4uN2FjMjU0ZDQ0NDk1NmFhYjI4ZTgzNjE4NTRhZDAwMTcxNWY1Mzdm
YyAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0
X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvcl91bml0dGVzdC5weQorKysgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNf
Z2VuZXJhdG9yX3VuaXR0ZXN0LnB5CkBAIC0xNTYsOCArMTU2LDcgQEAgY2xhc3MgSlNPTkdlbmVy
YXRvclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBpZiBmYWlsZWRfY291bnRfbWFw
OgogICAgICAgICAgICAgdGVzdHMgPSBidWlsZGluZm9bSlJHLlRFU1RTXQogICAgICAgICAgICAg
Zm9yIHRlc3RfbmFtZSBpbiBmYWlsZWRfY291bnRfbWFwLml0ZXJrZXlzKCk6Ci0gICAgICAgICAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKHRlc3RfbmFtZSBpbiB0ZXN0cykKLSAgICAgICAgICAgICAg
ICB0ZXN0ID0gdGVzdHNbdGVzdF9uYW1lXQorICAgICAgICAgICAgICAgIHRlc3QgPSBzZWxmLl9m
aW5kX3Rlc3RfaW5fdHJpZSh0ZXN0X25hbWUsIHRlc3RzKQogCiAgICAgICAgICAgICAgICAgZmFp
bGVkID0gMAogICAgICAgICAgICAgICAgIGZvciByZXN1bHQgaW4gdGVzdFtKUkcuUkVTVUxUU106
CkBAIC0xNzQsNiArMTczLDE0IEBAIGNsYXNzIEpTT05HZW5lcmF0b3JUZXN0KHVuaXR0ZXN0LlRl
c3RDYXNlKToKICAgICAgICAgaWYgZml4YWJsZV9jb3VudDoKICAgICAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoc3VtKGJ1aWxkaW5mb1tKUkcuRklYQUJMRV9DT1VOVF0pLCBmaXhhYmxlX2NvdW50
KQogCisgICAgZGVmIF9maW5kX3Rlc3RfaW5fdHJpZShzZWxmLCBwYXRoLCB0cmllKToKKyAgICAg
ICAgbm9kZXMgPSBwYXRoLnNwbGl0KCIvIikKKyAgICAgICAgc3ViX3RyaWUgPSB0cmllCisgICAg
ICAgIGZvciBub2RlIGluIG5vZGVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vZGUg
aW4gc3ViX3RyaWUpCisgICAgICAgICAgICBzdWJfdHJpZSA9IHN1Yl90cmllW25vZGVdCisgICAg
ICAgIHJldHVybiBzdWJfdHJpZQorCiAgICAgZGVmIHRlc3RfanNvbl9nZW5lcmF0aW9uKHNlbGYp
OgogICAgICAgICBzZWxmLl90ZXN0X2pzb25fZ2VuZXJhdGlvbihbXSwgW10pCiAgICAgICAgIHNl
bGYuX3Rlc3RfanNvbl9nZW5lcmF0aW9uKFsnQTEnLCAnQjEnXSwgW10pCkBAIC0xOTcsNiArMjA0
LDEwIEBAIGNsYXNzIEpTT05HZW5lcmF0b3JUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAg
ICAgICAgIFsnRkxBS1lfQicsICdESVNBQkxFRF9DJywgJ0ZBSUxTX0QnXSwKICAgICAgICAgICAg
IFsnQScsICdGTEFLWV9FJ10pCiAKKyAgICBkZWYgdGVzdF9oaWVyYXJjaGljYWxfanNvbl9nZW5l
cmF0aW9uKHNlbGYpOgorICAgICAgICAjIEZJWE1FOiBSZS13b3JrIHRlc3RzIHRvIGJlIG1vcmUg
Y29tcHJlaGVuc2libGUgYW5kIGNvbXByZWhlbnNpdmUuCisgICAgICAgIHNlbGYuX3Rlc3RfanNv
bl9nZW5lcmF0aW9uKFsnZm9vL0EnXSwgWydmb28vQicsICdiYXIvQyddKQorCiAgICAgZGVmIHRl
c3RfdGVzdF90aW1pbmdzX3RyaWUoc2VsZik6CiAgICAgICAgIHRlc3RfcG9ydCA9IHRlc3QuVGVz
dFBvcnQoKQogICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncyA9IFtdCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97749</attachid>
            <date>2011-06-19 22:43:22 -0700</date>
            <delta_ts>2011-07-05 23:18:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60869-20110620154320.patch</filename>
            <type>text/plain</type>
            <size>11920</size>
            <attacher name="Alice Boxhall">aboxhall</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODkyMjMKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCBkMGZlZjUyMDg0YTM0N2I5NmNjYjQ4MTA4MzY4MzQ3MWIw
NmE1NDE5Li5hZmIzOWQ3NThlMzEzYjAzZDAyZWMzZDI0Njc4MWM3MTg3NzM0NTdiIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMTEtMDYtMTkgIEFsaWNlIEJveGhhbGwgIDxhYm94aGFsbEBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ29udmVydCBq
c29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5IHRvIG91dHB1dCB2ZXJzaW9uIDQgSlNPTi4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwODY5CisKKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xh
eW91dF9yZXN1bHRzX2dlbmVyYXRvci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5OgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25f
cmVzdWx0c19nZW5lcmF0b3JfdW5pdHRlc3QucHk6CisKIDIwMTEtMDYtMTkgIFNoZXJpZmYgQm90
ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJv
bGxpbmcgb3V0IHI4OTE5OC4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fbGF5b3V0X3Jlc3VsdHNfZ2VuZXJhdG9yLnB5
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNv
bl9sYXlvdXRfcmVzdWx0c19nZW5lcmF0b3IucHkKaW5kZXggZGJiMTZjMDNlMjYzMzM1MDk0MTIw
ZWNlYWU4YzcwNjdkOGQ3ODBmMS4uZWMyODE2OGY2NjYyMDBhYmFlYjU1OGQ4ODk2MjMxNzI1OWI2
OGUwOCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5
b3V0X3BhY2thZ2UvanNvbl9sYXlvdXRfcmVzdWx0c19nZW5lcmF0b3IucHkKKysrIGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9sYXlvdXRf
cmVzdWx0c19nZW5lcmF0b3IucHkKQEAgLTEzMCwzMCArMTMwLDYgQEAgY2xhc3MgSlNPTkxheW91
dFJlc3VsdHNHZW5lcmF0b3IoanNvbl9yZXN1bHRzX2dlbmVyYXRvci5KU09OUmVzdWx0c0dlbmVy
YXRvckJhc2UKICAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9tb2RpZmllcl9jaGFyKHRlc3RfbmFt
ZSkKIAogICAgICMgb3ZlcnJpZGUKLSAgICBkZWYgX2NvbnZlcnRfanNvbl90b19jdXJyZW50X3Zl
cnNpb24oc2VsZiwgcmVzdWx0c19qc29uKToKLSAgICAgICAgYXJjaGl2ZV92ZXJzaW9uID0gTm9u
ZQotICAgICAgICBpZiBzZWxmLlZFUlNJT05fS0VZIGluIHJlc3VsdHNfanNvbjoKLSAgICAgICAg
ICAgIGFyY2hpdmVfdmVyc2lvbiA9IHJlc3VsdHNfanNvbltzZWxmLlZFUlNJT05fS0VZXQotCi0g
ICAgICAgIHN1cGVyKEpTT05MYXlvdXRSZXN1bHRzR2VuZXJhdG9yLAotICAgICAgICAgICAgICBz
ZWxmKS5fY29udmVydF9qc29uX3RvX2N1cnJlbnRfdmVyc2lvbihyZXN1bHRzX2pzb24pCi0KLSAg
ICAgICAgIyB2ZXJzaW9uIDItPjMKLSAgICAgICAgaWYgYXJjaGl2ZV92ZXJzaW9uID09IDI6Ci0g
ICAgICAgICAgICBmb3IgcmVzdWx0c19mb3JfYnVpbGRlciBpbiByZXN1bHRzX2pzb24uaXRlcnZh
bHVlcygpOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgdGVzdF9y
ZXN1bHRzID0gcmVzdWx0c19mb3JfYnVpbGRlcltzZWxmLlRFU1RTXQotICAgICAgICAgICAgICAg
IGV4Y2VwdDoKLSAgICAgICAgICAgICAgICAgICAgY29udGludWUKLQotICAgICAgICAgICAgZm9y
IHRlc3QgaW4gdGVzdF9yZXN1bHRzOgotICAgICAgICAgICAgICAgICMgTWFrZSBzdXJlIGFsbCBw
YXRocyBhcmUgcmVsYXRpdmUKLSAgICAgICAgICAgICAgICB0ZXN0X3BhdGggPSBzZWxmLl9nZXRf
cGF0aF9yZWxhdGl2ZV90b19sYXlvdXRfdGVzdF9yb290KHRlc3QpCi0gICAgICAgICAgICAgICAg
aWYgdGVzdF9wYXRoICE9IHRlc3Q6Ci0gICAgICAgICAgICAgICAgICAgIHRlc3RfcmVzdWx0c1t0
ZXN0X3BhdGhdID0gdGVzdF9yZXN1bHRzW3Rlc3RdCi0gICAgICAgICAgICAgICAgICAgIGRlbCB0
ZXN0X3Jlc3VsdHNbdGVzdF0KLQotICAgICMgb3ZlcnJpZGUKICAgICBkZWYgX2luc2VydF9mYWls
dXJlX3N1bW1hcmllcyhzZWxmLCByZXN1bHRzX2Zvcl9idWlsZGVyKToKICAgICAgICAgc3VtbWFy
eSA9IHNlbGYuX3Jlc3VsdF9zdW1tYXJ5CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5lcmF0b3Iu
cHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9q
c29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CmluZGV4IDgyZDIxZTYyZjY0Y2Y3YzE0OWU2YzAxMzk4
NzgwNTM5ZjEzZjMwMmIuLmViYmFiZTljN2JjY2NlMTNmYTI0MWQyYTgxNWVjNWViMjk1ZDhiNTEg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9w
YWNrYWdlL2pzb25fcmVzdWx0c19nZW5lcmF0b3IucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5w
eQpAQCAtNjcsNiArNjcsNjAgQEAgZGVmIHdyaXRlX2pzb24oZmlsZXN5c3RlbSwganNvbl9vYmpl
Y3QsIGZpbGVfcGF0aCk6CiAgICAganNvbl9zdHJpbmcgPSBfSlNPTl9QUkVGSVggKyBqc29uX2Rh
dGEgKyBfSlNPTl9TVUZGSVgKICAgICBmaWxlc3lzdGVtLndyaXRlX3RleHRfZmlsZShmaWxlX3Bh
dGgsIGpzb25fc3RyaW5nKQogCisKK2RlZiBjb252ZXJ0X3RyaWVfdG9fZmxhdF9wYXRocyh0cmll
LCBwcmVmaXg9Tm9uZSk6CisgICAgIiIiQ29udmVydHMgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUg
aW4gdGhlIGdpdmVuIHRyaWUgdG8gZmxhdCBwYXRocywgcHJlcGVuZGluZyBhIHByZWZpeCB0byBl
YWNoLiIiIgorICAgIHJlc3VsdCA9IHt9CisgICAgZm9yIG5hbWUsIGRhdGEgaW4gdHJpZS5pdGVy
aXRlbXMoKToKKyAgICAgICAgaWYgcHJlZml4OgorICAgICAgICAgICAgbmFtZSA9IHByZWZpeCAr
ICIvIiArIG5hbWUKKworICAgICAgICBpZiBub3QgInJlc3VsdHMiIGluIGRhdGE6CisgICAgICAg
ICAgICByZXN1bHQudXBkYXRlKGNvbnZlcnRfdHJpZV90b19mbGF0X3BhdGhzKGRhdGEsIG5hbWUp
KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVzdWx0W25hbWVdID0gZGF0YQorCisgICAg
cmV0dXJuIHJlc3VsdAorCisKK2RlZiBhZGRfcGF0aF90b190cmllKHBhdGgsIHZhbHVlLCB0cmll
KToKKyAgICAiIiJJbnNlcnRzIGEgc2luZ2xlIGZsYXQgZGlyZWN0b3J5IHBhdGggYW5kIGFzc29j
aWF0ZWQgdmFsdWUgaW50byBhIGRpcmVjdG9yeSB0cmllIHN0cnVjdHVyZS4iIiIKKyAgICBpZiBu
b3QgIi8iIGluIHBhdGg6CisgICAgICAgIHRyaWVbcGF0aF0gPSB2YWx1ZQorICAgICAgICByZXR1
cm4KKworICAgIGRpcmVjdG9yeSwgc2xhc2gsIHJlc3QgPSBwYXRoLnBhcnRpdGlvbigiLyIpCisg
ICAgaWYgbm90IGRpcmVjdG9yeSBpbiB0cmllOgorICAgICAgICB0cmllW2RpcmVjdG9yeV0gPSB7
fQorICAgIGFkZF9wYXRoX3RvX3RyaWUocmVzdCwgdmFsdWUsIHRyaWVbZGlyZWN0b3J5XSkKKwor
CitkZWYgY29udmVydF90cmllX3RvX2ZsYXRfcGF0aHModHJpZSwgcHJlZml4PU5vbmUpOgorICAg
ICIiIkNvbnZlcnRzIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGluIHRoZSBnaXZlbiB0cmllIHRv
IGZsYXQgcGF0aHMsIHByZXBlbmRpbmcgYSBwcmVmaXggdG8gZWFjaC4iIiIKKyAgICByZXN1bHQg
PSB7fQorICAgIGZvciBuYW1lLCBkYXRhIGluIHRyaWUuaXRlcml0ZW1zKCk6CisgICAgICAgIGlm
IHByZWZpeDoKKyAgICAgICAgICAgIG5hbWUgPSBwcmVmaXggKyAiLyIgKyBuYW1lCisKKyAgICAg
ICAgaWYgbm90ICJyZXN1bHRzIiBpbiBkYXRhOgorICAgICAgICAgICAgcmVzdWx0LnVwZGF0ZShj
b252ZXJ0X3RyaWVfdG9fZmxhdF9wYXRocyhkYXRhLCBuYW1lKSkKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIHJlc3VsdFtuYW1lXSA9IGRhdGEKKworICAgIHJldHVybiByZXN1bHQKKworCitk
ZWYgYWRkX3BhdGhfdG9fdHJpZShwYXRoLCB2YWx1ZSwgdHJpZSk6CisgICAgIiIiSW5zZXJ0cyBh
IHNpbmdsZSBmbGF0IGRpcmVjdG9yeSBwYXRoIGFuZCBhc3NvY2lhdGVkIHZhbHVlIGludG8gYSBk
aXJlY3RvcnkgdHJpZSBzdHJ1Y3R1cmUuIiIiCisgICAgaWYgbm90ICIvIiBpbiBwYXRoOgorICAg
ICAgICB0cmllW3BhdGhdID0gdmFsdWUKKyAgICAgICAgcmV0dXJuCisKKyAgICBkaXJlY3Rvcnks
IHNsYXNoLCByZXN0ID0gcGF0aC5wYXJ0aXRpb24oIi8iKQorICAgIGlmIG5vdCBkaXJlY3Rvcnkg
aW4gdHJpZToKKyAgICAgICAgdHJpZVtkaXJlY3RvcnldID0ge30KKyAgICBhZGRfcGF0aF90b190
cmllKHJlc3QsIHZhbHVlLCB0cmllW2RpcmVjdG9yeV0pCisKIGRlZiB0ZXN0X3RpbWluZ3NfdHJp
ZShwb3J0LCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncyk6CiAgICAgIiIiQnJlYWtzIGEgZmlsZW5h
bWUgaW50byBjaHVua3MgYnkgZGlyZWN0b3J5IGFuZCBwdXRzIHRoZSB0ZXN0IHRpbWUgYXMgYSB2
YWx1ZSBpbiB0aGUgbG93ZXN0IHBhcnQsIGUuZy4KICAgICBmb28vYmFyL2Jhei5odG1sOiAxbXMK
QEAgLTg4LDE2ICsxNDIsOCBAQCBkZWYgdGVzdF90aW1pbmdzX3RyaWUocG9ydCwgaW5kaXZpZHVh
bF90ZXN0X3RpbWluZ3MpOgogICAgICAgICAgICAgIyBGSVhNRTogSGFuZGxlIHRoaXMgYmV0dGVy
LiBOb24tbGF5b3V0IHRlc3RzIHNob3VsZG4ndCBiZSByZWxhdGl2aXplZC4KICAgICAgICAgICAg
IHRlc3QgPSB0ZXN0X3Jlc3VsdC5maWxlbmFtZQogCi0gICAgICAgIHBhcnRzID0gdGVzdC5zcGxp
dCgnLycpCi0gICAgICAgIGN1cnJlbnRfbWFwID0gdHJpZQotICAgICAgICBmb3IgaSwgcGFydCBp
biBlbnVtZXJhdGUocGFydHMpOgotICAgICAgICAgICAgaWYgaSA9PSAobGVuKHBhcnRzKSAtIDEp
OgotICAgICAgICAgICAgICAgIGN1cnJlbnRfbWFwW3BhcnRdID0gaW50KDEwMDAgKiB0ZXN0X3Jl
c3VsdC50ZXN0X3J1bl90aW1lKQotICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGFkZF9w
YXRoX3RvX3RyaWUodGVzdCwgaW50KDEwMDAgKiB0ZXN0X3Jlc3VsdC50ZXN0X3J1bl90aW1lKSwg
dHJpZSkKIAotICAgICAgICAgICAgaWYgcGFydCBub3QgaW4gY3VycmVudF9tYXA6Ci0gICAgICAg
ICAgICAgICAgY3VycmVudF9tYXBbcGFydF0gPSB7fQotICAgICAgICAgICAgY3VycmVudF9tYXAg
PSBjdXJyZW50X21hcFtwYXJ0XQogICAgIHJldHVybiB0cmllCiAKICMgRklYTUU6IFdlIGFscmVh
ZHkgaGF2ZSBhIFRlc3RSZXN1bHQgY2xhc3MgaW4gdGVzdF9yZXN1bHRzLnB5CkBAIC0xNTMsNyAr
MTk5LDcgQEAgY2xhc3MgSlNPTlJlc3VsdHNHZW5lcmF0b3JCYXNlKG9iamVjdCk6CiAgICAgICAg
ICAgICAgICAgICAgICAgICBUZXN0UmVzdWx0LkZBSUxTOiBGQUlMX1JFU1VMVCwKICAgICAgICAg
ICAgICAgICAgICAgICAgIFRlc3RSZXN1bHQuRkxBS1k6IEZMQUtZX1JFU1VMVH0KIAotICAgIFZF
UlNJT04gPSAzCisgICAgVkVSU0lPTiA9IDQKICAgICBWRVJTSU9OX0tFWSA9ICJ2ZXJzaW9uIgog
ICAgIFJFU1VMVFMgPSAicmVzdWx0cyIKICAgICBUSU1FUyA9ICJ0aW1lcyIKQEAgLTI3MSw3ICsz
MTcsOCBAQCBjbGFzcyBKU09OUmVzdWx0c0dlbmVyYXRvckJhc2Uob2JqZWN0KToKICAgICAgICAg
IyBVcGRhdGUgdGhlIGFsbCBmYWlsaW5nIHRlc3RzIHdpdGggcmVzdWx0IHR5cGUgYW5kIHRpbWUu
CiAgICAgICAgIHRlc3RzID0gcmVzdWx0c19mb3JfYnVpbGRlcltzZWxmLlRFU1RTXQogICAgICAg
ICBhbGxfZmFpbGluZ190ZXN0cyA9IHNlbGYuX2dldF9mYWlsZWRfdGVzdF9uYW1lcygpCi0gICAg
ICAgIGFsbF9mYWlsaW5nX3Rlc3RzLnVwZGF0ZSh0ZXN0cy5pdGVya2V5cygpKQorICAgICAgICBh
bGxfZmFpbGluZ190ZXN0cy51cGRhdGUoY29udmVydF90cmllX3RvX2ZsYXRfcGF0aHModGVzdHMp
KQorCiAgICAgICAgIGZvciB0ZXN0IGluIGFsbF9mYWlsaW5nX3Rlc3RzOgogICAgICAgICAgICAg
c2VsZi5faW5zZXJ0X3Rlc3RfdGltZV9hbmRfcmVzdWx0KHRlc3QsIHRlc3RzKQogCkBAIC01MTIs
NiArNTU5LDggQEAgY2xhc3MgSlNPTlJlc3VsdHNHZW5lcmF0b3JCYXNlKG9iamVjdCk6CiAgICAg
ICAgICAgICBpbnQodGltZS50aW1lKCkpLAogICAgICAgICAgICAgc2VsZi5USU1FKQogCisKKwog
ICAgIGRlZiBfaW5zZXJ0X3Rlc3RfdGltZV9hbmRfcmVzdWx0KHNlbGYsIHRlc3RfbmFtZSwgdGVz
dHMpOgogICAgICAgICAiIiIgSW5zZXJ0IGEgdGVzdCBpdGVtIHdpdGggaXRzIHJlc3VsdHMgdG8g
dGhlIGdpdmVuIHRlc3RzIGRpY3Rpb25hcnkuCiAKQEAgLTUyMiwzMiArNTcxLDU3IEBAIGNsYXNz
IEpTT05SZXN1bHRzR2VuZXJhdG9yQmFzZShvYmplY3QpOgogICAgICAgICByZXN1bHQgPSBzZWxm
Ll9nZXRfcmVzdWx0X2NoYXIodGVzdF9uYW1lKQogICAgICAgICB0aW1lID0gc2VsZi5fZ2V0X3Rl
c3RfdGltaW5nKHRlc3RfbmFtZSkKIAotICAgICAgICBpZiB0ZXN0X25hbWUgbm90IGluIHRlc3Rz
OgotICAgICAgICAgICAgdGVzdHNbdGVzdF9uYW1lXSA9IHNlbGYuX2NyZWF0ZV9yZXN1bHRzX2Fu
ZF90aW1lc19qc29uKCkKKyAgICAgICAgdGhpc190ZXN0ID0gdGVzdHMKKyAgICAgICAgZm9yIHNl
Z21lbnQgaW4gdGVzdF9uYW1lLnNwbGl0KCIvIik6CisgICAgICAgICAgICBpZiBzZWdtZW50IG5v
dCBpbiB0aGlzX3Rlc3Q6CisgICAgICAgICAgICAgICAgdGhpc190ZXN0W3NlZ21lbnRdID0ge30K
KyAgICAgICAgICAgIHRoaXNfdGVzdCA9IHRoaXNfdGVzdFtzZWdtZW50XQorCisgICAgICAgIGlm
IG5vdCBsZW4odGhpc190ZXN0KToKKyAgICAgICAgICAgIHNlbGYuX3BvcHVsYXRlX3Jlc3VsdHNf
YW5kX3RpbWVzX2pzb24odGhpc190ZXN0KQogCi0gICAgICAgIHRoaXNUZXN0ID0gdGVzdHNbdGVz
dF9uYW1lXQotICAgICAgICBpZiBzZWxmLlJFU1VMVFMgaW4gdGhpc1Rlc3Q6Ci0gICAgICAgICAg
ICBzZWxmLl9pbnNlcnRfaXRlbV9ydW5fbGVuZ3RoX2VuY29kZWQocmVzdWx0LCB0aGlzVGVzdFtz
ZWxmLlJFU1VMVFNdKQorICAgICAgICBpZiBzZWxmLlJFU1VMVFMgaW4gdGhpc190ZXN0OgorICAg
ICAgICAgICAgc2VsZi5faW5zZXJ0X2l0ZW1fcnVuX2xlbmd0aF9lbmNvZGVkKHJlc3VsdCwgdGhp
c190ZXN0W3NlbGYuUkVTVUxUU10pCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB0aGlzVGVz
dFtzZWxmLlJFU1VMVFNdID0gW1sxLCByZXN1bHRdXQorICAgICAgICAgICAgdGhpc190ZXN0W3Nl
bGYuUkVTVUxUU10gPSBbWzEsIHJlc3VsdF1dCiAKLSAgICAgICAgaWYgc2VsZi5USU1FUyBpbiB0
aGlzVGVzdDoKLSAgICAgICAgICAgIHNlbGYuX2luc2VydF9pdGVtX3J1bl9sZW5ndGhfZW5jb2Rl
ZCh0aW1lLCB0aGlzVGVzdFtzZWxmLlRJTUVTXSkKKyAgICAgICAgaWYgc2VsZi5USU1FUyBpbiB0
aGlzX3Rlc3Q6CisgICAgICAgICAgICBzZWxmLl9pbnNlcnRfaXRlbV9ydW5fbGVuZ3RoX2VuY29k
ZWQodGltZSwgdGhpc190ZXN0W3NlbGYuVElNRVNdKQogICAgICAgICBlbHNlOgotICAgICAgICAg
ICAgdGhpc1Rlc3Rbc2VsZi5USU1FU10gPSBbWzEsIHRpbWVdXQorICAgICAgICAgICAgdGhpc190
ZXN0W3NlbGYuVElNRVNdID0gW1sxLCB0aW1lXV0KIAogICAgIGRlZiBfY29udmVydF9qc29uX3Rv
X2N1cnJlbnRfdmVyc2lvbihzZWxmLCByZXN1bHRzX2pzb24pOgogICAgICAgICAiIiJJZiB0aGUg
SlNPTiBkb2VzIG5vdCBtYXRjaCB0aGUgY3VycmVudCB2ZXJzaW9uLCBjb252ZXJ0cyBpdCB0byB0
aGUKICAgICAgICAgY3VycmVudCB2ZXJzaW9uIGFuZCBhZGRzIGluIHRoZSBuZXcgdmVyc2lvbiBu
dW1iZXIuCiAgICAgICAgICIiIgotICAgICAgICBpZiAoc2VsZi5WRVJTSU9OX0tFWSBpbiByZXN1
bHRzX2pzb24gYW5kCi0gICAgICAgICAgICByZXN1bHRzX2pzb25bc2VsZi5WRVJTSU9OX0tFWV0g
PT0gc2VsZi5WRVJTSU9OKToKLSAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBzZWxmLlZF
UlNJT05fS0VZIGluIHJlc3VsdHNfanNvbjoKKyAgICAgICAgICAgIGFyY2hpdmVfdmVyc2lvbiA9
IHJlc3VsdHNfanNvbltzZWxmLlZFUlNJT05fS0VZXQorICAgICAgICAgICAgaWYgYXJjaGl2ZV92
ZXJzaW9uID09IHNlbGYuVkVSU0lPTjoKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgIGFyY2hpdmVfdmVyc2lvbiA9IDMKKworICAgICAgICAjIHZlcnNp
b24gMy0+NAorICAgICAgICBpZiBhcmNoaXZlX3ZlcnNpb24gPT0gMzoKKyAgICAgICAgICAgIG51
bV9yZXN1bHRzID0gbGVuKHJlc3VsdHNfanNvbi52YWx1ZXMoKSkKKyAgICAgICAgICAgIGZvciBi
dWlsZGVyLCByZXN1bHRzIGluIHJlc3VsdHNfanNvbi5pdGVyaXRlbXMoKToKKyAgICAgICAgICAg
ICAgICBzZWxmLl9jb252ZXJ0X3Rlc3RzX3RvX3RyaWUocmVzdWx0cykKIAogICAgICAgICByZXN1
bHRzX2pzb25bc2VsZi5WRVJTSU9OX0tFWV0gPSBzZWxmLlZFUlNJT04KIAotICAgIGRlZiBfY3Jl
YXRlX3Jlc3VsdHNfYW5kX3RpbWVzX2pzb24oc2VsZik6Ci0gICAgICAgIHJlc3VsdHNfYW5kX3Rp
bWVzID0ge30KKyAgICBkZWYgX2NvbnZlcnRfdGVzdHNfdG9fdHJpZShzZWxmLCByZXN1bHRzKToK
KyAgICAgICAgaWYgbm90IHNlbGYuVEVTVFMgaW4gcmVzdWx0czoKKyAgICAgICAgICAgIHJldHVy
bgorCisgICAgICAgIHRlc3RfcmVzdWx0cyA9IHJlc3VsdHNbc2VsZi5URVNUU10KKyAgICAgICAg
dGVzdF9yZXN1bHRzX3RyaWUgPSB7fQorICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0X3Jlc3VsdHMu
aXRlcmtleXMoKToKKyAgICAgICAgICAgIHNpbmdsZV90ZXN0X3Jlc3VsdCA9IHRlc3RfcmVzdWx0
c1t0ZXN0XQorICAgICAgICAgICAgYWRkX3BhdGhfdG9fdHJpZSh0ZXN0LCBzaW5nbGVfdGVzdF9y
ZXN1bHQsIHRlc3RfcmVzdWx0c190cmllKQorCisgICAgICAgIHJlc3VsdHNbc2VsZi5URVNUU10g
PSB0ZXN0X3Jlc3VsdHNfdHJpZQorCisgICAgZGVmIF9wb3B1bGF0ZV9yZXN1bHRzX2FuZF90aW1l
c19qc29uKHNlbGYsIHJlc3VsdHNfYW5kX3RpbWVzKToKICAgICAgICAgcmVzdWx0c19hbmRfdGlt
ZXNbc2VsZi5SRVNVTFRTXSA9IFtdCiAgICAgICAgIHJlc3VsdHNfYW5kX3RpbWVzW3NlbGYuVElN
RVNdID0gW10KICAgICAgICAgcmV0dXJuIHJlc3VsdHNfYW5kX3RpbWVzCmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jl
c3VsdHNfZ2VuZXJhdG9yX3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvcl91bml0dGVzdC5w
eQppbmRleCAyNDg5MTFhOTYyY2EwZjkwNzViZjNiZjk3MDRiOTZlZTA1OGFhZjBjLi4wODE4YTA2
YjQzYjM2Yjc3NGRlZDY3ZmYxM2I0ZTRlYzM2MWNlMTFmIDEwMDY0NAotLS0gYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2Vu
ZXJhdG9yX3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5lcmF0b3JfdW5pdHRlc3QucHkKQEAg
LTE1Niw4ICsxNTYsNyBAQCBjbGFzcyBKU09OR2VuZXJhdG9yVGVzdCh1bml0dGVzdC5UZXN0Q2Fz
ZSk6CiAgICAgICAgIGlmIGZhaWxlZF9jb3VudF9tYXA6CiAgICAgICAgICAgICB0ZXN0cyA9IGJ1
aWxkaW5mb1tKUkcuVEVTVFNdCiAgICAgICAgICAgICBmb3IgdGVzdF9uYW1lIGluIGZhaWxlZF9j
b3VudF9tYXAuaXRlcmtleXMoKToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodGVz
dF9uYW1lIGluIHRlc3RzKQotICAgICAgICAgICAgICAgIHRlc3QgPSB0ZXN0c1t0ZXN0X25hbWVd
CisgICAgICAgICAgICAgICAgdGVzdCA9IHNlbGYuX2ZpbmRfdGVzdF9pbl90cmllKHRlc3RfbmFt
ZSwgdGVzdHMpCiAKICAgICAgICAgICAgICAgICBmYWlsZWQgPSAwCiAgICAgICAgICAgICAgICAg
Zm9yIHJlc3VsdCBpbiB0ZXN0W0pSRy5SRVNVTFRTXToKQEAgLTE3NCw2ICsxNzMsMjIgQEAgY2xh
c3MgSlNPTkdlbmVyYXRvclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBpZiBmaXhh
YmxlX2NvdW50OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdW0oYnVpbGRpbmZvW0pS
Ry5GSVhBQkxFX0NPVU5UXSksIGZpeGFibGVfY291bnQpCiAKKyAgICBkZWYgX2ZpbmRfdGVzdF9p
bl90cmllKHNlbGYsIHBhdGgsIHRyaWUpOgorICAgICAgICBub2RlcyA9IHBhdGguc3BsaXQoIi8i
KQorICAgICAgICBzdWJfdHJpZSA9IHRyaWUKKyAgICAgICAgZm9yIG5vZGUgaW4gbm9kZXM6Cisg
ICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm9kZSBpbiBzdWJfdHJpZSkKKyAgICAgICAgICAg
IHN1Yl90cmllID0gc3ViX3RyaWVbbm9kZV0KKyAgICAgICAgcmV0dXJuIHN1Yl90cmllCisKKyAg
ICBkZWYgX2ZpbmRfdGVzdF9pbl90cmllKHNlbGYsIHBhdGgsIHRyaWUpOgorICAgICAgICBub2Rl
cyA9IHBhdGguc3BsaXQoIi8iKQorICAgICAgICBzdWJfdHJpZSA9IHRyaWUKKyAgICAgICAgZm9y
IG5vZGUgaW4gbm9kZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm9kZSBpbiBzdWJf
dHJpZSkKKyAgICAgICAgICAgIHN1Yl90cmllID0gc3ViX3RyaWVbbm9kZV0KKyAgICAgICAgcmV0
dXJuIHN1Yl90cmllCisKICAgICBkZWYgdGVzdF9qc29uX2dlbmVyYXRpb24oc2VsZik6CiAgICAg
ICAgIHNlbGYuX3Rlc3RfanNvbl9nZW5lcmF0aW9uKFtdLCBbXSkKICAgICAgICAgc2VsZi5fdGVz
dF9qc29uX2dlbmVyYXRpb24oWydBMScsICdCMSddLCBbXSkKQEAgLTE5Nyw2ICsyMTIsMTQgQEAg
Y2xhc3MgSlNPTkdlbmVyYXRvclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAgICAg
WydGTEFLWV9CJywgJ0RJU0FCTEVEX0MnLCAnRkFJTFNfRCddLAogICAgICAgICAgICAgWydBJywg
J0ZMQUtZX0UnXSkKIAorICAgIGRlZiB0ZXN0X2hpZXJhcmNoaWNhbF9qc29uX2dlbmVyYXRpb24o
c2VsZik6CisgICAgICAgICMgRklYTUU6IFJlLXdvcmsgdGVzdHMgdG8gYmUgbW9yZSBjb21wcmVo
ZW5zaWJsZSBhbmQgY29tcHJlaGVuc2l2ZS4KKyAgICAgICAgc2VsZi5fdGVzdF9qc29uX2dlbmVy
YXRpb24oWydmb28vQSddLCBbJ2Zvby9CJywgJ2Jhci9DJ10pCisKKyAgICBkZWYgdGVzdF9oaWVy
YXJjaGljYWxfanNvbl9nZW5lcmF0aW9uKHNlbGYpOgorICAgICAgICAjIEZJWE1FOiBSZS13b3Jr
IHRlc3RzIHRvIGJlIG1vcmUgY29tcHJlaGVuc2libGUgYW5kIGNvbXByZWhlbnNpdmUuCisgICAg
ICAgIHNlbGYuX3Rlc3RfanNvbl9nZW5lcmF0aW9uKFsnZm9vL0EnXSwgWydmb28vQicsICdiYXIv
QyddKQorCiAgICAgZGVmIHRlc3RfdGVzdF90aW1pbmdzX3RyaWUoc2VsZik6CiAgICAgICAgIHRl
c3RfcG9ydCA9IHRlc3QuVGVzdFBvcnQoKQogICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5n
cyA9IFtdCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99794</attachid>
            <date>2011-07-05 23:19:01 -0700</date>
            <delta_ts>2011-07-11 15:48:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60869-20110706161858.patch</filename>
            <type>text/plain</type>
            <size>10433</size>
            <attacher name="Alice Boxhall">aboxhall</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTA0MzYKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA0NTAwNTA3MmI1ZGEyYmI2MDJkMTU3ZDk4MjQ5ZGE3MWVm
YTNiMzY3Li5hNGNlMTVhMjBmYjc3NDA4ZTYwMDFhMTE4ODI5NDk0NWZlMDI2ODYzIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMTEtMDctMDUgIEFsaWNlIEJveGhhbGwgIDxhYm94aGFsbEBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgQ29udmVydCBqc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5IHRvIG91dHB1dCB2ZXJz
aW9uIDQgSlNPTi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTYwODY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xh
eW91dF9yZXN1bHRzX2dlbmVyYXRvci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yLnB5OgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25f
cmVzdWx0c19nZW5lcmF0b3JfdW5pdHRlc3QucHk6CisKIDIwMTEtMDctMDUgIEtldmluIE9sbGl2
aWVyICA8a2V2aW5vQHRoZW9sbGl2aWVycy5jb20+CiAKICAgICAgICAgW3d4XSBVbnJldmlld2Vk
IGJ1aWxkIGZpeCBhZnRlciBhZGRpdGlvbiBvZiBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyIGRp
ci4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL2pzb25fbGF5b3V0X3Jlc3VsdHNfZ2VuZXJhdG9yLnB5IGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9sYXlvdXRfcmVzdWx0
c19nZW5lcmF0b3IucHkKaW5kZXggZGJiMTZjMDNlMjYzMzM1MDk0MTIwZWNlYWU4YzcwNjdkOGQ3
ODBmMS4uZWMyODE2OGY2NjYyMDBhYmFlYjU1OGQ4ODk2MjMxNzI1OWI2OGUwOCAxMDA2NDQKLS0t
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNv
bl9sYXlvdXRfcmVzdWx0c19nZW5lcmF0b3IucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvanNvbl9sYXlvdXRfcmVzdWx0c19nZW5lcmF0
b3IucHkKQEAgLTEzMCwzMCArMTMwLDYgQEAgY2xhc3MgSlNPTkxheW91dFJlc3VsdHNHZW5lcmF0
b3IoanNvbl9yZXN1bHRzX2dlbmVyYXRvci5KU09OUmVzdWx0c0dlbmVyYXRvckJhc2UKICAgICAg
ICAgcmV0dXJuIHNlbGYuX2dldF9tb2RpZmllcl9jaGFyKHRlc3RfbmFtZSkKIAogICAgICMgb3Zl
cnJpZGUKLSAgICBkZWYgX2NvbnZlcnRfanNvbl90b19jdXJyZW50X3ZlcnNpb24oc2VsZiwgcmVz
dWx0c19qc29uKToKLSAgICAgICAgYXJjaGl2ZV92ZXJzaW9uID0gTm9uZQotICAgICAgICBpZiBz
ZWxmLlZFUlNJT05fS0VZIGluIHJlc3VsdHNfanNvbjoKLSAgICAgICAgICAgIGFyY2hpdmVfdmVy
c2lvbiA9IHJlc3VsdHNfanNvbltzZWxmLlZFUlNJT05fS0VZXQotCi0gICAgICAgIHN1cGVyKEpT
T05MYXlvdXRSZXN1bHRzR2VuZXJhdG9yLAotICAgICAgICAgICAgICBzZWxmKS5fY29udmVydF9q
c29uX3RvX2N1cnJlbnRfdmVyc2lvbihyZXN1bHRzX2pzb24pCi0KLSAgICAgICAgIyB2ZXJzaW9u
IDItPjMKLSAgICAgICAgaWYgYXJjaGl2ZV92ZXJzaW9uID09IDI6Ci0gICAgICAgICAgICBmb3Ig
cmVzdWx0c19mb3JfYnVpbGRlciBpbiByZXN1bHRzX2pzb24uaXRlcnZhbHVlcygpOgotICAgICAg
ICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgdGVzdF9yZXN1bHRzID0gcmVzdWx0
c19mb3JfYnVpbGRlcltzZWxmLlRFU1RTXQotICAgICAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAg
ICAgICAgICAgICAgICAgY29udGludWUKLQotICAgICAgICAgICAgZm9yIHRlc3QgaW4gdGVzdF9y
ZXN1bHRzOgotICAgICAgICAgICAgICAgICMgTWFrZSBzdXJlIGFsbCBwYXRocyBhcmUgcmVsYXRp
dmUKLSAgICAgICAgICAgICAgICB0ZXN0X3BhdGggPSBzZWxmLl9nZXRfcGF0aF9yZWxhdGl2ZV90
b19sYXlvdXRfdGVzdF9yb290KHRlc3QpCi0gICAgICAgICAgICAgICAgaWYgdGVzdF9wYXRoICE9
IHRlc3Q6Ci0gICAgICAgICAgICAgICAgICAgIHRlc3RfcmVzdWx0c1t0ZXN0X3BhdGhdID0gdGVz
dF9yZXN1bHRzW3Rlc3RdCi0gICAgICAgICAgICAgICAgICAgIGRlbCB0ZXN0X3Jlc3VsdHNbdGVz
dF0KLQotICAgICMgb3ZlcnJpZGUKICAgICBkZWYgX2luc2VydF9mYWlsdXJlX3N1bW1hcmllcyhz
ZWxmLCByZXN1bHRzX2Zvcl9idWlsZGVyKToKICAgICAgICAgc3VtbWFyeSA9IHNlbGYuX3Jlc3Vs
dF9zdW1tYXJ5CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2xheW91dF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5lcmF0b3IucHkgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX3Jlc3VsdHNfZ2Vu
ZXJhdG9yLnB5CmluZGV4IDgyZDIxZTYyZjY0Y2Y3YzE0OWU2YzAxMzk4NzgwNTM5ZjEzZjMwMmIu
LmRjMzkzYzBmNDk3OTM1YzI2MzY5NDI0ZDYyZGU5N2ZhZTMzZmRiZjMgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fcmVz
dWx0c19nZW5lcmF0b3IucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2UvanNvbl9yZXN1bHRzX2dlbmVyYXRvci5weQpAQCAtNjcsNiArNjcs
MzMgQEAgZGVmIHdyaXRlX2pzb24oZmlsZXN5c3RlbSwganNvbl9vYmplY3QsIGZpbGVfcGF0aCk6
CiAgICAganNvbl9zdHJpbmcgPSBfSlNPTl9QUkVGSVggKyBqc29uX2RhdGEgKyBfSlNPTl9TVUZG
SVgKICAgICBmaWxlc3lzdGVtLndyaXRlX3RleHRfZmlsZShmaWxlX3BhdGgsIGpzb25fc3RyaW5n
KQogCisKK2RlZiBjb252ZXJ0X3RyaWVfdG9fZmxhdF9wYXRocyh0cmllLCBwcmVmaXg9Tm9uZSk6
CisgICAgIiIiQ29udmVydHMgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgaW4gdGhlIGdpdmVuIHRy
aWUgdG8gZmxhdCBwYXRocywgcHJlcGVuZGluZyBhIHByZWZpeCB0byBlYWNoLiIiIgorICAgIHJl
c3VsdCA9IHt9CisgICAgZm9yIG5hbWUsIGRhdGEgaW4gdHJpZS5pdGVyaXRlbXMoKToKKyAgICAg
ICAgaWYgcHJlZml4OgorICAgICAgICAgICAgbmFtZSA9IHByZWZpeCArICIvIiArIG5hbWUKKwor
ICAgICAgICBpZiBsZW4oZGF0YSkgYW5kIG5vdCAicmVzdWx0cyIgaW4gZGF0YToKKyAgICAgICAg
ICAgIHJlc3VsdC51cGRhdGUoY29udmVydF90cmllX3RvX2ZsYXRfcGF0aHMoZGF0YSwgbmFtZSkp
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXN1bHRbbmFtZV0gPSBkYXRhCisKKyAgICBy
ZXR1cm4gcmVzdWx0CisKKworZGVmIGFkZF9wYXRoX3RvX3RyaWUocGF0aCwgdmFsdWUsIHRyaWUp
OgorICAgICIiIkluc2VydHMgYSBzaW5nbGUgZmxhdCBkaXJlY3RvcnkgcGF0aCBhbmQgYXNzb2Np
YXRlZCB2YWx1ZSBpbnRvIGEgZGlyZWN0b3J5IHRyaWUgc3RydWN0dXJlLiIiIgorICAgIGlmIG5v
dCAiLyIgaW4gcGF0aDoKKyAgICAgICAgdHJpZVtwYXRoXSA9IHZhbHVlCisgICAgICAgIHJldHVy
bgorCisgICAgZGlyZWN0b3J5LCBzbGFzaCwgcmVzdCA9IHBhdGgucGFydGl0aW9uKCIvIikKKyAg
ICBpZiBub3QgZGlyZWN0b3J5IGluIHRyaWU6CisgICAgICAgIHRyaWVbZGlyZWN0b3J5XSA9IHt9
CisgICAgYWRkX3BhdGhfdG9fdHJpZShyZXN0LCB2YWx1ZSwgdHJpZVtkaXJlY3RvcnldKQorCiBk
ZWYgdGVzdF90aW1pbmdzX3RyaWUocG9ydCwgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpOgogICAg
ICIiIkJyZWFrcyBhIGZpbGVuYW1lIGludG8gY2h1bmtzIGJ5IGRpcmVjdG9yeSBhbmQgcHV0cyB0
aGUgdGVzdCB0aW1lIGFzIGEgdmFsdWUgaW4gdGhlIGxvd2VzdCBwYXJ0LCBlLmcuCiAgICAgZm9v
L2Jhci9iYXouaHRtbDogMW1zCkBAIC04OCwxNiArMTE1LDggQEAgZGVmIHRlc3RfdGltaW5nc190
cmllKHBvcnQsIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzKToKICAgICAgICAgICAgICMgRklYTUU6
IEhhbmRsZSB0aGlzIGJldHRlci4gTm9uLWxheW91dCB0ZXN0cyBzaG91bGRuJ3QgYmUgcmVsYXRp
dml6ZWQuCiAgICAgICAgICAgICB0ZXN0ID0gdGVzdF9yZXN1bHQuZmlsZW5hbWUKIAotICAgICAg
ICBwYXJ0cyA9IHRlc3Quc3BsaXQoJy8nKQotICAgICAgICBjdXJyZW50X21hcCA9IHRyaWUKLSAg
ICAgICAgZm9yIGksIHBhcnQgaW4gZW51bWVyYXRlKHBhcnRzKToKLSAgICAgICAgICAgIGlmIGkg
PT0gKGxlbihwYXJ0cykgLSAxKToKLSAgICAgICAgICAgICAgICBjdXJyZW50X21hcFtwYXJ0XSA9
IGludCgxMDAwICogdGVzdF9yZXN1bHQudGVzdF9ydW5fdGltZSkKLSAgICAgICAgICAgICAgICBi
cmVhaworICAgICAgICBhZGRfcGF0aF90b190cmllKHRlc3QsIGludCgxMDAwICogdGVzdF9yZXN1
bHQudGVzdF9ydW5fdGltZSksIHRyaWUpCiAKLSAgICAgICAgICAgIGlmIHBhcnQgbm90IGluIGN1
cnJlbnRfbWFwOgotICAgICAgICAgICAgICAgIGN1cnJlbnRfbWFwW3BhcnRdID0ge30KLSAgICAg
ICAgICAgIGN1cnJlbnRfbWFwID0gY3VycmVudF9tYXBbcGFydF0KICAgICByZXR1cm4gdHJpZQog
CiAjIEZJWE1FOiBXZSBhbHJlYWR5IGhhdmUgYSBUZXN0UmVzdWx0IGNsYXNzIGluIHRlc3RfcmVz
dWx0cy5weQpAQCAtMTUzLDcgKzE3Miw3IEBAIGNsYXNzIEpTT05SZXN1bHRzR2VuZXJhdG9yQmFz
ZShvYmplY3QpOgogICAgICAgICAgICAgICAgICAgICAgICAgVGVzdFJlc3VsdC5GQUlMUzogRkFJ
TF9SRVNVTFQsCiAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0UmVzdWx0LkZMQUtZOiBGTEFL
WV9SRVNVTFR9CiAKLSAgICBWRVJTSU9OID0gMworICAgIFZFUlNJT04gPSA0CiAgICAgVkVSU0lP
Tl9LRVkgPSAidmVyc2lvbiIKICAgICBSRVNVTFRTID0gInJlc3VsdHMiCiAgICAgVElNRVMgPSAi
dGltZXMiCkBAIC0yNzEsNyArMjkwLDggQEAgY2xhc3MgSlNPTlJlc3VsdHNHZW5lcmF0b3JCYXNl
KG9iamVjdCk6CiAgICAgICAgICMgVXBkYXRlIHRoZSBhbGwgZmFpbGluZyB0ZXN0cyB3aXRoIHJl
c3VsdCB0eXBlIGFuZCB0aW1lLgogICAgICAgICB0ZXN0cyA9IHJlc3VsdHNfZm9yX2J1aWxkZXJb
c2VsZi5URVNUU10KICAgICAgICAgYWxsX2ZhaWxpbmdfdGVzdHMgPSBzZWxmLl9nZXRfZmFpbGVk
X3Rlc3RfbmFtZXMoKQotICAgICAgICBhbGxfZmFpbGluZ190ZXN0cy51cGRhdGUodGVzdHMuaXRl
cmtleXMoKSkKKyAgICAgICAgYWxsX2ZhaWxpbmdfdGVzdHMudXBkYXRlKGNvbnZlcnRfdHJpZV90
b19mbGF0X3BhdGhzKHRlc3RzKSkKKwogICAgICAgICBmb3IgdGVzdCBpbiBhbGxfZmFpbGluZ190
ZXN0czoKICAgICAgICAgICAgIHNlbGYuX2luc2VydF90ZXN0X3RpbWVfYW5kX3Jlc3VsdCh0ZXN0
LCB0ZXN0cykKIApAQCAtNTIyLDMyICs1NDIsNTcgQEAgY2xhc3MgSlNPTlJlc3VsdHNHZW5lcmF0
b3JCYXNlKG9iamVjdCk6CiAgICAgICAgIHJlc3VsdCA9IHNlbGYuX2dldF9yZXN1bHRfY2hhcih0
ZXN0X25hbWUpCiAgICAgICAgIHRpbWUgPSBzZWxmLl9nZXRfdGVzdF90aW1pbmcodGVzdF9uYW1l
KQogCi0gICAgICAgIGlmIHRlc3RfbmFtZSBub3QgaW4gdGVzdHM6Ci0gICAgICAgICAgICB0ZXN0
c1t0ZXN0X25hbWVdID0gc2VsZi5fY3JlYXRlX3Jlc3VsdHNfYW5kX3RpbWVzX2pzb24oKQorICAg
ICAgICB0aGlzX3Rlc3QgPSB0ZXN0cworICAgICAgICBmb3Igc2VnbWVudCBpbiB0ZXN0X25hbWUu
c3BsaXQoIi8iKToKKyAgICAgICAgICAgIGlmIHNlZ21lbnQgbm90IGluIHRoaXNfdGVzdDoKKyAg
ICAgICAgICAgICAgICB0aGlzX3Rlc3Rbc2VnbWVudF0gPSB7fQorICAgICAgICAgICAgdGhpc190
ZXN0ID0gdGhpc190ZXN0W3NlZ21lbnRdCiAKLSAgICAgICAgdGhpc1Rlc3QgPSB0ZXN0c1t0ZXN0
X25hbWVdCi0gICAgICAgIGlmIHNlbGYuUkVTVUxUUyBpbiB0aGlzVGVzdDoKLSAgICAgICAgICAg
IHNlbGYuX2luc2VydF9pdGVtX3J1bl9sZW5ndGhfZW5jb2RlZChyZXN1bHQsIHRoaXNUZXN0W3Nl
bGYuUkVTVUxUU10pCisgICAgICAgIGlmIG5vdCBsZW4odGhpc190ZXN0KToKKyAgICAgICAgICAg
IHNlbGYuX3BvcHVsYXRlX3Jlc3VsdHNfYW5kX3RpbWVzX2pzb24odGhpc190ZXN0KQorCisgICAg
ICAgIGlmIHNlbGYuUkVTVUxUUyBpbiB0aGlzX3Rlc3Q6CisgICAgICAgICAgICBzZWxmLl9pbnNl
cnRfaXRlbV9ydW5fbGVuZ3RoX2VuY29kZWQocmVzdWx0LCB0aGlzX3Rlc3Rbc2VsZi5SRVNVTFRT
XSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHRoaXNUZXN0W3NlbGYuUkVTVUxUU10gPSBb
WzEsIHJlc3VsdF1dCisgICAgICAgICAgICB0aGlzX3Rlc3Rbc2VsZi5SRVNVTFRTXSA9IFtbMSwg
cmVzdWx0XV0KIAotICAgICAgICBpZiBzZWxmLlRJTUVTIGluIHRoaXNUZXN0OgotICAgICAgICAg
ICAgc2VsZi5faW5zZXJ0X2l0ZW1fcnVuX2xlbmd0aF9lbmNvZGVkKHRpbWUsIHRoaXNUZXN0W3Nl
bGYuVElNRVNdKQorICAgICAgICBpZiBzZWxmLlRJTUVTIGluIHRoaXNfdGVzdDoKKyAgICAgICAg
ICAgIHNlbGYuX2luc2VydF9pdGVtX3J1bl9sZW5ndGhfZW5jb2RlZCh0aW1lLCB0aGlzX3Rlc3Rb
c2VsZi5USU1FU10pCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB0aGlzVGVzdFtzZWxmLlRJ
TUVTXSA9IFtbMSwgdGltZV1dCisgICAgICAgICAgICB0aGlzX3Rlc3Rbc2VsZi5USU1FU10gPSBb
WzEsIHRpbWVdXQogCiAgICAgZGVmIF9jb252ZXJ0X2pzb25fdG9fY3VycmVudF92ZXJzaW9uKHNl
bGYsIHJlc3VsdHNfanNvbik6CiAgICAgICAgICIiIklmIHRoZSBKU09OIGRvZXMgbm90IG1hdGNo
IHRoZSBjdXJyZW50IHZlcnNpb24sIGNvbnZlcnRzIGl0IHRvIHRoZQogICAgICAgICBjdXJyZW50
IHZlcnNpb24gYW5kIGFkZHMgaW4gdGhlIG5ldyB2ZXJzaW9uIG51bWJlci4KICAgICAgICAgIiIi
Ci0gICAgICAgIGlmIChzZWxmLlZFUlNJT05fS0VZIGluIHJlc3VsdHNfanNvbiBhbmQKLSAgICAg
ICAgICAgIHJlc3VsdHNfanNvbltzZWxmLlZFUlNJT05fS0VZXSA9PSBzZWxmLlZFUlNJT04pOgot
ICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIHNlbGYuVkVSU0lPTl9LRVkgaW4gcmVzdWx0
c19qc29uOgorICAgICAgICAgICAgYXJjaGl2ZV92ZXJzaW9uID0gcmVzdWx0c19qc29uW3NlbGYu
VkVSU0lPTl9LRVldCisgICAgICAgICAgICBpZiBhcmNoaXZlX3ZlcnNpb24gPT0gc2VsZi5WRVJT
SU9OOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
YXJjaGl2ZV92ZXJzaW9uID0gMworCisgICAgICAgICMgdmVyc2lvbiAzLT40CisgICAgICAgIGlm
IGFyY2hpdmVfdmVyc2lvbiA9PSAzOgorICAgICAgICAgICAgbnVtX3Jlc3VsdHMgPSBsZW4ocmVz
dWx0c19qc29uLnZhbHVlcygpKQorICAgICAgICAgICAgZm9yIGJ1aWxkZXIsIHJlc3VsdHMgaW4g
cmVzdWx0c19qc29uLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIHNlbGYuX2NvbnZlcnRf
dGVzdHNfdG9fdHJpZShyZXN1bHRzKQogCiAgICAgICAgIHJlc3VsdHNfanNvbltzZWxmLlZFUlNJ
T05fS0VZXSA9IHNlbGYuVkVSU0lPTgogCi0gICAgZGVmIF9jcmVhdGVfcmVzdWx0c19hbmRfdGlt
ZXNfanNvbihzZWxmKToKLSAgICAgICAgcmVzdWx0c19hbmRfdGltZXMgPSB7fQorICAgIGRlZiBf
Y29udmVydF90ZXN0c190b190cmllKHNlbGYsIHJlc3VsdHMpOgorICAgICAgICBpZiBub3Qgc2Vs
Zi5URVNUUyBpbiByZXN1bHRzOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgdGVzdF9y
ZXN1bHRzID0gcmVzdWx0c1tzZWxmLlRFU1RTXQorICAgICAgICB0ZXN0X3Jlc3VsdHNfdHJpZSA9
IHt9CisgICAgICAgIGZvciB0ZXN0IGluIHRlc3RfcmVzdWx0cy5pdGVya2V5cygpOgorICAgICAg
ICAgICAgc2luZ2xlX3Rlc3RfcmVzdWx0ID0gdGVzdF9yZXN1bHRzW3Rlc3RdCisgICAgICAgICAg
ICBhZGRfcGF0aF90b190cmllKHRlc3QsIHNpbmdsZV90ZXN0X3Jlc3VsdCwgdGVzdF9yZXN1bHRz
X3RyaWUpCisKKyAgICAgICAgcmVzdWx0c1tzZWxmLlRFU1RTXSA9IHRlc3RfcmVzdWx0c190cmll
CisKKyAgICBkZWYgX3BvcHVsYXRlX3Jlc3VsdHNfYW5kX3RpbWVzX2pzb24oc2VsZiwgcmVzdWx0
c19hbmRfdGltZXMpOgogICAgICAgICByZXN1bHRzX2FuZF90aW1lc1tzZWxmLlJFU1VMVFNdID0g
W10KICAgICAgICAgcmVzdWx0c19hbmRfdGltZXNbc2VsZi5USU1FU10gPSBbXQogICAgICAgICBy
ZXR1cm4gcmVzdWx0c19hbmRfdGltZXMKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5lcmF0b3JfdW5p
dHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFj
a2FnZS9qc29uX3Jlc3VsdHNfZ2VuZXJhdG9yX3VuaXR0ZXN0LnB5CmluZGV4IDI0ODkxMWE5NjJj
YTBmOTA3NWJmM2JmOTcwNGI5NmVlMDU4YWFmMGMuLjdhYzI1NGQ0NDQ5NTZhYWIyOGU4MzYxODU0
YWQwMDE3MTVmNTM3ZmMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fcmVzdWx0c19nZW5lcmF0b3JfdW5pdHRlc3QucHkK
KysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uv
anNvbl9yZXN1bHRzX2dlbmVyYXRvcl91bml0dGVzdC5weQpAQCAtMTU2LDggKzE1Niw3IEBAIGNs
YXNzIEpTT05HZW5lcmF0b3JUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgaWYgZmFp
bGVkX2NvdW50X21hcDoKICAgICAgICAgICAgIHRlc3RzID0gYnVpbGRpbmZvW0pSRy5URVNUU10K
ICAgICAgICAgICAgIGZvciB0ZXN0X25hbWUgaW4gZmFpbGVkX2NvdW50X21hcC5pdGVya2V5cygp
OgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ZXN0X25hbWUgaW4gdGVzdHMpCi0g
ICAgICAgICAgICAgICAgdGVzdCA9IHRlc3RzW3Rlc3RfbmFtZV0KKyAgICAgICAgICAgICAgICB0
ZXN0ID0gc2VsZi5fZmluZF90ZXN0X2luX3RyaWUodGVzdF9uYW1lLCB0ZXN0cykKIAogICAgICAg
ICAgICAgICAgIGZhaWxlZCA9IDAKICAgICAgICAgICAgICAgICBmb3IgcmVzdWx0IGluIHRlc3Rb
SlJHLlJFU1VMVFNdOgpAQCAtMTc0LDYgKzE3MywxNCBAQCBjbGFzcyBKU09OR2VuZXJhdG9yVGVz
dCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIGlmIGZpeGFibGVfY291bnQ6CiAgICAgICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHN1bShidWlsZGluZm9bSlJHLkZJWEFCTEVfQ09VTlRdKSwg
Zml4YWJsZV9jb3VudCkKIAorICAgIGRlZiBfZmluZF90ZXN0X2luX3RyaWUoc2VsZiwgcGF0aCwg
dHJpZSk6CisgICAgICAgIG5vZGVzID0gcGF0aC5zcGxpdCgiLyIpCisgICAgICAgIHN1Yl90cmll
ID0gdHJpZQorICAgICAgICBmb3Igbm9kZSBpbiBub2RlczoKKyAgICAgICAgICAgIHNlbGYuYXNz
ZXJ0VHJ1ZShub2RlIGluIHN1Yl90cmllKQorICAgICAgICAgICAgc3ViX3RyaWUgPSBzdWJfdHJp
ZVtub2RlXQorICAgICAgICByZXR1cm4gc3ViX3RyaWUKKwogICAgIGRlZiB0ZXN0X2pzb25fZ2Vu
ZXJhdGlvbihzZWxmKToKICAgICAgICAgc2VsZi5fdGVzdF9qc29uX2dlbmVyYXRpb24oW10sIFtd
KQogICAgICAgICBzZWxmLl90ZXN0X2pzb25fZ2VuZXJhdGlvbihbJ0ExJywgJ0IxJ10sIFtdKQpA
QCAtMTk3LDYgKzIwNCwxMCBAQCBjbGFzcyBKU09OR2VuZXJhdG9yVGVzdCh1bml0dGVzdC5UZXN0
Q2FzZSk6CiAgICAgICAgICAgICBbJ0ZMQUtZX0InLCAnRElTQUJMRURfQycsICdGQUlMU19EJ10s
CiAgICAgICAgICAgICBbJ0EnLCAnRkxBS1lfRSddKQogCisgICAgZGVmIHRlc3RfaGllcmFyY2hp
Y2FsX2pzb25fZ2VuZXJhdGlvbihzZWxmKToKKyAgICAgICAgIyBGSVhNRTogUmUtd29yayB0ZXN0
cyB0byBiZSBtb3JlIGNvbXByZWhlbnNpYmxlIGFuZCBjb21wcmVoZW5zaXZlLgorICAgICAgICBz
ZWxmLl90ZXN0X2pzb25fZ2VuZXJhdGlvbihbJ2Zvby9BJ10sIFsnZm9vL0InLCAnYmFyL0MnXSkK
KwogICAgIGRlZiB0ZXN0X3Rlc3RfdGltaW5nc190cmllKHNlbGYpOgogICAgICAgICB0ZXN0X3Bv
cnQgPSB0ZXN0LlRlc3RQb3J0KCkKICAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MgPSBb
XQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>