<?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>102229</bug_id>
          
          <creation_ts>2012-11-14 07:21:49 -0800</creation_ts>
          <short_desc>Add the --order option to NRWT</short_desc>
          <delta_ts>2012-11-24 09:15:57 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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>102396</dependson>
    
    <dependson>102401</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Zan Dobersek">zan</reporter>
          <assigned_to name="Zan Dobersek">zan</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dpranke</cc>
    
    <cc>kbalazs</cc>
    
    <cc>ojan</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>766870</commentid>
    <comment_count>0</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-11-14 07:21:49 -0800</bug_when>
    <thetext>As discussed on the webkit-dev mailing list[1], a new option, &apos;--order&apos; shall be added to specify in detail in what order the gathered tests should be run.
At this moment three possible values have been somewhat agreed upon:
&apos;natural&apos;, sorts the tests in natural order,
&apos;random&apos;, sorts the tests in random order,
&apos;none&apos;, keeps the order in which the tests were gathered.

The &apos;--randomized-order&apos; option shall be removed as its effect is now achievable through using &apos;--order=random&apos;.

I&apos;ll upload a patch in a moment.


[1] http://lists.webkit.org/pipermail/webkit-dev/2012-November/022750.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>766997</commentid>
    <comment_count>1</comment_count>
      <attachid>174186</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-11-14 10:03:47 -0800</bug_when>
    <thetext>Created attachment 174186
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767022</commentid>
    <comment_count>2</comment_count>
      <attachid>174186</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-11-14 10:27:55 -0800</bug_when>
    <thetext>Comment on attachment 174186
Patch

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

The patch adds two new modules under webkitpy.common. The natural_order (could use a better name) contains methods for natural sorting and test key that were moved here from the Sharder class. The test_name method contains the TEST_PATH_SEPARATOR variable and the split_test_name method, both moved here from the Port class.

Also, the natural ordering is used as default for the --order option while I proposed no ordering as default on the mailing. This preserves the current behavior.

&gt; Tools/Scripts/webkitpy/common/test_name.py:38
&gt; +    return (test_name[0:index], test_name[index:])

With a test name &apos;a/b/c.html&apos;, this returns (&apos;a/b&apos;, &apos;/c.html&apos;). Is the preceding / in the basename required? The unit tests don&apos;t complain, but I&apos;d like someone to confirm.

&gt; Tools/Scripts/webkitpy/thirdparty/ordered_set.py:89
&gt; +if __name__ == &apos;__main__&apos;:

I&apos;ve copied the whole source file from the link below the header, but this part isn&apos;t really needed. Can/Should it be removed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767124</commentid>
    <comment_count>3</comment_count>
      <attachid>174186</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-11-14 11:38:39 -0800</bug_when>
    <thetext>Comment on attachment 174186
Patch

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

Thanks for working on this! R-&apos;ing for now so we can get on the same page about the overall design for this.

&gt; Tools/Scripts/webkitpy/common/test_name.py:30
&gt; +TEST_PATH_SEPARATOR = &apos;/&apos;

Why are you splitting this out into a separate module? I can see the argument that all of the test name logic is generic and shouldn&apos;t be a part of the Port interface, but I would actually prefer to address that as a separate cleanup effort (how tests are named should be combined with other aspects of test lookup).

&gt;&gt; Tools/Scripts/webkitpy/common/test_name.py:38
&gt;&gt; +    return (test_name[0:index], test_name[index:])
&gt; 
&gt; With a test name &apos;a/b/c.html&apos;, this returns (&apos;a/b&apos;, &apos;/c.html&apos;). Is the preceding / in the basename required? The unit tests don&apos;t complain, but I&apos;d like someone to confirm.

That seems wrong (or at least bad). I would expect it to split into &apos;a/b&apos; and &apos;c.html&apos;, and I can&apos;t think that the slash is required on the front of the basename. Please make that change.

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_finder.py:51
&gt; +        paths = OrderedSet(paths)

It&apos;s not actually clear to me that we should be using an ordered set here. It seems like it would be useful (and a good idea) for &quot;run-webkit-tests foo bar foo&quot; to actually run the tests in foo twice. This would also allow us to use test lists to reproduce test runs with --repeat-each or --iterations more easily.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767149</commentid>
    <comment_count>4</comment_count>
      <attachid>174186</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-11-14 11:56:23 -0800</bug_when>
    <thetext>Comment on attachment 174186
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_finder.py:51
&gt;&gt; +        paths = OrderedSet(paths)
&gt; 
&gt; It&apos;s not actually clear to me that we should be using an ordered set here. It seems like it would be useful (and a good idea) for &quot;run-webkit-tests foo bar foo&quot; to actually run the tests in foo twice. This would also allow us to use test lists to reproduce test runs with --repeat-each or --iterations more easily.

Also, I&apos;m not sure where how you got to the OrderedSet implementation, but there is this page on the web ...

http://www.peterbe.com/plog/uniqifiers-benchmark

from which one can glean that you can write an order-preserving list-de-duping function like this:

def dedup_seq(xs):  # aka f7()
   seen = set()
   return [x for x in xs if x not in seen and not seen.add(x)]

&gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:596
&gt; +        return OrderedSet([self.relative_test_filename(f) for f in files])

Maybe this should just return the list?

&gt;&gt; Tools/Scripts/webkitpy/thirdparty/ordered_set.py:89
&gt;&gt; +if __name__ == &apos;__main__&apos;:
&gt; 
&gt; I&apos;ve copied the whole source file from the link below the header, but this part isn&apos;t really needed. Can/Should it be removed?

I would not use this module at all (as discussed above), but if we do decide to keep it, we should leave the file as close to the original as possible.


Also:

(In reply to comment #2)
&gt; (From update of attachment 174186 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=174186&amp;action=review
&gt; 
&gt; The patch adds two new modules under webkitpy.common. The natural_order (could use a better name) contains methods for natural sorting and test key that were moved here from the Sharder class. The test_name method contains the TEST_PATH_SEPARATOR variable and the split_test_name method, both moved here from the Port class.
&gt; 

What do you not like about &quot;natural_order&quot; as a name?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768081</commentid>
    <comment_count>5</comment_count>
      <attachid>174186</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-11-15 08:07:04 -0800</bug_when>
    <thetext>Comment on attachment 174186
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/common/test_name.py:30
&gt;&gt; +TEST_PATH_SEPARATOR = &apos;/&apos;
&gt; 
&gt; Why are you splitting this out into a separate module? I can see the argument that all of the test name logic is generic and shouldn&apos;t be a part of the Port interface, but I would actually prefer to address that as a separate cleanup effort (how tests are named should be combined with other aspects of test lookup).

I&apos;ll then produce a separate patch for this module.

&gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_finder.py:51
&gt;&gt;&gt; +        paths = OrderedSet(paths)
&gt;&gt; 
&gt;&gt; It&apos;s not actually clear to me that we should be using an ordered set here. It seems like it would be useful (and a good idea) for &quot;run-webkit-tests foo bar foo&quot; to actually run the tests in foo twice. This would also allow us to use test lists to reproduce test runs with --repeat-each or --iterations more easily.
&gt; 
&gt; Also, I&apos;m not sure where how you got to the OrderedSet implementation, but there is this page on the web ...
&gt; 
&gt; http://www.peterbe.com/plog/uniqifiers-benchmark
&gt; 
&gt; from which one can glean that you can write an order-preserving list-de-duping function like this:
&gt; 
&gt; def dedup_seq(xs):  # aka f7()
&gt;    seen = set()
&gt;    return [x for x in xs if x not in seen and not seen.add(x)]

The OrderedSet implementation was retrieved from http://code.activestate.com/recipes/576694/. The OrderedDict was imported from the same place.

I used OrderedSet so the current behavior of specifying &apos;foo bar foo&apos; would only run tests in &apos;foo bar&apos; in the specified order, but I can understand advantages of using &apos;foo bar foo&apos; to run tests in foo twice. Changing this behavior I don&apos;t think OrderedSet is required anymore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768255</commentid>
    <comment_count>6</comment_count>
      <attachid>174481</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-11-15 10:24:24 -0800</bug_when>
    <thetext>Created attachment 174481
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768321</commentid>
    <comment_count>7</comment_count>
      <attachid>174481</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-11-15 11:08:27 -0800</bug_when>
    <thetext>Comment on attachment 174481
Patch

r- now, because it isn&apos;t applyable, and the half applied patch killed the Qt EWS :-/

Failed to run &quot;[&apos;/storage/WebKit-qt-ews/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-i...&quot; exit_code: 1

Traceback (most recent call last):
  File &quot;/storage/WebKit-qt-ews/Tools/Scripts/webkit-patch&quot;, line 44, in &lt;module&gt;
    from webkitpy.tool.main import WebKitPatch
  File &quot;/storage/WebKit-qt-ews/Tools/Scripts/webkitpy/tool/main.py&quot;, line 37, in &lt;module&gt;
    from webkitpy.common.host import Host
  File &quot;/storage/WebKit-qt-ews/Tools/Scripts/webkitpy/common/host.py&quot;, line 38, in &lt;module&gt;
    from webkitpy.common.net.buildbot.chromiumbuildbot import ChromiumBuildBot
  File &quot;/storage/WebKit-qt-ews/Tools/Scripts/webkitpy/common/net/buildbot/chromiumbuildbot.py&quot;, line 32, in &lt;module&gt;
    from webkitpy.layout_tests.port.builders import builder_path_from_name
  File &quot;/storage/WebKit-qt-ews/Tools/Scripts/webkitpy/layout_tests/port/__init__.py&quot;, line 34, in &lt;module&gt;
    from base import Port  # It&apos;s possible we don&apos;t need to export this virtual baseclass outside the module.
  File &quot;/storage/WebKit-qt-ews/Tools/Scripts/webkitpy/layout_tests/port/base.py&quot;, line 51, in &lt;module&gt;
    from webkitpy.common import find_files
  File &quot;/storage/WebKit-qt-ews/Tools/Scripts/webkitpy/common/find_files.py&quot;, line 47, in &lt;module&gt;
    from webkitpy.common import natural_order
ImportError: cannot import name natural_order</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768763</commentid>
    <comment_count>8</comment_count>
      <attachid>174481</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-11-15 17:47:49 -0800</bug_when>
    <thetext>Comment on attachment 174481
Patch



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

This patch is mostly okay, but having to split my comments between this bug, bug 102401, and bug 102396 does make things a bit more complicated (which is why I wanted to make sure we were all on the same page before you did too much more work, but I guess the time zones worked against me. Sorry!).

In short, re: bug102401 - if we&apos;re going to make a separate module for natural sorting, it should not have anything to do w/ test names. 

re: bug102396 - I do not want to create a separate module for test names at this time. 

Once you sort those two issues out, then the comments on the rest of this patch are fairly straightforward ...

I apologize for the back-and-forth.

&gt; Tools/Scripts/webkitpy/common/find_files.py:84
&gt; +            paths_to_walk.append(path)

Since we&apos;re now using lists, you can now replace lines 76-84 with

paths_to_walk = itertools.chain(filesystem.glob(path) for path in paths)

I think :). I&apos;m not sure how much clearer that actually is; I usually find itertools.chain* confusing. But, calling glob every time and getting rid of the if is probably still an improvement.

&gt; Tools/Scripts/webkitpy/common/find_files.py:89
&gt; +        files.sort(key=natural_order.test_name_key)

You need to sort the files here in order to have files sorted properly when using --order=none but paths contain directories, right (since both --order=random and --order=natural will re-sort later in manager._prepare())?

See my comments in bug 102396 about test_names and the Port class (i.e., leave them in the port class); I think if you also move the test_name_key function to the Port object this will make the layering easier (and then I think the runner doesn&apos;t need to know about TEST_PATH_SEPARATOR either)

&gt; Tools/Scripts/webkitpy/common/find_files.py:90
&gt; +        all_files.extend(files)

Not that you could also use an itertools.chain() here, but I wouldn&apos;t necessarily recommend it :).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768948</commentid>
    <comment_count>9</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-11-15 22:54:00 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; In short, re: bug102401 - if we&apos;re going to make a separate module for natural sorting, it should not have anything to do w/ test names. 
&gt; 
&gt; re: bug102396 - I do not want to create a separate module for test names at this time. 

Right, understood. I&apos;ll create a new bug for moving the natural sorting to the base Port interface for now, as recommended in #102401.(In reply to comment #7)


&gt; (From update of attachment 174481 [details])
&gt; r- now, because it isn&apos;t applyable, and the half applied patch killed the Qt EWS :-/
&gt; 
&gt; Failed to run &quot;[&apos;/storage/WebKit-qt-ews/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-i...&quot; exit_code: 1
&gt; ...

Ugh, sorry about that. I&apos;ll look into why the EWS gets into problems when a patch isn&apos;t applied properly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770583</commentid>
    <comment_count>10</comment_count>
      <attachid>174481</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-11-19 04:10:30 -0800</bug_when>
    <thetext>Comment on attachment 174481
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/common/find_files.py:89
&gt;&gt; +        files.sort(key=natural_order.test_name_key)
&gt; 
&gt; You need to sort the files here in order to have files sorted properly when using --order=none but paths contain directories, right (since both --order=random and --order=natural will re-sort later in manager._prepare())?
&gt; 
&gt; See my comments in bug 102396 about test_names and the Port class (i.e., leave them in the port class); I think if you also move the test_name_key function to the Port object this will make the layering easier (and then I think the runner doesn&apos;t need to know about TEST_PATH_SEPARATOR either)

Yes, that&apos;s the reason why natural sorting is used here.

Unfortunately, moving the natural sorting and the test name key based on it to the Port interface and then using them here, in find_files, causes an import loop. Can the pure natural ordering functionality be moved into a separate module and then have the test name key definitions duplicated where required until the test name/path logic is moved into a separate module?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770898</commentid>
    <comment_count>11</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-11-19 11:53:51 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 174481 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=174481&amp;action=review
&gt; 
&gt; &gt;&gt; Tools/Scripts/webkitpy/common/find_files.py:89
&gt; &gt;&gt; +        files.sort(key=natural_order.test_name_key)
&gt; &gt; 
&gt; &gt; You need to sort the files here in order to have files sorted properly when using --order=none but paths contain directories, right (since both --order=random and --order=natural will re-sort later in manager._prepare())?
&gt; &gt; 
&gt; &gt; See my comments in bug 102396 about test_names and the Port class (i.e., leave them in the port class); I think if you also move the test_name_key function to the Port object this will make the layering easier (and then I think the runner doesn&apos;t need to know about TEST_PATH_SEPARATOR either)
&gt; 
&gt; Yes, that&apos;s the reason why natural sorting is used here.
&gt; 
&gt; Unfortunately, moving the natural sorting and the test name key based on it to the Port interface and then using them here, in find_files, causes an import loop. Can the pure natural ordering functionality be moved into a separate module and then have the test name key definitions duplicated where required until the test name/path logic is moved into a separate module?

Ah. Well, you can move the natural ordering functionality into a separate module, but I don&apos;t think it should know anything about test_names.

To get around the import loop we should modify find files to take an optional sort function parameter and pass it in from the call in base.Port. That will avoid any duplication and probably is the right thing to do anyway since the logic being used to sort files is very specific to the tests (and one can imagine plenty of uses for find_files that don&apos;t need sorting at all).

Or, we could just move find_files back into the Port class as well; it&apos;s not clear that it really makes sense as a standalone module since it&apos;s using the logic specific to test names and uses filesystem for the heavy lifting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>773145</commentid>
    <comment_count>12</comment_count>
      <attachid>175490</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-11-21 11:41:10 -0800</bug_when>
    <thetext>Created attachment 175490
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>773237</commentid>
    <comment_count>13</comment_count>
      <attachid>175490</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-21 13:43:07 -0800</bug_when>
    <thetext>Comment on attachment 175490
Patch

Attachment 175490 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14966080

New failing tests:
platform/chromium-linux/fast/text/international/complex-joining-using-gpos.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>773253</commentid>
    <comment_count>14</comment_count>
      <attachid>175490</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-11-21 13:57:50 -0800</bug_when>
    <thetext>Comment on attachment 175490
Patch

Close. Making Port.split_test a static method seems to defeat the point of the abstraction, and it doesn&apos;t seem like it&apos;s really needed anywhere? Looks fine otherwise, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>773696</commentid>
    <comment_count>15</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-11-22 00:47:59 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 175490 [details])
&gt; Close. Making Port.split_test a static method seems to defeat the point of the abstraction, and it doesn&apos;t seem like it&apos;s really needed anywhere? Looks fine otherwise, though.

It&apos;s now used in Port.test_key, which is static as well. Ergo, due to this use case, it should be possible to call split_test without a Port class instance.

How about making it a class method?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>774027</commentid>
    <comment_count>16</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-11-22 10:27:59 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; &gt; (From update of attachment 175490 [details] [details])
&gt; &gt; Close. Making Port.split_test a static method seems to defeat the point of the abstraction, and it doesn&apos;t seem like it&apos;s really needed anywhere? Looks fine otherwise, though.
&gt; 
&gt; It&apos;s now used in Port.test_key, which is static as well. Ergo, due to this use case, it should be possible to call split_test without a Port class instance.
&gt; 
&gt; How about making it a class method?

Yeah, but the only place where Port.test_key is used and you don&apos;t have access to a port object is in the unit tests, and it&apos;s certainly easy enough to create one there. I don&apos;t think classmethods actually help here, since the only way you&apos;d know which class method to call would be to have a port object already.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>774064</commentid>
    <comment_count>17</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-11-22 12:14:13 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #15)
&gt; &gt; (In reply to comment #14)
&gt; &gt; &gt; (From update of attachment 175490 [details] [details] [details])
&gt; &gt; &gt; Close. Making Port.split_test a static method seems to defeat the point of the abstraction, and it doesn&apos;t seem like it&apos;s really needed anywhere? Looks fine otherwise, though.
&gt; &gt; 
&gt; &gt; It&apos;s now used in Port.test_key, which is static as well. Ergo, due to this use case, it should be possible to call split_test without a Port class instance.
&gt; &gt; 
&gt; &gt; How about making it a class method?
&gt; 
&gt; Yeah, but the only place where Port.test_key is used and you don&apos;t have access to a port object is in the unit tests, and it&apos;s certainly easy enough to create one there. I don&apos;t think classmethods actually help here, since the only way you&apos;d know which class method to call would be to have a port object already.

Ah, yes, I can just use TestWebKitPort in the unit tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>774613</commentid>
    <comment_count>18</comment_count>
      <attachid>175817</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-11-23 09:20:39 -0800</bug_when>
    <thetext>Created attachment 175817
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>774684</commentid>
    <comment_count>19</comment_count>
      <attachid>175817</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-11-23 12:43:55 -0800</bug_when>
    <thetext>Comment on attachment 175817
Patch

Looks good. Thanks for bearing with me!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>774844</commentid>
    <comment_count>20</comment_count>
      <attachid>175817</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-11-24 09:15:47 -0800</bug_when>
    <thetext>Comment on attachment 175817
Patch

Clearing flags on attachment: 175817

Committed r135653: &lt;http://trac.webkit.org/changeset/135653&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>774845</commentid>
    <comment_count>21</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-11-24 09:15:57 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174186</attachid>
            <date>2012-11-14 10:03:47 -0800</date>
            <delta_ts>2012-11-15 10:24:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102229-20121114190146.patch</filename>
            <type>text/plain</type>
            <size>46663</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM0NjAyCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYWQ0ZTgyMmE4ZWI0ZDM5Yjg0YmQ0ZDg4YWQ5YzQ3OGJj
ZDQ5NWIzZS4uNzU2NTVkYTIwM2Q5NmRlMDlmYmNhODBjYmVkZWI0Y2FkZTNjMTE4NSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEw
OSBAQAorMjAxMi0xMS0xNCAgWmFuIERvYmVyc2VrICA8emFuZG9iZXJzZWtAZ21haWwuY29tPgor
CisgICAgICAgIEFkZCB0aGUgLS1vcmRlciBvcHRpb24gdG8gTlJXVAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAyMjI5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIC0tb3JkZXIgb3B0aW9uIGNvbnRy
b2xzIGluIHdoYXQgb3JkZXIgdGhlIGdhdGhlcmVkIHRlc3RzIHdpbGwgYmUgcnVuLgorICAgICAg
ICBUaGVyZSBhcmUgMyBvcHRpb25zOgorICAgICAgICAtIG5hdHVyYWwsIHRoZSB0ZXN0cyBhcmUg
c29ydGVkIGluIG5hdHVyYWwgb3JkZXIsCisgICAgICAgIC0gcmFuZG9tLCB0aGUgdGVzdHMgYXJl
IHNvcnRlZCBpbiByYW5kb20gb3JkZXIsCisgICAgICAgIC0gbm9uZSwgdGhlIHRlc3RzIGFyZSBr
ZXB0IGluIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IHdlcmUgc3BlY2lmaWVkIHRocm91Z2ggYXJn
dW1lbnRzCisgICAgICAgIG9yIHRoZSB0ZXN0IGxpc3QuCisKKyAgICAgICAgVGhlIG5hdHVyYWwg
b3B0aW9uIGlzIHRoZSBkZWZhdWx0IG9uZSBhbmQga2VlcHMgdGhlIGN1cnJlbnQgYmVoYXZpb3Iu
CisKKyAgICAgICAgVGhlIG5vbmUgb3B0aW9uIGlzIHByaW1hcmlseSBpbnRlbmRlZCB0byBiZSB1
c2VkIHdpdGggdGhlIC0tdGVzdC1saXN0IG9wdGlvbiwgd2l0aCB0aGUKKyAgICAgICAgdGVzdCBs
aXN0IGZpbGUgZXhwZWN0ZWQgdG8gbGlzdCBzcGVjaWZpYyB0ZXN0IG5hbWVzLgorICAgICAgICBX
aGVuIGEgZGlyZWN0b3J5IGlzIHNwZWNpZmllZCBhcyBvbmUgb2YgdGhlIHBhdGhzIGZyb20gdW5k
ZXIgd2hpY2ggdGVzdHMgc2hvdWxkIGJlCisgICAgICAgIGdhdGhlcmVkIGFuZCB0aGUgbm9uZSBv
cHRpb24gaXMgdXNlZCwgdGhhdCBwYXRoIHdpbGwgZXhwYW5kIHRvIGFsbCB0aGUgdGVzdHMgdW5k
ZXIgaXQsIHdpdGgKKyAgICAgICAgdGhlc2UgdGVzdHMgc29ydGVkIGluIHRoZSBuYXR1cmFsIG9y
ZGVyLgorCisgICAgICAgIFRoZSBPcmRlcmVkU2V0IHJlY2lwZSBpcyBhZGRlZCB1bmRlciB0aGly
ZCBwYXJ0eSBzb3VyY2VzIGFzIGl0IGlzIHVzZWQgaW4gcGxhY2VkIHdoZXJlIHBhdGhzCisgICAg
ICAgIG9yIHRlc3RzIGFyZSByZXF1aXJlZCB0byBiZSB1bmlxdWUgYnV0IGluIG9yZGVyLgorCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vZmluZF9maWxlcy5weToKKyAgICAgICAg
KF9ub3JtYWxpemVkX2ZpbmQpOiBVc2UgT3JkZXJlZFNldCBmb3IgcGF0aHMgdGhhdCB3aWxsIGJl
IHdhbGtlZCB0aHJvdWdoLiBUaGUgZ2F0aGVyZWQgdGVzdHMKKyAgICAgICAgdW5kZXIgdGhlc2Ug
cGF0aHMgYXJlIG5vdyBwdXQgaW4gYSBsaXN0LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL25hdHVyYWxfb3JkZXIucHk6IEFkZGVkLiBTcGxpdCB0aGUgbmF0dXJhbCBzb3J0aW5n
IGFuZCB0ZXN0IGtleQorICAgICAgICBiYXNlZCB1cG9uIGl0IGZyb20gdGhlIFNoYXJkZXIgY2xh
c3MgaW50byBpdHMgb3duIG1vZHVsZS4KKyAgICAgICAgKF9uYXR1cmFsX3NvcnRfa2V5KToKKyAg
ICAgICAgKF9uYXR1cmFsX3NvcnRfa2V5LnRyeWludCk6CisgICAgICAgICh0ZXN0X2tleSk6Cisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmF0dXJhbF9vcmRlcl91bml0dGVzdC5w
eTogQWRkZWQuIFRoZSB1bml0IHRlc3RzIGFyZSBtb3ZlZCBoZXJlIGZyb20KKyAgICAgICAgdGhl
IExheW91dFRlc3RSdW5uZXIgdW5pdCB0ZXN0cy4KKyAgICAgICAgKE5hdHVyYWxPcmRlclRlc3Qp
OgorICAgICAgICAoTmF0dXJhbE9yZGVyVGVzdC5hc3NlcnRDbXBOYXR1cmFsU29ydEtleSk6Cisg
ICAgICAgIChOYXR1cmFsT3JkZXJUZXN0LmFzc2VydENtcFRlc3RLZXkpOgorICAgICAgICAoTmF0
dXJhbE9yZGVyVGVzdC50ZXN0X25hdHVyYWxfc29ydF9rZXkpOgorICAgICAgICAoTmF0dXJhbE9y
ZGVyVGVzdC50ZXN0X3Rlc3Rfa2V5KToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi90ZXN0X25hbWUucHk6IEFkZGVkLiBNb3ZlIHRoZSB0ZXN0IG5hbWUgc3BsaXR0aW5nIG1ldGhv
ZCBhbmQgdGhlCisgICAgICAgIFRFU1RfUEFUSF9TRVBBUkFUT1IgaW50byB0aGVpciBvd24gbW9k
dWxlIGFzIHRoZXkncmUgbm90IHJlYWxseSBjb25uZWN0ZWQgdG8gdGhlIFBvcnQgY2xhc3MuCisg
ICAgICAgIChzcGxpdF90ZXN0X25hbWUpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29t
bW9uL3Rlc3RfbmFtZV91bml0dGVzdC5weTogQWRkZWQuIFRlc3RzIHRoZSB0ZXN0IG5hbWUgc3Bs
aXR0aW5nIGJlaGF2aW9yLgorICAgICAgICAoVGVzdE5hbWVUZXN0KToKKyAgICAgICAgKFRlc3RO
YW1lVGVzdC50ZXN0X3NwbGl0X3Rlc3RfbmFtZSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfZmluZGVyLnB5OgorICAgICAg
ICAoTGF5b3V0VGVzdEZpbmRlci5maW5kX3Rlc3RzKTogVGhlIG9wdGlvbnMgb2JqZWN0IGRvZXNu
J3QgbmVlZCB0byBiZSBwYXNzZWQgaW4gYXMgaXQncyBhbHJlYWR5CisgICAgICAgIHByZXNlbnQg
c2luY2UgaW5pdGlhbGl6YXRpb24uIFRoZSBwYXRocyBnYXRoZXJlZCBmcm9tIGFyZ3VtZW50cyBh
bmQgdGVzdCBsaXN0IGZpbGUgYXJlIG5vdyBrZXB0CisgICAgICAgIGluIGFuIG9yZGVyZWQgc2V0
LgorICAgICAgICAoTGF5b3V0VGVzdEZpbmRlci5fc3RyaXBfdGVzdF9kaXJfcHJlZml4KToKKyAg
ICAgICAgKExheW91dFRlc3RGaW5kZXIuc2tpcF90ZXN0cyk6IEEgbm9ybWFsIFB5dGhvbiBzZXQg
c3VmZmljZXMgZm9yIHRoZSB0ZXN0c190b19za2lwIHZhcmlhYmxlLgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X3J1bm5lci5w
eToKKyAgICAgICAgKExheW91dFRlc3RSdW5uZXIuX19pbml0X18pOiBGaXggdGhlIFNoYXJkZXIg
aW5pdGlhbGl6YXRpb24gY2FsbC4KKyAgICAgICAgKFNoYXJkZXIuX19pbml0X18pOiBGaXggdGhl
IFNoYXJkZXIgaW5pdGlhbGl6YXRvci4KKyAgICAgICAgKFNoYXJkZXIuX3NoYXJkX2J5X2RpcmVj
dG9yeSk6IFVzZSB0aGUgc3BsaXRfdGVzdF9uYW1lIGZyb20gdGhlIHRlc3RfbmFtZSBtb2R1bGUg
bm93IHRoYXQgU2hhcmRlcgorICAgICAgICBpc24ndCBwYXNzZWQgYSBzcGVjaWZpYyBzcGxpdCBm
dW5jdGlvbi4KKyAgICAgICAgKFNoYXJkZXIuX3Jlc2l6ZV9zaGFyZHMpOiBSZW1vdmUgdGhlIHRl
c3Rfa2V5IGFuZCBuYXR1cmFsX3NvcnRfa2V5IG1ldGhvZHMsIHRoZXkgd2VyZSBtb3ZlZCB0bwor
ICAgICAgICB0aGUgbmF0dXJhbF9vcmRlciBtb2R1bGUuCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVubmVyX3VuaXR0ZXN0
LnB5OgorICAgICAgICAoU2hhcmRlclRlc3RzLmdldF9zaGFyZHMpOiBBZGp1c3QgdGhlIFNoYWRl
ciBpbml0aWFsaXphdGlvbi4KKyAgICAgICAgKFNoYXJkZXJUZXN0cy50ZXN0X211bHRpcGxlX2xv
Y2tlZF9zaGFyZHMpOiBUaGUgbmF0dXJhbCBzb3J0aW5nIGFuZCBjb21wYXJpc29uIGtleSBhcmUg
bW92ZWQgdG8gdGhlCisgICAgICAgIG5hdHVyYWxfb3JkZXIgbW9kdWxlIHVuaXQgdGVzdHMuCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdl
ci5weToKKyAgICAgICAgKE1hbmFnZXIuX19pbml0X18pOgorICAgICAgICAoTWFuYWdlci5fY29s
bGVjdF90ZXN0cyk6IE5vIG5lZWQgdG8gcGFzcyB0aGUgb3B0aW9ucyB0byB0aGUgTGF5b3V0VGVz
dEZpbmRlcidzIGZpbmRfdGVzdHMgbWV0aG9kLgorICAgICAgICAoTWFuYWdlci5faXNfcGVyZl90
ZXN0KToKKyAgICAgICAgKE1hbmFnZXIuX3ByZXBhcmVfbGlzdHMpOiBUaGUgc2VsZi5fdGVzdF9u
YW1lcyB2YXJpYWJsZSwgYmVpbmcgYW4gT3JkZXJlZFNldCwgaXMgY29udmVydGVkIHRvIGEgbGlz
dAorICAgICAgICBhZnRlciB0aGUgc2tpcHBlZCB0ZXN0cyBhcmUgc3VidHJhY3RlZCBmcm9tIGl0
LiBUaGUgbGlzdCBpcyB0aGVuIHNvcnRlZCBhcyB0aGUgLS1vcmRlciBvcHRpb24gZGljdGF0ZXMu
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFu
YWdlcl91bml0dGVzdC5weToKKyAgICAgICAgKE1hbmFnZXJUZXN0LnRlc3RfbmVlZHNfc2VydmVy
cy5nZXRfbWFuYWdlcl93aXRoX3Rlc3RzKTogVGhlIFRFU1RfUEFUSF9TRVBBUkFUT1IgaXMgbm90
IGEgcGFydAorICAgICAgICBvZiB0aGUgUG9ydCBjbGFzcyBhbnltb3JlLgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weToKKyAgICAgICAgKFBvcnQp
OiBURVNUX1BBVEhfU0VQQVJBVE9SIGlzIG1vdmVkIHRvIHRoZSB0ZXN0X25hbWUgbW9kdWxlLgor
ICAgICAgICAoUG9ydC50ZXN0cyk6IFRoZSBfcmVhbF90ZXN0cyByZXR1cm5zIGFuIE9yZGVyZWRT
ZXQgd2hpY2ggZG9lc24ndCBzdXBwb3J0IHRoZSB1bmlvbiBtZXRob2QsIHNvIHRoZSBjYWxsCisg
ICAgICAgIGlzIHJlcGxhY2VkIHdpdGggdGhlIGVxdWl2YWxlbnQgfCBvcGVyYXRvci4KKyAgICAg
ICAgKFBvcnQuX3JlYWxfdGVzdHMpOiBSZXR1cm4gdGhlIHRlc3RzIGluIGFuIE9yZGVyZWRTZXQu
CisgICAgICAgIChQb3J0LnRlc3RfZXhpc3RzKTogVGhlIHNwbGl0X3Rlc3QgbWV0aG9kIGlzIG1v
dmVkIHRvIHRoZSB0ZXN0X25hbWUgbW9kdWxlIHdoZXJlIGl0J3MgbmFtZWQgc3BsaXRfdGVzdF9u
YW1lLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbW9ja19k
cnQucHk6CisgICAgICAgIChNb2NrRFJULnJ1bik6IFVzZSB0aGUgc3BsaXRfdGVzdF9uYW1lIGZy
b20gdGhlIHRlc3RfbmFtZSBtb2R1bGUuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weToKKyAgICAgICAgKHBhcnNlX2FyZ3MpOiBSZW1v
dmUgdGhlIC0tcmFuZG9taXplLW9yZGVyIG9wdGlvbi4gVGVzdCBvcmRlciByYW5kb21pemF0aW9u
IGlzIG5vdyBzdXBwb3J0ZWQgdGhyb3VnaCB1c2luZworICAgICAgICAtLW9yZGVyPXJhbmRvbS4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3Rz
X2ludGVncmF0aW9udGVzdC5weToKKyAgICAgICAgKE1haW5UZXN0KTogUmVtb3ZlIHRoZSB1bml0
IHRlc3QgY292ZXJpbmcgdGhlIC0tcmFuZG9taXplLW9yZGVyIG9wdGlvbiBzaW5jZSBpdCdzIG5v
IGxvbmdlciBwcmVzZW50LgorICAgICAgICAoTWFpblRlc3QudGVzdF9uYXR1cmFsX29yZGVyKTog
QWRkIGEgdW5pdCB0ZXN0IGZvciB0aGUgbmF0dXJhbCB0ZXN0IG9yZGVyaW5nLgorICAgICAgICAo
TWFpblRlc3QudGVzdF9yYW5kb21fb3JkZXIpOiBBZGQgYSB1bml0IHRlc3QgZm9yIHRoZSByYW5k
b20gdGVzdCBvcmRlcmluZy4KKyAgICAgICAgKE1haW5UZXN0LnRlc3Rfbm9fb3JkZXIpOiBBZGQg
YSB1bml0IHRlc3QgZm9yIG5vIHRlc3Qgb3JkZXJpbmcuCisgICAgICAgIChNYWluVGVzdC50ZXN0
X25vX29yZGVyX3dpdGhfZGlyZWN0b3J5X2VudHJpZXNfaW5fbmF0dXJhbF9vcmRlcik6IEFkZCBh
IHVuaXQgdGVzdCBmb3IgY2hlY2tpbmcgdGhhdCB0ZXN0cyB1bmRlcgorICAgICAgICBzcGVjaWZp
ZWQgZGlyZWN0b3J5IHBhdGhzIGFyZSBvcmRlcmVkIGluIG5hdHVyYWwgb3JkZXIgd2hpbGUgbm8g
dGVzdCBvcmRlcmluZyBpcyB1c2VkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGhpcmRw
YXJ0eS9vcmRlcmVkX3NldC5weTogQWRkZWQuCisgICAgICAgIChPcmRlcmVkU2V0KToKKyAgICAg
ICAgKE9yZGVyZWRTZXQuX19pbml0X18pOgorICAgICAgICAoT3JkZXJlZFNldC5fX2xlbl9fKToK
KyAgICAgICAgKE9yZGVyZWRTZXQuX19jb250YWluc19fKToKKyAgICAgICAgKE9yZGVyZWRTZXQu
YWRkKToKKyAgICAgICAgKE9yZGVyZWRTZXQuZGlzY2FyZCk6CisgICAgICAgIChPcmRlcmVkU2V0
Ll9faXRlcl9fKToKKyAgICAgICAgKE9yZGVyZWRTZXQuX19yZXZlcnNlZF9fKToKKyAgICAgICAg
KE9yZGVyZWRTZXQucG9wKToKKyAgICAgICAgKE9yZGVyZWRTZXQuX19yZXByX18pOgorICAgICAg
ICAoT3JkZXJlZFNldC5fX2VxX18pOgorICAgICAgICAoT3JkZXJlZFNldC5fX2RlbF9fKToKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVlcmllcy5weToKKyAgICAg
ICAgKFByaW50RXhwZWN0YXRpb25zLmV4ZWN1dGUpOiBDb252ZXJ0IHRoZSBPcmRlcmVkU2V0IHJl
dHVybmVkIGJ5IFBvcnQudGVzdHMgdG8gYSBzaW1wbGUgc2V0IG9iamVjdC4KKwogMjAxMi0xMS0x
NCAgVGhpYWdvIE1hcmNvcyBQLiBTYW50b3MgIDx0aGlhZ28uc2FudG9zQGludGVsLmNvbT4KIAog
ICAgICAgICBSRUdSRVNTSU9OKHIxMzM3NTcpOiBDYXVzaW5nIHdlYmtpdHB5IHVuaXQgdGVzdHMg
dG8gZmFpbApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vZmluZF9m
aWxlcy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2ZpbmRfZmlsZXMucHkKaW5k
ZXggMzJjZTRkMTA1OWZhNTc0YTdlY2Q5Yjk3YTY1YTc1NDViYjM1NjY4OC4uOGUwNjk4NWNmODQ3
ZTZhYTUwMzRmOTMyMWFmMjUyODkxNTM4Yzg1MiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9jb21tb24vZmluZF9maWxlcy5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi9maW5kX2ZpbGVzLnB5CkBAIC00NCw2ICs0NCw5IEBAIElmIGEgY2FsbGJhY2sgaXMg
cGFzc2VkIGluLCBpdCB3aWxsIGJlIGNhbGxlZCBmb3IgdGhlIGVhY2ggZmlsZSBhbmQgdGhlIGZp
bGUKIHdpbGwgYmUgaW5jbHVkZWQgaW50byB0aGUgcmVzdWx0IGlmIHRoZSBjYWxsYmFjayByZXR1
cm5zIFRydWUuCiBUaGUgY2FsbGJhY2sgaGFzIHRvIHRha2UgdGhyZWUgYXJndW1lbnRzOiBmaWxl
c3lzdGVtLCBkaXJuYW1lIGFuZCBmaWxlbmFtZS4iIiIKIAorZnJvbSB3ZWJraXRweS5jb21tb24g
aW1wb3J0IG5hdHVyYWxfb3JkZXIKK2Zyb20gd2Via2l0cHkudGhpcmRwYXJ0eS5vcmRlcmVkX3Nl
dCBpbXBvcnQgT3JkZXJlZFNldAorCiAKIGRlZiBmaW5kKGZpbGVzeXN0ZW0sIGJhc2VfZGlyLCBw
YXRocz1Ob25lLCBza2lwcGVkX2RpcmVjdG9yaWVzPU5vbmUsIGZpbGVfZmlsdGVyPU5vbmUpOgog
ICAgICIiIkZpbmRzIHRoZSBzZXQgb2YgdGVzdHMgdW5kZXIgYSBnaXZlbiBsaXN0IG9mIHN1Yi1w
YXRocy4KQEAgLTcxLDIwICs3NCwyMCBAQCBkZWYgX25vcm1hbGl6ZWRfZmluZChmaWxlc3lzdGVt
LCBwYXRocywgc2tpcHBlZF9kaXJlY3RvcmllcywgZmlsZV9maWx0ZXIpOgogICAgICAgcGF0aHM6
IGEgbGlzdCBvZiBhYnNvbHV0ZSBwYXRoIGV4cHJlc3Npb25zIHRvIHNlYXJjaC4KICAgICAgICAg
ICBHbG9iIHBhdHRlcm5zIGFyZSBvay4KICAgICAiIiIKLSAgICBwYXRoc190b193YWxrID0gc2V0
KCkKKyAgICBwYXRoc190b193YWxrID0gT3JkZXJlZFNldCgpCiAKICAgICBmb3IgcGF0aCBpbiBw
YXRoczoKICAgICAgICAgIyBJZiB0aGVyZSdzIGFuICogaW4gdGhlIG5hbWUsIGFzc3VtZSBpdCdz
IGEgZ2xvYiBwYXR0ZXJuLgogICAgICAgICBpZiBwYXRoLmZpbmQoJyonKSA+IC0xOgogICAgICAg
ICAgICAgZmlsZW5hbWVzID0gZmlsZXN5c3RlbS5nbG9iKHBhdGgpCi0gICAgICAgICAgICBwYXRo
c190b193YWxrLnVwZGF0ZShmaWxlbmFtZXMpCisgICAgICAgICAgICBwYXRoc190b193YWxrIHw9
IGZpbGVuYW1lcwogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcGF0aHNfdG9fd2Fsay5hZGQo
cGF0aCkKIAotICAgICMgRklYTUU6IEknbSBub3Qgc3VyZSB0aGVyZSdzIG11Y2ggcG9pbnQgaW4g
dGhpcyBiZWluZyBhIHNldC4gQSBsaXN0IHdvdWxkIHByb2JhYmx5IGJlIGZhc3Rlci4KLSAgICBh
bGxfZmlsZXMgPSBzZXQoKQorICAgIGFsbF9maWxlcyA9IGxpc3QoKQogICAgIGZvciBwYXRoIGlu
IHBhdGhzX3RvX3dhbGs6CiAgICAgICAgIGZpbGVzID0gZmlsZXN5c3RlbS5maWxlc191bmRlcihw
YXRoLCBza2lwcGVkX2RpcmVjdG9yaWVzLCBmaWxlX2ZpbHRlcikKLSAgICAgICAgYWxsX2ZpbGVz
LnVwZGF0ZShzZXQoZmlsZXMpKQorICAgICAgICBmaWxlcy5zb3J0KGtleT1uYXR1cmFsX29yZGVy
LnRlc3Rfa2V5KQorICAgICAgICBhbGxfZmlsZXMuZXh0ZW5kKGZpbGVzKQogCiAgICAgcmV0dXJu
IGFsbF9maWxlcwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmF0
dXJhbF9vcmRlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25hdHVyYWxfb3Jk
ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMGVjYTBkOTMyM2MzZjFmZWVkYWYzZmU1YjNlMmE2ZDU5MzcxN2U0
YQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25hdHVy
YWxfb3JkZXIucHkKQEAgLTAsMCArMSw1OCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIwor
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
IyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBy
ZQorCitmcm9tIHdlYmtpdHB5LmNvbW1vbiBpbXBvcnQgdGVzdF9uYW1lCisKKworZGVmIF9uYXR1
cmFsX3NvcnRfa2V5KHN0cmluZ190b19zcGxpdCk6CisgICAgIiIiIFR1cm5zIGEgc3RyaW5nIGlu
dG8gYSBsaXN0IG9mIHN0cmluZyBhbmQgbnVtYmVyIGNodW5rcywgaS5lLiAiejIzYSIgLT4gWyJ6
IiwgMjMsICJhIl0KKworICAgIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50ICJuYXR1cmFs
IHNvcnQiIG9yZGVyLiBTZWU6CisgICAgaHR0cDovL3d3dy5jb2Rpbmdob3Jyb3IuY29tL2Jsb2cv
MjAwNy8xMi9zb3J0aW5nLWZvci1odW1hbnMtbmF0dXJhbC1zb3J0LW9yZGVyLmh0bWwKKyAgICBo
dHRwOi8vbmVkYmF0Y2hlbGRlci5jb20vYmxvZy8yMDA3MTIuaHRtbCNlMjAwNzEyMTFUMDU0OTU2
CisgICAgIiIiCisgICAgZGVmIHRyeWludCh2YWwpOgorICAgICAgICB0cnk6CisgICAgICAgICAg
ICByZXR1cm4gaW50KHZhbCkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAg
ICByZXR1cm4gdmFsCisKKyAgICByZXR1cm4gW3RyeWludChjaHVuaykgZm9yIGNodW5rIGluIHJl
LnNwbGl0KCcoXGQrKScsIHN0cmluZ190b19zcGxpdCldCisKKworZGVmIHRlc3Rfa2V5KG5hbWUp
OgorICAgICIiIlR1cm5zIGEgdGVzdCBuYW1lIGludG8gYSBsaXN0IHdpdGggdHdvIHN1Ymxpc3Rz
LCB0aGUgbmF0dXJhbCBrZXkgb2YgdGhlCisgICAgZGlybmFtZSwgYW5kIHRoZSBuYXR1cmFsIGtl
eSBvZiB0aGUgYmFzZW5hbWUuCisKKyAgICBUaGlzIGNhbiBiZSB1c2VkIHdoZW4gc29ydGluZyBw
YXRocyBzbyB0aGF0IGZpbGVzIGluIGEgZGlyZWN0b3J5LgorICAgIGRpcmVjdG9yeSBhcmUga2Vw
dCB0b2dldGhlciByYXRoZXIgdGhhbiBiZWluZyBtaXhlZCBpbiB3aXRoIGZpbGVzIGluCisgICAg
c3ViZGlyZWN0b3JpZXMuIiIiCisgICAgZGlybmFtZSwgYmFzZW5hbWUgPSB0ZXN0X25hbWUuc3Bs
aXRfdGVzdF9uYW1lKG5hbWUpCisgICAgcmV0dXJuIChfbmF0dXJhbF9zb3J0X2tleShkaXJuYW1l
ICsgdGVzdF9uYW1lLlRFU1RfUEFUSF9TRVBBUkFUT1IpLCBfbmF0dXJhbF9zb3J0X2tleShiYXNl
bmFtZSkpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uYXR1cmFs
X29yZGVyX3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmF0dXJh
bF9vcmRlcl91bml0dGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNDgzNzAzODg0NzJiODQyMmJkMWM5Y2Q4
OWZjYTI2MjQ2OGJiYzY4Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vbmF0dXJhbF9vcmRlcl91bml0dGVzdC5weQpAQCAtMCwwICsxLDY3IEBACisjIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5
cmlnaHQgKEMpIDIwMTAgR2Fib3IgUmFwY3NhbnlpIChyZ2Fib3JAaW5mLnUtc3plZ2VkLmh1KSwg
VW5pdmVyc2l0eSBvZiBTemVnZWQKKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMg
bWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
IyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCB1bml0dGVz
dAorCitmcm9tIHdlYmtpdHB5LmNvbW1vbiBpbXBvcnQgbmF0dXJhbF9vcmRlcgorCisKK2NsYXNz
IE5hdHVyYWxPcmRlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBhc3NlcnRDbXBO
YXR1cmFsU29ydEtleShzZWxmLCB4LCB5LCByZXN1bHQpOgorICAgICAgICBzZWxmLmFzc2VydEVx
dWFscyhjbXAobmF0dXJhbF9vcmRlci5fbmF0dXJhbF9zb3J0X2tleSh4KSwgbmF0dXJhbF9vcmRl
ci5fbmF0dXJhbF9zb3J0X2tleSh5KSksIHJlc3VsdCkKKworICAgIGRlZiBhc3NlcnRDbXBUZXN0
S2V5KHNlbGYsIHgsIHksIHJlc3VsdCk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNtcChu
YXR1cmFsX29yZGVyLnRlc3Rfa2V5KHgpLCBuYXR1cmFsX29yZGVyLnRlc3Rfa2V5KHkpKSwgcmVz
dWx0KQorCisgICAgZGVmIHRlc3RfbmF0dXJhbF9zb3J0X2tleShzZWxmKToKKyAgICAgICAgc2Vs
Zi5hc3NlcnRDbXBOYXR1cmFsU29ydEtleSgnYScsICdhJywgMCkKKyAgICAgICAgc2VsZi5hc3Nl
cnRDbXBOYXR1cmFsU29ydEtleSgnYWInLCAnYScsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0Q21w
TmF0dXJhbFNvcnRLZXkoJ2EnLCAnYWInLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRDbXBOYXR1
cmFsU29ydEtleSgnJywgJycsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0Q21wTmF0dXJhbFNvcnRL
ZXkoJycsICdhYicsIC0xKQorICAgICAgICBzZWxmLmFzc2VydENtcE5hdHVyYWxTb3J0S2V5KCcx
JywgJzInLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRDbXBOYXR1cmFsU29ydEtleSgnMicsICcx
JywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRDbXBOYXR1cmFsU29ydEtleSgnMScsICcxMCcsIC0x
KQorICAgICAgICBzZWxmLmFzc2VydENtcE5hdHVyYWxTb3J0S2V5KCcyJywgJzEwJywgLTEpCisg
ICAgICAgIHNlbGYuYXNzZXJ0Q21wTmF0dXJhbFNvcnRLZXkoJ2Zvb18xLmh0bWwnLCAnZm9vXzIu
aHRtbCcsIC0xKQorICAgICAgICBzZWxmLmFzc2VydENtcE5hdHVyYWxTb3J0S2V5KCdmb29fMS4x
Lmh0bWwnLCAnZm9vXzIuaHRtbCcsIC0xKQorICAgICAgICBzZWxmLmFzc2VydENtcE5hdHVyYWxT
b3J0S2V5KCdmb29fMS5odG1sJywgJ2Zvb18xMC5odG1sJywgLTEpCisgICAgICAgIHNlbGYuYXNz
ZXJ0Q21wTmF0dXJhbFNvcnRLZXkoJ2Zvb18yLmh0bWwnLCAnZm9vXzEwLmh0bWwnLCAtMSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRDbXBOYXR1cmFsU29ydEtleSgnZm9vXzIzLmh0bWwnLCAnZm9vXzEw
Lmh0bWwnLCAxKQorICAgICAgICBzZWxmLmFzc2VydENtcE5hdHVyYWxTb3J0S2V5KCdmb29fMjMu
aHRtbCcsICdmb29fMTAwLmh0bWwnLCAtMSkKKworICAgIGRlZiB0ZXN0X3Rlc3Rfa2V5KHNlbGYp
OgorICAgICAgICBzZWxmLmFzc2VydENtcFRlc3RLZXkoJy9hJywgJy9hJywgMCkKKyAgICAgICAg
c2VsZi5hc3NlcnRDbXBUZXN0S2V5KCcvYScsICcvYicsIC0xKQorICAgICAgICBzZWxmLmFzc2Vy
dENtcFRlc3RLZXkoJy9hMicsICcvYTEwJywgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0Q21wVGVz
dEtleSgnL2EyL2ZvbycsICcvYTEwL2ZvbycsIC0xKQorICAgICAgICBzZWxmLmFzc2VydENtcFRl
c3RLZXkoJy9hL2ZvbzExJywgJy9hL2ZvbzInLCAxKQorICAgICAgICBzZWxmLmFzc2VydENtcFRl
c3RLZXkoJy9hYicsICcvYS9hL2InLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRDbXBUZXN0S2V5
KCcvYS9hL2InLCAnL2FiJywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRDbXBUZXN0S2V5KCcvZm9v
LWJhci9iYXonLCAnL2Zvby9iYXonLCAtMSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL3Rlc3RfbmFtZS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L3Rlc3RfbmFtZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNmQxNWE3MzVhZmYyNjZlOTU4NjVjMWYzNmI2MmIy
NTJlMWYyODRiCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vdGVzdF9uYW1lLnB5CkBAIC0wLDAgKzEsMzggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIEdv
b2dsZSBuYW1lIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIyBUZXN0IG5hbWVz
IHJlc2VtYmxlIHVuaXggcmVsYXRpdmUgcGF0aHMsIGFuZCB1c2UgJy8nIGFzIGEgZGlyZWN0b3J5
IHNlcGFyYXRvci4KK1RFU1RfUEFUSF9TRVBBUkFUT1IgPSAnLycKKworCitkZWYgc3BsaXRfdGVz
dF9uYW1lKHRlc3RfbmFtZSk6CisgICAgIiIiU3BsaXRzIGEgdGVzdCBuYW1lIGludG8gdGhlICdk
aXJlY3RvcnknIHBhcnQgYW5kIHRoZSAnYmFzZW5hbWUnIHBhcnQuIiIiCisgICAgaW5kZXggPSB0
ZXN0X25hbWUucmZpbmQoVEVTVF9QQVRIX1NFUEFSQVRPUikKKyAgICBpZiBpbmRleCA8IDE6Cisg
ICAgICAgIHJldHVybiAoJycsIHRlc3RfbmFtZSkKKyAgICByZXR1cm4gKHRlc3RfbmFtZVswOmlu
ZGV4XSwgdGVzdF9uYW1lW2luZGV4Ol0pCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi90ZXN0X25hbWVfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2NvbW1vbi90ZXN0X25hbWVfdW5pdHRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmExM2UxNjc1MjNjM2Iz
NTM4MjRlM2JjZTI3MDliZjVjNDM1NGMwNQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL3Rlc3RfbmFtZV91bml0dGVzdC5weQpAQCAtMCwwICsxLDQ2IEBA
CisjIENvcHlyaWdodCAoQykgMjAxMiBaYW4gRG9iZXJzZWsgPHphbmRvYmVyc2VrQGdtYWlsLmNv
bT4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRp
b24uCisjICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisj
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
IyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHdlYmtpdHB5LmNv
bW1vbiBpbXBvcnQgdGVzdF9uYW1lCisKKworY2xhc3MgVGVzdE5hbWVUZXN0KHVuaXR0ZXN0LlRl
c3RDYXNlKToKKyAgICBkZWYgdGVzdF9zcGxpdF90ZXN0X25hbWUoc2VsZik6CisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwodGVzdF9uYW1lLnNwbGl0X3Rlc3RfbmFtZSgnYS9iL2MuaHRtbCcpLCAo
J2EvYicsICcvYy5odG1sJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdF9uYW1lLnNw
bGl0X3Rlc3RfbmFtZSgnYy5odG1sJyksICgnJywgJ2MuaHRtbCcpKQorCisgICAgICAgICMgQSBo
eXBvdGhldGljYWwgdGVzdCB0aGF0IGRlbW9uc3RyYXRlcyB0aGUgbmFtZSBzcGxpdCBpcyBiYXNl
ZCBvbiB0aGUgcGF0aCBzZXBhcmF0b3IKKyAgICAgICAgZGVmYXVsdF9zZXBhcmF0b3IgPSB0ZXN0
X25hbWUuVEVTVF9QQVRIX1NFUEFSQVRPUgorICAgICAgICB0ZXN0X25hbWUuVEVTVF9QQVRIX1NF
UEFSQVRPUiA9ICd4JworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3RfbmFtZS5zcGxpdF90
ZXN0X25hbWUoJ2F4YnhjLmh0bWwnKSwgKCdheGInLCAneGMuaHRtbCcpKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKHRlc3RfbmFtZS5zcGxpdF90ZXN0X25hbWUoJ2MuaHRtbCcpLCAoJycsICdj
Lmh0bWwnKSkKKworICAgICAgICAjIFJldmVydHMgdGhlIHNlcGFyYXRvciBiYWNrIHRvIHRoZSBk
ZWZhdWx0IHZhbHVlIHNvIG90aGVyIHRlc3RzIGFyZSBub3QgYWZmZWN0ZWQKKyAgICAgICAgdGVz
dF9uYW1lLlRFU1RfUEFUSF9TRVBBUkFUT1IgPSBkZWZhdWx0X3NlcGFyYXRvcgpkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0
X3Rlc3RfZmluZGVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29u
dHJvbGxlcnMvbGF5b3V0X3Rlc3RfZmluZGVyLnB5CmluZGV4IDY0NDdjOGZiNDg5YTE0ZWJmZmE2
NTg5Y2M0NzdiZWNkZDlmNGFlOWYuLjNmM2NkZWZkNGYwOTQ1ZDkxMWZkZWEyZmRhMzUyMzdiZDhj
OWQxOGQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2Nv
bnRyb2xsZXJzL2xheW91dF90ZXN0X2ZpbmRlci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVzdF9maW5kZXIucHkKQEAgLTMw
LDggKzMwLDkgQEAgaW1wb3J0IGVycm5vCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IHJlCiAKK2Zy
b20gd2Via2l0cHkuY29tbW9uIGltcG9ydCB0ZXN0X25hbWUKIGZyb20gd2Via2l0cHkubGF5b3V0
X3Rlc3RzLm1vZGVscyBpbXBvcnQgdGVzdF9leHBlY3RhdGlvbnMKLQorZnJvbSB3ZWJraXRweS50
aGlyZHBhcnR5Lm9yZGVyZWRfc2V0IGltcG9ydCBPcmRlcmVkU2V0CiAKIF9sb2cgPSBsb2dnaW5n
LmdldExvZ2dlcihfX25hbWVfXykKIApAQCAtNDMsMTEgKzQ0LDExIEBAIGNsYXNzIExheW91dFRl
c3RGaW5kZXIob2JqZWN0KToKICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbSA9IHNlbGYuX3BvcnQu
aG9zdC5maWxlc3lzdGVtCiAgICAgICAgIHNlbGYuTEFZT1VUX1RFU1RTX0RJUkVDVE9SWSA9ICdM
YXlvdXRUZXN0cycKIAotICAgIGRlZiBmaW5kX3Rlc3RzKHNlbGYsIG9wdGlvbnMsIGFyZ3MpOgor
ICAgIGRlZiBmaW5kX3Rlc3RzKHNlbGYsIGFyZ3MpOgogICAgICAgICBwYXRocyA9IHNlbGYuX3N0
cmlwX3Rlc3RfZGlyX3ByZWZpeGVzKGFyZ3MpCi0gICAgICAgIGlmIG9wdGlvbnMudGVzdF9saXN0
OgotICAgICAgICAgICAgcGF0aHMgKz0gc2VsZi5fc3RyaXBfdGVzdF9kaXJfcHJlZml4ZXMoc2Vs
Zi5fcmVhZF90ZXN0X25hbWVzX2Zyb21fZmlsZShvcHRpb25zLnRlc3RfbGlzdCwgc2VsZi5fcG9y
dC5URVNUX1BBVEhfU0VQQVJBVE9SKSkKLSAgICAgICAgcGF0aHMgPSBzZXQocGF0aHMpCisgICAg
ICAgIGlmIHNlbGYuX29wdGlvbnMudGVzdF9saXN0OgorICAgICAgICAgICAgcGF0aHMgKz0gc2Vs
Zi5fc3RyaXBfdGVzdF9kaXJfcHJlZml4ZXMoc2VsZi5fcmVhZF90ZXN0X25hbWVzX2Zyb21fZmls
ZShzZWxmLl9vcHRpb25zLnRlc3RfbGlzdCwgdGVzdF9uYW1lLlRFU1RfUEFUSF9TRVBBUkFUT1Ip
KQorICAgICAgICBwYXRocyA9IE9yZGVyZWRTZXQocGF0aHMpCiAgICAgICAgIHRlc3RfZmlsZXMg
PSBzZWxmLl9wb3J0LnRlc3RzKHBhdGhzKQogICAgICAgICByZXR1cm4gKHBhdGhzLCB0ZXN0X2Zp
bGVzKQogCkBAIC01Nyw4ICs1OCw4IEBAIGNsYXNzIExheW91dFRlc3RGaW5kZXIob2JqZWN0KToK
ICAgICBkZWYgX3N0cmlwX3Rlc3RfZGlyX3ByZWZpeChzZWxmLCBwYXRoKToKICAgICAgICAgIyBI
YW5kbGUgYm90aCAiTGF5b3V0VGVzdHMvZm9vL2Jhci5odG1sIiBhbmQgIkxheW91dFRlc3RzXGZv
b1xiYXIuaHRtbCIgaWYKICAgICAgICAgIyB0aGUgZmlsZXN5c3RlbSB1c2VzICdcXCcgYXMgYSBk
aXJlY3Rvcnkgc2VwYXJhdG9yLgotICAgICAgICBpZiBwYXRoLnN0YXJ0c3dpdGgoc2VsZi5MQVlP
VVRfVEVTVFNfRElSRUNUT1JZICsgc2VsZi5fcG9ydC5URVNUX1BBVEhfU0VQQVJBVE9SKToKLSAg
ICAgICAgICAgIHJldHVybiBwYXRoW2xlbihzZWxmLkxBWU9VVF9URVNUU19ESVJFQ1RPUlkgKyBz
ZWxmLl9wb3J0LlRFU1RfUEFUSF9TRVBBUkFUT1IpOl0KKyAgICAgICAgaWYgcGF0aC5zdGFydHN3
aXRoKHNlbGYuTEFZT1VUX1RFU1RTX0RJUkVDVE9SWSArIHRlc3RfbmFtZS5URVNUX1BBVEhfU0VQ
QVJBVE9SKToKKyAgICAgICAgICAgIHJldHVybiBwYXRoW2xlbihzZWxmLkxBWU9VVF9URVNUU19E
SVJFQ1RPUlkgKyB0ZXN0X25hbWUuVEVTVF9QQVRIX1NFUEFSQVRPUik6XQogICAgICAgICBpZiBw
YXRoLnN0YXJ0c3dpdGgoc2VsZi5MQVlPVVRfVEVTVFNfRElSRUNUT1JZICsgc2VsZi5fZmlsZXN5
c3RlbS5zZXApOgogICAgICAgICAgICAgcmV0dXJuIHBhdGhbbGVuKHNlbGYuTEFZT1VUX1RFU1RT
X0RJUkVDVE9SWSArIHNlbGYuX2ZpbGVzeXN0ZW0uc2VwKTpdCiAgICAgICAgIHJldHVybiBwYXRo
CkBAIC05NCwyMSArOTUsMTkgQEAgY2xhc3MgTGF5b3V0VGVzdEZpbmRlcihvYmplY3QpOgogICAg
ICAgICBlbHNlOgogICAgICAgICAgICAgcmV0dXJuIGxpbmUKIAotICAgIGRlZiBza2lwX3Rlc3Rz
KHNlbGYsIHBhdGhzLCBhbGxfdGVzdHNfbGlzdCwgZXhwZWN0YXRpb25zLCBodHRwX3Rlc3RzKToK
LSAgICAgICAgYWxsX3Rlc3RzID0gc2V0KGFsbF90ZXN0c19saXN0KQotCisgICAgZGVmIHNraXBf
dGVzdHMoc2VsZiwgcGF0aHMsIGFsbF90ZXN0cywgZXhwZWN0YXRpb25zLCBodHRwX3Rlc3RzKToK
ICAgICAgICAgdGVzdHNfdG9fc2tpcCA9IGV4cGVjdGF0aW9ucy5nZXRfdGVzdHNfd2l0aF9yZXN1
bHRfdHlwZSh0ZXN0X2V4cGVjdGF0aW9ucy5TS0lQKQogICAgICAgICBpZiBzZWxmLl9vcHRpb25z
LnNraXBfZmFpbGluZ190ZXN0czoKICAgICAgICAgICAgIHRlc3RzX3RvX3NraXAudXBkYXRlKGV4
cGVjdGF0aW9ucy5nZXRfdGVzdHNfd2l0aF9yZXN1bHRfdHlwZSh0ZXN0X2V4cGVjdGF0aW9ucy5G
QUlMKSkKICAgICAgICAgICAgIHRlc3RzX3RvX3NraXAudXBkYXRlKGV4cGVjdGF0aW9ucy5nZXRf
dGVzdHNfd2l0aF9yZXN1bHRfdHlwZSh0ZXN0X2V4cGVjdGF0aW9ucy5GTEFLWSkpCiAKICAgICAg
ICAgaWYgc2VsZi5fb3B0aW9ucy5za2lwcGVkID09ICdvbmx5JzoKLSAgICAgICAgICAgIHRlc3Rz
X3RvX3NraXAgPSBhbGxfdGVzdHMgLSB0ZXN0c190b19za2lwCisgICAgICAgICAgICB0ZXN0c190
b19za2lwID0gc2V0KGFsbF90ZXN0cyAtIHRlc3RzX3RvX3NraXApCiAgICAgICAgIGVsaWYgc2Vs
Zi5fb3B0aW9ucy5za2lwcGVkID09ICdpZ25vcmUnOgogICAgICAgICAgICAgdGVzdHNfdG9fc2tp
cCA9IHNldCgpCiAgICAgICAgIGVsaWYgc2VsZi5fb3B0aW9ucy5za2lwcGVkICE9ICdhbHdheXMn
OgogICAgICAgICAgICAgIyBtYWtlIHN1cmUgd2UncmUgZXhwbGljaXRseSBydW5uaW5nIGFueSB0
ZXN0cyBwYXNzZWQgb24gdGhlIGNvbW1hbmQgbGluZTsgZXF1aXZhbGVudCB0byAnZGVmYXVsdCcu
Ci0gICAgICAgICAgICB0ZXN0c190b19za2lwIC09IHBhdGhzCisgICAgICAgICAgICB0ZXN0c190
b19za2lwIC09IHNldChwYXRocykKIAogICAgICAgICAjIHVubGVzcyBvZiBjb3Vyc2Ugd2UgZG9u
J3Qgd2FudCB0byBydW4gdGhlIEhUVFAgdGVzdHMgOikKICAgICAgICAgaWYgbm90IHNlbGYuX29w
dGlvbnMuaHR0cDoKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X3J1bm5lci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X3J1bm5lci5weQppbmRl
eCAxN2NiZTMxMjViZDEyOTM3MGRiMTA5M2EyMmYzYzNmMWUwZjJkYTZiLi43ZDEwYzIzODQ4Yzg3
MTdiYzkzMmEyNGUyZjgyYWIwNzM0MGE1YWQwIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVzdF9ydW5uZXIucHkKKysr
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0
X3Rlc3RfcnVubmVyLnB5CkBAIC0zMiw3ICszMiw3IEBAIGltcG9ydCByZQogaW1wb3J0IHRocmVh
ZGluZwogaW1wb3J0IHRpbWUKIAotZnJvbSB3ZWJraXRweS5jb21tb24gaW1wb3J0IG1lc3NhZ2Vf
cG9vbAorZnJvbSB3ZWJraXRweS5jb21tb24gaW1wb3J0IG1lc3NhZ2VfcG9vbCwgdGVzdF9uYW1l
CiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5jb250cm9sbGVycyBpbXBvcnQgc2luZ2xlX3Rl
c3RfcnVubmVyCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMgaW1wb3J0IHRlc3Rf
ZXhwZWN0YXRpb25zCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMgaW1wb3J0IHRl
c3RfZmFpbHVyZXMKQEAgLTY4LDcgKzY4LDcgQEAgY2xhc3MgTGF5b3V0VGVzdFJ1bm5lcihvYmpl
Y3QpOgogICAgICAgICBzZWxmLl9yZXN1bHRzX2RpcmVjdG9yeSA9IHJlc3VsdHNfZGlyZWN0b3J5
CiAgICAgICAgIHNlbGYuX2V4cGVjdGF0aW9ucyA9IE5vbmUKICAgICAgICAgc2VsZi5fdGVzdF9p
c19zbG93ID0gdGVzdF9pc19zbG93X2ZuCi0gICAgICAgIHNlbGYuX3NoYXJkZXIgPSBTaGFyZGVy
KHNlbGYuX3BvcnQuc3BsaXRfdGVzdCwgc2VsZi5fcG9ydC5URVNUX1BBVEhfU0VQQVJBVE9SLCBz
ZWxmLl9vcHRpb25zLm1heF9sb2NrZWRfc2hhcmRzKQorICAgICAgICBzZWxmLl9zaGFyZGVyID0g
U2hhcmRlcihzZWxmLl9vcHRpb25zLm1heF9sb2NrZWRfc2hhcmRzKQogCiAgICAgICAgIHNlbGYu
X2N1cnJlbnRfcmVzdWx0X3N1bW1hcnkgPSBOb25lCiAgICAgICAgIHNlbGYuX25lZWRzX2h0dHAg
PSBOb25lCkBAIC00NzQsOSArNDc0LDcgQEAgY2xhc3MgVGVzdFNoYXJkKG9iamVjdCk6CiAKIAog
Y2xhc3MgU2hhcmRlcihvYmplY3QpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0X3NwbGl0
X2ZuLCB0ZXN0X3BhdGhfc2VwYXJhdG9yLCBtYXhfbG9ja2VkX3NoYXJkcyk6Ci0gICAgICAgIHNl
bGYuX3NwbGl0ID0gdGVzdF9zcGxpdF9mbgotICAgICAgICBzZWxmLl9zZXAgPSB0ZXN0X3BhdGhf
c2VwYXJhdG9yCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1heF9sb2NrZWRfc2hhcmRzKToKICAg
ICAgICAgc2VsZi5fbWF4X2xvY2tlZF9zaGFyZHMgPSBtYXhfbG9ja2VkX3NoYXJkcwogCiAgICAg
ZGVmIHNoYXJkX3Rlc3RzKHNlbGYsIHRlc3RfaW5wdXRzLCBudW1fd29ya2VycywgZnVsbHlfcGFy
YWxsZWwpOgpAQCAtNTQ3LDcgKzU0NSw3IEBAIGNsYXNzIFNoYXJkZXIob2JqZWN0KToKICAgICAg
ICAgIyBGSVhNRTogR2l2ZW4gdGhhdCB0aGUgdGVzdHMgYXJlIGFscmVhZHkgc29ydGVkIGJ5IGRp
cmVjdG9yeSwKICAgICAgICAgIyB3ZSBjYW4gcHJvYmFibHkgcmV3cml0ZSB0aGlzIHRvIGJlIGNs
ZWFyZXIgYW5kIGZhc3Rlci4KICAgICAgICAgZm9yIHRlc3RfaW5wdXQgaW4gdGVzdF9pbnB1dHM6
Ci0gICAgICAgICAgICBkaXJlY3RvcnkgPSBzZWxmLl9zcGxpdCh0ZXN0X2lucHV0LnRlc3RfbmFt
ZSlbMF0KKyAgICAgICAgICAgIGRpcmVjdG9yeSA9IHRlc3RfbmFtZS5zcGxpdF90ZXN0X25hbWUo
dGVzdF9pbnB1dC50ZXN0X25hbWUpWzBdCiAgICAgICAgICAgICB0ZXN0c19ieV9kaXIuc2V0ZGVm
YXVsdChkaXJlY3RvcnksIFtdKQogICAgICAgICAgICAgdGVzdHNfYnlfZGlyW2RpcmVjdG9yeV0u
YXBwZW5kKHRlc3RfaW5wdXQpCiAKQEAgLTYwMywyOSArNjAxLDMgQEAgY2xhc3MgU2hhcmRlcihv
YmplY3QpOgogICAgICAgICAgICAgc29tZV9zaGFyZHMsIHJlbWFpbmluZ19zaGFyZHMgPSBzcGxp
dF9hdChyZW1haW5pbmdfc2hhcmRzLCBudW1fb2xkX3Blcl9uZXcpCiAgICAgICAgICAgICBuZXdf
c2hhcmRzLmFwcGVuZChUZXN0U2hhcmQoJyVzXyVkJyAlIChzaGFyZF9uYW1lX3ByZWZpeCwgbGVu
KG5ld19zaGFyZHMpICsgMSksIGV4dHJhY3RfYW5kX2ZsYXR0ZW4oc29tZV9zaGFyZHMpKSkKICAg
ICAgICAgcmV0dXJuIG5ld19zaGFyZHMKLQotICAgIGRlZiB0ZXN0X2tleShzZWxmLCB0ZXN0X25h
bWUpOgotICAgICAgICAiIiJUdXJucyBhIHRlc3QgbmFtZSBpbnRvIGEgbGlzdCB3aXRoIHR3byBz
dWJsaXN0cywgdGhlIG5hdHVyYWwga2V5IG9mIHRoZQotICAgICAgICBkaXJuYW1lLCBhbmQgdGhl
IG5hdHVyYWwga2V5IG9mIHRoZSBiYXNlbmFtZS4KLQotICAgICAgICBUaGlzIGNhbiBiZSB1c2Vk
IHdoZW4gc29ydGluZyBwYXRocyBzbyB0aGF0IGZpbGVzIGluIGEgZGlyZWN0b3J5LgotICAgICAg
ICBkaXJlY3RvcnkgYXJlIGtlcHQgdG9nZXRoZXIgcmF0aGVyIHRoYW4gYmVpbmcgbWl4ZWQgaW4g
d2l0aCBmaWxlcyBpbgotICAgICAgICBzdWJkaXJlY3Rvcmllcy4iIiIKLSAgICAgICAgZGlybmFt
ZSwgYmFzZW5hbWUgPSBzZWxmLl9zcGxpdCh0ZXN0X25hbWUpCi0gICAgICAgIHJldHVybiAoc2Vs
Zi5uYXR1cmFsX3NvcnRfa2V5KGRpcm5hbWUgKyBzZWxmLl9zZXApLCBzZWxmLm5hdHVyYWxfc29y
dF9rZXkoYmFzZW5hbWUpKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBuYXR1cmFsX3Nv
cnRfa2V5KHN0cmluZ190b19zcGxpdCk6Ci0gICAgICAgICIiIiBUdXJucyBhIHN0cmluZyBpbnRv
IGEgbGlzdCBvZiBzdHJpbmcgYW5kIG51bWJlciBjaHVua3MsIGkuZS4gInoyM2EiIC0+IFsieiIs
IDIzLCAiYSJdCi0KLSAgICAgICAgVGhpcyBjYW4gYmUgdXNlZCB0byBpbXBsZW1lbnQgIm5hdHVy
YWwgc29ydCIgb3JkZXIuIFNlZToKLSAgICAgICAgaHR0cDovL3d3dy5jb2Rpbmdob3Jyb3IuY29t
L2Jsb2cvMjAwNy8xMi9zb3J0aW5nLWZvci1odW1hbnMtbmF0dXJhbC1zb3J0LW9yZGVyLmh0bWwK
LSAgICAgICAgaHR0cDovL25lZGJhdGNoZWxkZXIuY29tL2Jsb2cvMjAwNzEyLmh0bWwjZTIwMDcx
MjExVDA1NDk1NgotICAgICAgICAiIiIKLSAgICAgICAgZGVmIHRyeWludCh2YWwpOgotICAgICAg
ICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJldHVybiBpbnQodmFsKQotICAgICAgICAgICAg
ZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZhbAotCi0gICAgICAg
IHJldHVybiBbdHJ5aW50KGNodW5rKSBmb3IgY2h1bmsgaW4gcmUuc3BsaXQoJyhcZCspJywgc3Ry
aW5nX3RvX3NwbGl0KV0KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X3J1bm5lcl91bml0dGVzdC5weSBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X3J1
bm5lcl91bml0dGVzdC5weQppbmRleCA0ZWZhNGUwMGM4NDk5N2FmZTk1OTg0Zjg4ZjVjMTg4MzYz
OTMzYzcyLi4zNTBhNzEyMTcwYjEyMjIzMjBmZTIyNTM2OTgyMDU0NDAxOTY3ODJjIDEwMDY0NAot
LS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9sYXlv
dXRfdGVzdF9ydW5uZXJfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVubmVyX3VuaXR0ZXN0LnB5CkBA
IC0yMzUsMTIgKzIzNSw3IEBAIGNsYXNzIFNoYXJkZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6
CiAgICAgICAgIHJldHVybiBUZXN0SW5wdXQodGVzdF9maWxlLCByZXF1aXJlc19sb2NrPSh0ZXN0
X2ZpbGUuc3RhcnRzd2l0aCgnaHR0cCcpIG9yIHRlc3RfZmlsZS5zdGFydHN3aXRoKCdwZXJmJykp
KQogCiAgICAgZGVmIGdldF9zaGFyZHMoc2VsZiwgbnVtX3dvcmtlcnMsIGZ1bGx5X3BhcmFsbGVs
LCB0ZXN0X2xpc3Q9Tm9uZSwgbWF4X2xvY2tlZF9zaGFyZHM9MSk6Ci0gICAgICAgIGRlZiBzcGxp
dCh0ZXN0X25hbWUpOgotICAgICAgICAgICAgaWR4ID0gdGVzdF9uYW1lLnJmaW5kKCcvJykKLSAg
ICAgICAgICAgIGlmIGlkeCAhPSAtMToKLSAgICAgICAgICAgICAgICByZXR1cm4gKHRlc3RfbmFt
ZVswOmlkeF0sIHRlc3RfbmFtZVtpZHggKyAxOl0pCi0KLSAgICAgICAgc2VsZi5zaGFyZGVyID0g
U2hhcmRlcihzcGxpdCwgJy8nLCBtYXhfbG9ja2VkX3NoYXJkcykKKyAgICAgICAgc2VsZi5zaGFy
ZGVyID0gU2hhcmRlcihtYXhfbG9ja2VkX3NoYXJkcykKICAgICAgICAgdGVzdF9saXN0ID0gdGVz
dF9saXN0IG9yIHNlbGYudGVzdF9saXN0CiAgICAgICAgIHJldHVybiBzZWxmLnNoYXJkZXIuc2hh
cmRfdGVzdHMoW3NlbGYuZ2V0X3Rlc3RfaW5wdXQodGVzdCkgZm9yIHRlc3QgaW4gdGVzdF9saXN0
XSwgbnVtX3dvcmtlcnMsIGZ1bGx5X3BhcmFsbGVsKQogCkBAIC0zMzUsNDggKzMzMCwzIEBAIGNs
YXNzIFNoYXJkZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICAgICAgICAnaHR0
cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvd2Vic29ja2V0LXByb3RvY29sLWlnbm9yZWQuaHRtbCcs
CiAgICAgICAgICAgICAgICAnaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9zdXBwb3J0ZWQteG1s
LWNvbnRlbnQtdHlwZXMuaHRtbCcsCiAgICAgICAgICAgICAgICAncGVyZi9vYmplY3Qta2V5cy5o
dG1sJ10pXSkKLQotCi1jbGFzcyBOYXR1cmFsQ29tcGFyZVRlc3QodW5pdHRlc3QuVGVzdENhc2Up
OgotICAgIGRlZiBhc3NlcnRfY21wKHNlbGYsIHgsIHksIHJlc3VsdCk6Ci0gICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWxzKGNtcChTaGFyZGVyLm5hdHVyYWxfc29ydF9rZXkoeCksIFNoYXJkZXIubmF0
dXJhbF9zb3J0X2tleSh5KSksIHJlc3VsdCkKLQotICAgIGRlZiB0ZXN0X25hdHVyYWxfY29tcGFy
ZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfY21wKCdhJywgJ2EnLCAwKQotICAgICAgICBz
ZWxmLmFzc2VydF9jbXAoJ2FiJywgJ2EnLCAxKQotICAgICAgICBzZWxmLmFzc2VydF9jbXAoJ2En
LCAnYWInLCAtMSkKLSAgICAgICAgc2VsZi5hc3NlcnRfY21wKCcnLCAnJywgMCkKLSAgICAgICAg
c2VsZi5hc3NlcnRfY21wKCcnLCAnYWInLCAtMSkKLSAgICAgICAgc2VsZi5hc3NlcnRfY21wKCcx
JywgJzInLCAtMSkKLSAgICAgICAgc2VsZi5hc3NlcnRfY21wKCcyJywgJzEnLCAxKQotICAgICAg
ICBzZWxmLmFzc2VydF9jbXAoJzEnLCAnMTAnLCAtMSkKLSAgICAgICAgc2VsZi5hc3NlcnRfY21w
KCcyJywgJzEwJywgLTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2NtcCgnZm9vXzEuaHRtbCcsICdm
b29fMi5odG1sJywgLTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2NtcCgnZm9vXzEuMS5odG1sJywg
J2Zvb18yLmh0bWwnLCAtMSkKLSAgICAgICAgc2VsZi5hc3NlcnRfY21wKCdmb29fMS5odG1sJywg
J2Zvb18xMC5odG1sJywgLTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2NtcCgnZm9vXzIuaHRtbCcs
ICdmb29fMTAuaHRtbCcsIC0xKQotICAgICAgICBzZWxmLmFzc2VydF9jbXAoJ2Zvb18yMy5odG1s
JywgJ2Zvb18xMC5odG1sJywgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRfY21wKCdmb29fMjMuaHRt
bCcsICdmb29fMTAwLmh0bWwnLCAtMSkKLQotCi1jbGFzcyBLZXlDb21wYXJlVGVzdCh1bml0dGVz
dC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBkZWYgc3BsaXQodGVz
dF9uYW1lKToKLSAgICAgICAgICAgIGlkeCA9IHRlc3RfbmFtZS5yZmluZCgnLycpCi0gICAgICAg
ICAgICBpZiBpZHggIT0gLTE6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICh0ZXN0X25hbWVbMDpp
ZHhdLCB0ZXN0X25hbWVbaWR4ICsgMTpdKQotCi0gICAgICAgIHNlbGYuc2hhcmRlciA9IFNoYXJk
ZXIoc3BsaXQsICcvJywgMSkKLQotICAgIGRlZiBhc3NlcnRfY21wKHNlbGYsIHgsIHksIHJlc3Vs
dCk6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNtcChzZWxmLnNoYXJkZXIudGVzdF9rZXko
eCksIHNlbGYuc2hhcmRlci50ZXN0X2tleSh5KSksIHJlc3VsdCkKLQotICAgIGRlZiB0ZXN0X3Rl
c3Rfa2V5KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF9jbXAoJy9hJywgJy9hJywgMCkKLSAg
ICAgICAgc2VsZi5hc3NlcnRfY21wKCcvYScsICcvYicsIC0xKQotICAgICAgICBzZWxmLmFzc2Vy
dF9jbXAoJy9hMicsICcvYTEwJywgLTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2NtcCgnL2EyL2Zv
bycsICcvYTEwL2ZvbycsIC0xKQotICAgICAgICBzZWxmLmFzc2VydF9jbXAoJy9hL2ZvbzExJywg
Jy9hL2ZvbzInLCAxKQotICAgICAgICBzZWxmLmFzc2VydF9jbXAoJy9hYicsICcvYS9hL2InLCAt
MSkKLSAgICAgICAgc2VsZi5hc3NlcnRfY21wKCcvYS9hL2InLCAnL2FiJywgMSkKLSAgICAgICAg
c2VsZi5hc3NlcnRfY21wKCcvZm9vLWJhci9iYXonLCAnL2Zvby9iYXonLCAtMSkKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFn
ZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9t
YW5hZ2VyLnB5CmluZGV4IGNjMmYwZjliOWEwZjhmZWIyMTdhYjM2MjYzMTg1NjYwYWQzMmMxZGUu
LmFjMDQwZmM1OGNjMTA1NzIyMDA2NDU2NDc3NzY5MTQ1ZTU0NWRjMzIgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXIucHkK
KysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFu
YWdlci5weQpAQCAtNDQsOSArNDQsOSBAQCBpbXBvcnQgcmUKIGltcG9ydCBzeXMKIGltcG9ydCB0
aW1lCiAKLWZyb20gd2Via2l0cHkuY29tbW9uIGltcG9ydCBtZXNzYWdlX3Bvb2wKK2Zyb20gd2Vi
a2l0cHkuY29tbW9uIGltcG9ydCBtZXNzYWdlX3Bvb2wsIG5hdHVyYWxfb3JkZXIsIHRlc3RfbmFt
ZQogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMuY29udHJvbGxlcnMubGF5b3V0X3Rlc3RfZmlu
ZGVyIGltcG9ydCBMYXlvdXRUZXN0RmluZGVyCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5j
b250cm9sbGVycy5sYXlvdXRfdGVzdF9ydW5uZXIgaW1wb3J0IExheW91dFRlc3RSdW5uZXIsIFRl
c3RSdW5JbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgV29ya2VyRXhjZXB0aW9uCitmcm9tIHdlYmtpdHB5
LmxheW91dF90ZXN0cy5jb250cm9sbGVycy5sYXlvdXRfdGVzdF9ydW5uZXIgaW1wb3J0IExheW91
dFRlc3RSdW5uZXIsIFNoYXJkZXIsIFRlc3RSdW5JbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgV29ya2Vy
RXhjZXB0aW9uCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5jb250cm9sbGVycy50ZXN0X3Jl
c3VsdF93cml0ZXIgaW1wb3J0IFRlc3RSZXN1bHRXcml0ZXIKIGZyb20gd2Via2l0cHkubGF5b3V0
X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCBqc29uX2xheW91dF9yZXN1bHRzX2dlbmVyYXRv
cgogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IGpzb25f
cmVzdWx0c19nZW5lcmF0b3IKQEAgLTI3Miw5ICsyNzIsOSBAQCBjbGFzcyBNYW5hZ2VyKG9iamVj
dCk6CiAgICAgICAgIHNlbGYuX3ByaW50ZXIgPSBwcmludGVyCiAgICAgICAgIHNlbGYuX2V4cGVj
dGF0aW9ucyA9IE5vbmUKIAotICAgICAgICBzZWxmLkhUVFBfU1VCRElSID0gJ2h0dHAnICsgcG9y
dC5URVNUX1BBVEhfU0VQQVJBVE9SCisgICAgICAgIHNlbGYuSFRUUF9TVUJESVIgPSAnaHR0cCcg
KyB0ZXN0X25hbWUuVEVTVF9QQVRIX1NFUEFSQVRPUgogICAgICAgICBzZWxmLlBFUkZfU1VCRElS
ID0gJ3BlcmYnCi0gICAgICAgIHNlbGYuV0VCU09DS0VUX1NVQkRJUiA9ICd3ZWJzb2NrZXQnICsg
cG9ydC5URVNUX1BBVEhfU0VQQVJBVE9SCisgICAgICAgIHNlbGYuV0VCU09DS0VUX1NVQkRJUiA9
ICd3ZWJzb2NrZXQnICsgdGVzdF9uYW1lLlRFU1RfUEFUSF9TRVBBUkFUT1IKICAgICAgICAgc2Vs
Zi5MQVlPVVRfVEVTVFNfRElSRUNUT1JZID0gJ0xheW91dFRlc3RzJwogCiAgICAgICAgICMgZGlz
YWJsZSB3c3Mgc2VydmVyLiBuZWVkIHRvIGluc3RhbGwgcHlPcGVuU1NMIG9uIGJ1aWxkYm90cy4K
QEAgLTI4OSw3ICsyODksNyBAQCBjbGFzcyBNYW5hZ2VyKG9iamVjdCk6CiAgICAgICAgIHNlbGYu
X3J1bm5lciA9IExheW91dFRlc3RSdW5uZXIoc2VsZi5fb3B0aW9ucywgc2VsZi5fcG9ydCwgc2Vs
Zi5fcHJpbnRlciwgc2VsZi5fcmVzdWx0c19kaXJlY3RvcnksIHNlbGYuX2V4cGVjdGF0aW9ucywg
c2VsZi5fdGVzdF9pc19zbG93KQogCiAgICAgZGVmIF9jb2xsZWN0X3Rlc3RzKHNlbGYsIGFyZ3Mp
OgotICAgICAgICByZXR1cm4gc2VsZi5fZmluZGVyLmZpbmRfdGVzdHMoc2VsZi5fb3B0aW9ucywg
YXJncykKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRlci5maW5kX3Rlc3RzKGFyZ3MpCiAKICAg
ICBkZWYgX2lzX2h0dHBfdGVzdChzZWxmLCB0ZXN0KToKICAgICAgICAgcmV0dXJuIHNlbGYuSFRU
UF9TVUJESVIgaW4gdGVzdCBvciBzZWxmLl9pc193ZWJzb2NrZXRfdGVzdCh0ZXN0KQpAQCAtMzAx
LDE4ICszMDEsMTggQEAgY2xhc3MgTWFuYWdlcihvYmplY3QpOgogICAgICAgICByZXR1cm4gc2V0
KHRlc3QgZm9yIHRlc3QgaW4gc2VsZi5fdGVzdF9uYW1lcyBpZiBzZWxmLl9pc19odHRwX3Rlc3Qo
dGVzdCkpCiAKICAgICBkZWYgX2lzX3BlcmZfdGVzdChzZWxmLCB0ZXN0KToKLSAgICAgICAgcmV0
dXJuIHNlbGYuUEVSRl9TVUJESVIgPT0gdGVzdCBvciAoc2VsZi5QRVJGX1NVQkRJUiArIHNlbGYu
X3BvcnQuVEVTVF9QQVRIX1NFUEFSQVRPUikgaW4gdGVzdAorICAgICAgICByZXR1cm4gc2VsZi5Q
RVJGX1NVQkRJUiA9PSB0ZXN0IG9yIChzZWxmLlBFUkZfU1VCRElSICsgdGVzdF9uYW1lLlRFU1Rf
UEFUSF9TRVBBUkFUT1IpIGluIHRlc3QKIAogICAgIGRlZiBfcHJlcGFyZV9saXN0cyhzZWxmKToK
ICAgICAgICAgdGVzdHNfdG9fc2tpcCA9IHNlbGYuX2ZpbmRlci5za2lwX3Rlc3RzKHNlbGYuX3Bh
dGhzLCBzZWxmLl90ZXN0X25hbWVzLCBzZWxmLl9leHBlY3RhdGlvbnMsIHNlbGYuX2h0dHBfdGVz
dHMoKSkKLSAgICAgICAgc2VsZi5fdGVzdF9uYW1lcyA9IGxpc3Qoc2V0KHNlbGYuX3Rlc3RfbmFt
ZXMpIC0gdGVzdHNfdG9fc2tpcCkKKyAgICAgICAgc2VsZi5fdGVzdF9uYW1lcyA9IGxpc3Qoc2Vs
Zi5fdGVzdF9uYW1lcyAtIHRlc3RzX3RvX3NraXApCiAKICAgICAgICAgIyBDcmVhdGUgYSBzb3J0
ZWQgbGlzdCBvZiB0ZXN0IGZpbGVzIHNvIHRoZSBzdWJzZXQgY2h1bmssCiAgICAgICAgICMgaWYg
dXNlZCwgY29udGFpbnMgYWxwaGFiZXRpY2FsbHkgY29uc2VjdXRpdmUgdGVzdHMuCi0gICAgICAg
IGlmIHNlbGYuX29wdGlvbnMucmFuZG9taXplX29yZGVyOgorICAgICAgICBpZiBzZWxmLl9vcHRp
b25zLm9yZGVyID09ICduYXR1cmFsJzoKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RfbmFtZXMuc29y
dChrZXk9bmF0dXJhbF9vcmRlci50ZXN0X2tleSkKKyAgICAgICAgZWxpZiBzZWxmLl9vcHRpb25z
Lm9yZGVyID09ICdyYW5kb20nOgogICAgICAgICAgICAgcmFuZG9tLnNodWZmbGUoc2VsZi5fdGVz
dF9uYW1lcykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuX3Rlc3RfbmFtZXMuc29y
dChrZXk9c2VsZi5fcnVubmVyLnRlc3Rfa2V5KQogCiAgICAgICAgIHNlbGYuX3Rlc3RfbmFtZXMs
IHRlc3RzX2luX290aGVyX2NodW5rcyA9IHNlbGYuX2ZpbmRlci5zcGxpdF9pbnRvX2NodW5rcyhz
ZWxmLl90ZXN0X25hbWVzKQogICAgICAgICBzZWxmLl9leHBlY3RhdGlvbnMuYWRkX3NraXBwZWRf
dGVzdHModGVzdHNfaW5fb3RoZXJfY2h1bmtzKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlcl91bml0dGVzdC5weSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXJfdW5p
dHRlc3QucHkKaW5kZXggZTk0ZDEzMzJiZTQyMzU2YTRmZjJjNjljZTNmNDg4NDRiYTI5OGI0My4u
ZWNhYmQwMjgxYjQwOTEyMWI4ODg4YWY4ODhmZjhhNWEzMjI3N2QwMyAxMDA2NDQKLS0tIGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlcl91bml0
dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9s
bGVycy9tYW5hZ2VyX3VuaXR0ZXN0LnB5CkBAIC00OCw3ICs0OCw2IEBAIGNsYXNzIE1hbmFnZXJU
ZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9uZWVkc19zZXJ2ZXJzKHNlbGYp
OgogICAgICAgICBkZWYgZ2V0X21hbmFnZXJfd2l0aF90ZXN0cyh0ZXN0X25hbWVzKToKICAgICAg
ICAgICAgIHBvcnQgPSBNb2NrKCkgICMgRklYTUU6IFVzZSBhIHRpZ2h0ZXIgbW9jay4KLSAgICAg
ICAgICAgIHBvcnQuVEVTVF9QQVRIX1NFUEFSQVRPUiA9ICcvJwogICAgICAgICAgICAgbWFuYWdl
ciA9IE1hbmFnZXIocG9ydCwgb3B0aW9ucz1Nb2NrT3B0aW9ucyhodHRwPVRydWUsIG1heF9sb2Nr
ZWRfc2hhcmRzPTEpLCBwcmludGVyPU1vY2soKSkKICAgICAgICAgICAgIG1hbmFnZXIuX3Rlc3Rf
bmFtZXMgPSB0ZXN0X25hbWVzCiAgICAgICAgICAgICByZXR1cm4gbWFuYWdlcgpkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5IGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CmluZGV4IDA4NGFl
MTkxMGIxN2VhZTFlMDVjOTk5OTY5MzZlNDQxMTlhM2RhYmYuLjcyYzM4NjBiODQwZjQ3M2JiOTMz
ZDBjYzg4NzZhMzE1OWM2YzBmODggMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2Jhc2UucHkKQEAgLTY0LDYgKzY0LDcgQEAgZnJvbSB3ZWJraXRweS5s
YXlvdXRfdGVzdHMucG9ydC5mYWN0b3J5IGltcG9ydCBQb3J0RmFjdG9yeQogZnJvbSB3ZWJraXRw
eS5sYXlvdXRfdGVzdHMuc2VydmVycyBpbXBvcnQgYXBhY2hlX2h0dHBfc2VydmVyCiBmcm9tIHdl
YmtpdHB5LmxheW91dF90ZXN0cy5zZXJ2ZXJzIGltcG9ydCBodHRwX3NlcnZlcgogZnJvbSB3ZWJr
aXRweS5sYXlvdXRfdGVzdHMuc2VydmVycyBpbXBvcnQgd2Vic29ja2V0X3NlcnZlcgorZnJvbSB3
ZWJraXRweS50aGlyZHBhcnR5Lm9yZGVyZWRfc2V0IGltcG9ydCBPcmRlcmVkU2V0CiAKIF9sb2cg
PSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKIApAQCAtNzksOSArODAsNiBAQCBjbGFzcyBQ
b3J0KG9iamVjdCk6CiAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIHByb2JhYmx5IHJlbmFtZSB0aGlz
IHRvIHNvbWV0aGluZyBsaWtlICdpbXBsZW1lbnRhdGlvbl9uYW1lJy4KICAgICBwb3J0X25hbWUg
PSBOb25lCiAKLSAgICAjIFRlc3QgbmFtZXMgcmVzZW1ibGUgdW5peCByZWxhdGl2ZSBwYXRocywg
YW5kIHVzZSAnLycgYXMgYSBkaXJlY3Rvcnkgc2VwYXJhdG9yLgotICAgIFRFU1RfUEFUSF9TRVBB
UkFUT1IgPSAnLycKLQogICAgIEFMTF9CVUlMRF9UWVBFUyA9ICgnZGVidWcnLCAncmVsZWFzZScp
CiAKICAgICBAY2xhc3NtZXRob2QKQEAgLTU3Niw3ICs1NzQsNyBAQCBjbGFzcyBQb3J0KG9iamVj
dCk6CiAgICAgZGVmIHRlc3RzKHNlbGYsIHBhdGhzKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSBs
aXN0IG9mIHRlc3RzIGZvdW5kLiBCb3RoIGdlbmVyaWMgYW5kIHBsYXRmb3JtLXNwZWNpZmljIHRl
c3RzIG1hdGNoaW5nIHBhdGhzIHNob3VsZCBiZSByZXR1cm5lZC4iIiIKICAgICAgICAgZXhwYW5k
ZWRfcGF0aHMgPSBzZWxmLl9leHBhbmRlZF9wYXRocyhwYXRocykKLSAgICAgICAgcmV0dXJuIHNl
bGYuX3JlYWxfdGVzdHMoZXhwYW5kZWRfcGF0aHMpLnVuaW9uKHNlbGYuX3ZpcnR1YWxfdGVzdHMo
ZXhwYW5kZWRfcGF0aHMsIHNlbGYucG9wdWxhdGVkX3ZpcnR1YWxfdGVzdF9zdWl0ZXMoKSkpCisg
ICAgICAgIHJldHVybiBzZWxmLl9yZWFsX3Rlc3RzKGV4cGFuZGVkX3BhdGhzKSB8IHNlbGYuX3Zp
cnR1YWxfdGVzdHMoZXhwYW5kZWRfcGF0aHMsIHNlbGYucG9wdWxhdGVkX3ZpcnR1YWxfdGVzdF9z
dWl0ZXMoKSkKIAogICAgIGRlZiBfZXhwYW5kZWRfcGF0aHMoc2VsZiwgcGF0aHMpOgogICAgICAg
ICBleHBhbmRlZF9wYXRocyA9IFtdCkBAIC01OTUsNyArNTkzLDcgQEAgY2xhc3MgUG9ydChvYmpl
Y3QpOgogICAgICAgICAjIFdoZW4gY29sbGVjdGluZyB0ZXN0IGNhc2VzLCBza2lwIHRoZXNlIGRp
cmVjdG9yaWVzCiAgICAgICAgIHNraXBwZWRfZGlyZWN0b3JpZXMgPSBzZXQoWycuc3ZuJywgJ19z
dm4nLCAncmVzb3VyY2VzJywgJ3NjcmlwdC10ZXN0cycsICdyZWZlcmVuY2UnLCAncmVmdGVzdCdd
KQogICAgICAgICBmaWxlcyA9IGZpbmRfZmlsZXMuZmluZChzZWxmLl9maWxlc3lzdGVtLCBzZWxm
LmxheW91dF90ZXN0c19kaXIoKSwgcGF0aHMsIHNraXBwZWRfZGlyZWN0b3JpZXMsIFBvcnQuX2lz
X3Rlc3RfZmlsZSkKLSAgICAgICAgcmV0dXJuIHNldChbc2VsZi5yZWxhdGl2ZV90ZXN0X2ZpbGVu
YW1lKGYpIGZvciBmIGluIGZpbGVzXSkKKyAgICAgICAgcmV0dXJuIE9yZGVyZWRTZXQoW3NlbGYu
cmVsYXRpdmVfdGVzdF9maWxlbmFtZShmKSBmb3IgZiBpbiBmaWxlc10pCiAKICAgICAjIFdoZW4g
Y29sbGVjdGluZyB0ZXN0IGNhc2VzLCB3ZSBpbmNsdWRlIGFueSBmaWxlIHdpdGggdGhlc2UgZXh0
ZW5zaW9ucy4KICAgICBfc3VwcG9ydGVkX2ZpbGVfZXh0ZW5zaW9ucyA9IHNldChbJy5odG1sJywg
Jy5zaHRtbCcsICcueG1sJywgJy54aHRtbCcsICcucGwnLApAQCAtNjUyLDEzICs2NTAsNiBAQCBj
bGFzcyBQb3J0KG9iamVjdCk6CiAgICAgICAgICMgdmFsaWQgdGVzdCBhbmQgYnkgcHJpbnRpbmcu
cHkgdG8gZGV0ZXJtaW5lIGlmIGJhc2VsaW5lcyBleGlzdC4KICAgICAgICAgcmV0dXJuIHNlbGYu
dGVzdF9pc2ZpbGUodGVzdF9uYW1lKSBvciBzZWxmLnRlc3RfaXNkaXIodGVzdF9uYW1lKQogCi0g
ICAgZGVmIHNwbGl0X3Rlc3Qoc2VsZiwgdGVzdF9uYW1lKToKLSAgICAgICAgIiIiU3BsaXRzIGEg
dGVzdCBuYW1lIGludG8gdGhlICdkaXJlY3RvcnknIHBhcnQgYW5kIHRoZSAnYmFzZW5hbWUnIHBh
cnQuIiIiCi0gICAgICAgIGluZGV4ID0gdGVzdF9uYW1lLnJmaW5kKHNlbGYuVEVTVF9QQVRIX1NF
UEFSQVRPUikKLSAgICAgICAgaWYgaW5kZXggPCAxOgotICAgICAgICAgICAgcmV0dXJuICgnJywg
dGVzdF9uYW1lKQotICAgICAgICByZXR1cm4gKHRlc3RfbmFtZVswOmluZGV4XSwgdGVzdF9uYW1l
W2luZGV4Ol0pCi0KICAgICBkZWYgbm9ybWFsaXplX3Rlc3RfbmFtZShzZWxmLCB0ZXN0X25hbWUp
OgogICAgICAgICAiIiJSZXR1cm5zIGEgbm9ybWFsaXplZCB2ZXJzaW9uIG9mIHRoZSB0ZXN0IG5h
bWUgb3IgdGVzdCBkaXJlY3RvcnkuIiIiCiAgICAgICAgIGlmIHRlc3RfbmFtZS5lbmRzd2l0aCgn
LycpOgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9y
dC9tb2NrX2RydC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
bW9ja19kcnQucHkKaW5kZXggYTIxMDZmZGQ5NTlhYWM4YTdhNmNmNzBjZDUxMjRkN2QzODkyMDYz
NC4uNjVlZDhmZGJiNTJkOTc0NDI1ZjY1NWFmZWRhMzVjZTU5NmFkNDllNiAxMDA2NDQKLS0tIGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tb2NrX2RydC5weQorKysg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21vY2tfZHJ0LnB5CkBA
IC00OSw2ICs0OSw3IEBAIHNjcmlwdF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJu
YW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MuCiBpZiBzY3JpcHRfZGlyIG5v
dCBpbiBzeXMucGF0aDoKICAgICBzeXMucGF0aC5hcHBlbmQoc2NyaXB0X2RpcikKIAorZnJvbSB3
ZWJraXRweS5jb21tb24gaW1wb3J0IHRlc3RfbmFtZQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lz
dGVtLnN5c3RlbWhvc3QgaW1wb3J0IFN5c3RlbUhvc3QKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rl
c3RzLnBvcnQuZHJpdmVyIGltcG9ydCBEcml2ZXJJbnB1dCwgRHJpdmVyT3V0cHV0LCBEcml2ZXJQ
cm94eQogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC5mYWN0b3J5IGltcG9ydCBQb3J0
RmFjdG9yeQpAQCAtMTg0LDcgKzE4NSw3IEBAIGNsYXNzIE1vY2tEUlQob2JqZWN0KToKICAgICAg
ICAgICAgIGlmIG5vdCBsaW5lOgogICAgICAgICAgICAgICAgIHJldHVybiAwCiAgICAgICAgICAg
ICBkcml2ZXJfaW5wdXQgPSBzZWxmLmlucHV0X2Zyb21fbGluZShsaW5lKQotICAgICAgICAgICAg
ZGlybmFtZSwgYmFzZW5hbWUgPSBzZWxmLl9wb3J0LnNwbGl0X3Rlc3QoZHJpdmVyX2lucHV0LnRl
c3RfbmFtZSkKKyAgICAgICAgICAgIGRpcm5hbWUsIGJhc2VuYW1lID0gdGVzdF9uYW1lLnNwbGl0
X3Rlc3RfbmFtZShkcml2ZXJfaW5wdXQudGVzdF9uYW1lKQogICAgICAgICAgICAgaXNfcmVmdGVz
dCA9IChzZWxmLl9wb3J0LnJlZmVyZW5jZV9maWxlcyhkcml2ZXJfaW5wdXQudGVzdF9uYW1lKSBv
cgogICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LmlzX3JlZmVyZW5jZV9odG1s
X2ZpbGUoc2VsZi5fcG9ydC5fZmlsZXN5c3RlbSwgZGlybmFtZSwgYmFzZW5hbWUpKQogICAgICAg
ICAgICAgb3V0cHV0ID0gc2VsZi5vdXRwdXRfZm9yX3Rlc3QoZHJpdmVyX2lucHV0LCBpc19yZWZ0
ZXN0KQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVu
X3dlYmtpdF90ZXN0cy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1
bl93ZWJraXRfdGVzdHMucHkKaW5kZXggMmRmNTdjZjZmMjdiYWQ1OGY1NDJkM2E0ZWU2ZmY5NmY4
NGFlMjNjMi4uYzUwNWNkMzk5Y2E3NzViZmVlMzhhNmUwNzY2YTE4NWM3YTkxMmRlZSAxMDA3NTUK
LS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0
cy5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0
X3Rlc3RzLnB5CkBAIC0zNTMsOSArMzUzLDExIEBAIGRlZiBwYXJzZV9hcmdzKGFyZ3M9Tm9uZSk6
CiAgICAgICAgICAgICBoZWxwPSJSdW4gYWxsIHRlc3RzLCBldmVuIHRob3NlIG1hcmtlZCBTS0lQ
IGluIHRoZSB0ZXN0IGxpc3QgKHNhbWUgYXMgLS1za2lwcGVkPWlnbm9yZSkiKSwKICAgICAgICAg
b3B0cGFyc2UubWFrZV9vcHRpb24oIi0tdGltZS1vdXQtbXMiLAogICAgICAgICAgICAgaGVscD0i
U2V0IHRoZSB0aW1lb3V0IGZvciBlYWNoIHRlc3QiKSwKLSAgICAgICAgb3B0cGFyc2UubWFrZV9v
cHRpb24oIi0tcmFuZG9taXplLW9yZGVyIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKLSAgICAgICAg
ICAgIGRlZmF1bHQ9RmFsc2UsIGhlbHA9KCJSdW4gdGVzdHMgaW4gcmFuZG9tIG9yZGVyICh1c2Vm
dWwgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9yIHRyYWNraW5nIGRvd24g
Y29ycnVwdGlvbikiKSksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLW9yZGVyIiwg
YWN0aW9uPSJzdG9yZSIsIGRlZmF1bHQ9Im5hdHVyYWwiLAorICAgICAgICAgICAgaGVscD0oImRl
dGVybWluZSB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlIHRlc3QgY2FzZXMgd2lsbCBiZSBydW4uICIK
KyAgICAgICAgICAgICAgICAgICInbm9uZScgPT0gdXNlIHRoZSBvcmRlciBpbiB3aGljaCB0aGUg
dGVzdHMgd2VyZSBsaXN0ZWQgZWl0aGVyIGluIGFyZ3VtZW50cyBvciB0ZXN0IGxpc3QsICIKKyAg
ICAgICAgICAgICAgICAgICInbmF0dXJhbCcgPT0gdXNlIHRoZSBuYXR1cmFsIG9yZGVyIChkZWZh
dWx0KSwgIgorICAgICAgICAgICAgICAgICAgIidyYW5kb20nID09IHJhbmRvbWl6ZSB0aGUgdGVz
dCBvcmRlci4iKSksCiAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXJ1bi1jaHVuayIs
CiAgICAgICAgICAgICBoZWxwPSgiUnVuIGEgc3BlY2lmaWVkIGNodW5rIChuOmwpLCB0aGUgbnRo
IG9mIGxlbiBsLCAiCiAgICAgICAgICAgICAgICAgICJvZiB0aGUgbGF5b3V0IHRlc3RzIikpLApk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtp
dF90ZXN0c19pbnRlZ3JhdGlvbnRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX2ludGVncmF0aW9udGVzdC5weQppbmRleCA2YTkxNjFm
ZTVlOTk2N2RhZTYyMzNhZDQzMWI1MzczY2Y2YTY3YWZjLi5hOGUzZjMwYWVhMGMzZDQwMDAzMGNl
MDBkN2Q0YmEwMGM1Mjc0MzZhIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX2ludGVncmF0aW9udGVzdC5weQorKysgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX2ludGVncmF0
aW9udGVzdC5weQpAQCAtMzg5LDkgKzM4OSwyNSBAQCBjbGFzcyBNYWluVGVzdCh1bml0dGVzdC5U
ZXN0Q2FzZSwgU3RyZWFtVGVzdGluZ01peGluKToKICAgICAgICAgc2VsZi5hc3NlcnRFbXB0eShv
dXQpCiAgICAgICAgIHNlbGYuYXNzZXJ0Q29udGFpbnMoZXJyLCAnTm8gdGVzdHMgdG8gcnVuLlxu
JykKIAotICAgIGRlZiB0ZXN0X3JhbmRvbWl6ZV9vcmRlcihzZWxmKToKLSAgICAgICAgIyBGSVhN
RTogdmVyaWZ5IG9yZGVyIHdhcyBzaHVmZmxlZAotICAgICAgICBzZWxmLmFzc2VydFRydWUocGFz
c2luZ19ydW4oWyctLXJhbmRvbWl6ZS1vcmRlciddKSkKKyAgICBkZWYgdGVzdF9uYXR1cmFsX29y
ZGVyKHNlbGYpOgorICAgICAgICB0ZXN0c190b19ydW4gPSBbJ3Bhc3Nlcy9hdWRpby5odG1sJywg
J2ZhaWx1cmVzL2V4cGVjdGVkL3RleHQuaHRtbCcsICdmYWlsdXJlcy9leHBlY3RlZC9taXNzaW5n
X3RleHQuaHRtbCcsICdwYXNzZXMvYXJncy5odG1sJ10KKyAgICAgICAgdGVzdHNfcnVuID0gZ2V0
X3Rlc3RzX3J1bihbJy0tb3JkZXI9bmF0dXJhbCddICsgdGVzdHNfdG9fcnVuLCB0ZXN0c19pbmNs
dWRlZD1UcnVlLCBmbGF0dGVuX2JhdGNoZXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChbJ2ZhaWx1cmVzL2V4cGVjdGVkL21pc3NpbmdfdGV4dC5odG1sJywgJ2ZhaWx1cmVzL2V4cGVj
dGVkL3RleHQuaHRtbCcsICdwYXNzZXMvYXJncy5odG1sJywgJ3Bhc3Nlcy9hdWRpby5odG1sJ10s
IHRlc3RzX3J1bikKKworICAgIGRlZiB0ZXN0X3JhbmRvbV9vcmRlcihzZWxmKToKKyAgICAgICAg
dGVzdHNfdG9fcnVuID0gWydwYXNzZXMvYXVkaW8uaHRtbCcsICdmYWlsdXJlcy9leHBlY3RlZC90
ZXh0Lmh0bWwnLCAnZmFpbHVyZXMvZXhwZWN0ZWQvbWlzc2luZ190ZXh0Lmh0bWwnLCAncGFzc2Vz
L2FyZ3MuaHRtbCddCisgICAgICAgIHRlc3RzX3J1biA9IGdldF90ZXN0c19ydW4oWyctLW9yZGVy
PXJhbmRvbSddICsgdGVzdHNfdG9fcnVuLCB0ZXN0c19pbmNsdWRlZD1UcnVlLCBmbGF0dGVuX2Jh
dGNoZXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQodGVzdHNfdG9fcnVu
KSwgc29ydGVkKHRlc3RzX3J1bikpCisKKyAgICBkZWYgdGVzdF9ub19vcmRlcihzZWxmKToKKyAg
ICAgICAgdGVzdHNfdG9fcnVuID0gWydwYXNzZXMvYXVkaW8uaHRtbCcsICdmYWlsdXJlcy9leHBl
Y3RlZC90ZXh0Lmh0bWwnLCAnZmFpbHVyZXMvZXhwZWN0ZWQvbWlzc2luZ190ZXh0Lmh0bWwnLCAn
cGFzc2VzL2FyZ3MuaHRtbCddCisgICAgICAgIHRlc3RzX3J1biA9IGdldF90ZXN0c19ydW4oWyct
LW9yZGVyPW5vbmUnXSArIHRlc3RzX3RvX3J1biwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgZmxhdHRl
bl9iYXRjaGVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdHNfdG9fcnVuLCB0
ZXN0c19ydW4pCisKKyAgICBkZWYgdGVzdF9ub19vcmRlcl93aXRoX2RpcmVjdG9yeV9lbnRyaWVz
X2luX25hdHVyYWxfb3JkZXIoc2VsZik6CisgICAgICAgIHRlc3RzX3RvX3J1biA9IFsnaHR0cC90
ZXN0cy9zc2wnLCAncGVyZi9mb28nLCAnaHR0cC90ZXN0cy9wYXNzZXMnXQorICAgICAgICB0ZXN0
c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsnLS1vcmRlcj1ub25lJ10gKyB0ZXN0c190b19ydW4sIHRl
c3RzX2luY2x1ZGVkPVRydWUsIGZsYXR0ZW5fYmF0Y2hlcz1UcnVlKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKHRlc3RzX3J1biwgWydodHRwL3Rlc3RzL3NzbC90ZXh0Lmh0bWwnLCAncGVyZi9m
b28vdGVzdC5odG1sJywgJ2h0dHAvdGVzdHMvcGFzc2VzL2ltYWdlLmh0bWwnLCAnaHR0cC90ZXN0
cy9wYXNzZXMvdGV4dC5odG1sJ10pCiAKICAgICBkZWYgdGVzdF9nY19iZXR3ZWVuX3Rlc3RzKHNl
bGYpOgogICAgICAgICBzZWxmLmFzc2VydFRydWUocGFzc2luZ19ydW4oWyctLWdjLWJldHdlZW4t
dGVzdHMnXSkpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkv
b3JkZXJlZF9zZXQucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHkvb3JkZXJl
ZF9zZXQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZmM5ZDYxNWJmYjE0ZjZiMjJkM2I1Yzk5YjM2Y2EyYzI2NmY5
MTc2OAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGhpcmRwYXJ0
eS9vcmRlcmVkX3NldC5weQpAQCAtMCwwICsxLDkxIEBACisjIENvcHlyaWdodCAoYykgMjAwOSBS
YXltb25kIEhldHRpbmdlci4KKyMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJl
ZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorIyBvZiB0aGlzIHNv
ZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUi
KSwgdG8gZGVhbAorIyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVk
aW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisjIHRvIHVzZSwgY29weSwgbW9kaWZ5
LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyMg
Y29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhl
IFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnM6CisjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlz
IHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisjIGFsbCBjb3BpZXMgb3Ig
c3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorIworIyBUSEUgU09GVFdBUkUg
SVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVT
UyBPUgorIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisjIEFVVEhPUlMg
T1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1Ig
T1RIRVIKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9S
VCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyMgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04g
V0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyMg
U09GVFdBUkUuCisKKyMgVGhpcyBjb2RlIGlzIG9idGFpbmVkIGZyb20gaHR0cDovL2NvZGUuYWN0
aXZlc3RhdGUuY29tL3JlY2lwZXMvNTc2Njk0LworCitpbXBvcnQgY29sbGVjdGlvbnMKKworS0VZ
LCBQUkVWLCBORVhUID0gcmFuZ2UoMykKKworY2xhc3MgT3JkZXJlZFNldChjb2xsZWN0aW9ucy5N
dXRhYmxlU2V0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpdGVyYWJsZT1Ob25lKToKKyAg
ICAgICAgc2VsZi5lbmQgPSBlbmQgPSBbXQorICAgICAgICBlbmQgKz0gW05vbmUsIGVuZCwgZW5k
XSAgICAgICAgICMgc2VudGluZWwgbm9kZSBmb3IgZG91Ymx5IGxpbmtlZCBsaXN0CisgICAgICAg
IHNlbGYubWFwID0ge30gICAgICAgICAgICAgICAgICAgIyBrZXkgLS0+IFtrZXksIHByZXYsIG5l
eHRdCisgICAgICAgIGlmIGl0ZXJhYmxlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZiB8
PSBpdGVyYWJsZQorCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiBsZW4o
c2VsZi5tYXApCisKKyAgICBkZWYgX19jb250YWluc19fKHNlbGYsIGtleSk6CisgICAgICAgIHJl
dHVybiBrZXkgaW4gc2VsZi5tYXAKKworICAgIGRlZiBhZGQoc2VsZiwga2V5KToKKyAgICAgICAg
aWYga2V5IG5vdCBpbiBzZWxmLm1hcDoKKyAgICAgICAgICAgIGVuZCA9IHNlbGYuZW5kCisgICAg
ICAgICAgICBjdXJyID0gZW5kW1BSRVZdCisgICAgICAgICAgICBjdXJyW05FWFRdID0gZW5kW1BS
RVZdID0gc2VsZi5tYXBba2V5XSA9IFtrZXksIGN1cnIsIGVuZF0KKworICAgIGRlZiBkaXNjYXJk
KHNlbGYsIGtleSk6CisgICAgICAgIGlmIGtleSBpbiBzZWxmLm1hcDoKKyAgICAgICAgICAgIGtl
eSwgcHJldiwgbmV4dCA9IHNlbGYubWFwLnBvcChrZXkpCisgICAgICAgICAgICBwcmV2W05FWFRd
ID0gbmV4dAorICAgICAgICAgICAgbmV4dFtQUkVWXSA9IHByZXYKKworICAgIGRlZiBfX2l0ZXJf
XyhzZWxmKToKKyAgICAgICAgZW5kID0gc2VsZi5lbmQKKyAgICAgICAgY3VyciA9IGVuZFtORVhU
XQorICAgICAgICB3aGlsZSBjdXJyIGlzIG5vdCBlbmQ6CisgICAgICAgICAgICB5aWVsZCBjdXJy
W0tFWV0KKyAgICAgICAgICAgIGN1cnIgPSBjdXJyW05FWFRdCisKKyAgICBkZWYgX19yZXZlcnNl
ZF9fKHNlbGYpOgorICAgICAgICBlbmQgPSBzZWxmLmVuZAorICAgICAgICBjdXJyID0gZW5kW1BS
RVZdCisgICAgICAgIHdoaWxlIGN1cnIgaXMgbm90IGVuZDoKKyAgICAgICAgICAgIHlpZWxkIGN1
cnJbS0VZXQorICAgICAgICAgICAgY3VyciA9IGN1cnJbUFJFVl0KKworICAgIGRlZiBwb3Aoc2Vs
ZiwgbGFzdD1UcnVlKToKKyAgICAgICAgaWYgbm90IHNlbGY6CisgICAgICAgICAgICByYWlzZSBL
ZXlFcnJvcignc2V0IGlzIGVtcHR5JykKKyAgICAgICAga2V5ID0gbmV4dChyZXZlcnNlZChzZWxm
KSkgaWYgbGFzdCBlbHNlIG5leHQoaXRlcihzZWxmKSkKKyAgICAgICAgc2VsZi5kaXNjYXJkKGtl
eSkKKyAgICAgICAgcmV0dXJuIGtleQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAg
ICBpZiBub3Qgc2VsZjoKKyAgICAgICAgICAgIHJldHVybiAnJXMoKScgJSAoc2VsZi5fX2NsYXNz
X18uX19uYW1lX18sKQorICAgICAgICByZXR1cm4gJyVzKCVyKScgJSAoc2VsZi5fX2NsYXNzX18u
X19uYW1lX18sIGxpc3Qoc2VsZikpCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAg
ICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgT3JkZXJlZFNldCk6CisgICAgICAgICAgICByZXR1
cm4gbGVuKHNlbGYpID09IGxlbihvdGhlcikgYW5kIGxpc3Qoc2VsZikgPT0gbGlzdChvdGhlcikK
KyAgICAgICAgcmV0dXJuIHNldChzZWxmKSA9PSBzZXQob3RoZXIpCisKKyAgICBkZWYgX19kZWxf
XyhzZWxmKToKKyAgICAgICAgc2VsZi5jbGVhcigpICAgICAgICAgICAgICAgICAgICAjIHJlbW92
ZSBjaXJjdWxhciByZWZlcmVuY2VzCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAg
ICBwcmludChPcmRlcmVkU2V0KCdhYnJhY2FkYWJhJykpCisgICAgcHJpbnQoT3JkZXJlZFNldCgn
c2ltc2FsYWJpbScpKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2Nv
bW1hbmRzL3F1ZXJpZXMucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMv
cXVlcmllcy5weQppbmRleCBiN2U0YTg1ODg0ODYzMTM0ZTg2YjJlMTQzNDUwMTdhZTFjZDJiYjI5
Li45ZDdmNzM1YjZkMGMwMTYwMDM3OWQ2NGM1MmVmZGIzNjVjNTY0NGQ4IDEwMDY0NAotLS0gYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVlcmllcy5weQorKysgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVlcmllcy5weQpAQCAtNDY1LDcgKzQ2
NSw3IEBAIGNsYXNzIFByaW50RXhwZWN0YXRpb25zKEFic3RyYWN0RGVjbGFyYXRpdmVDb21tYW5k
KToKICAgICAgICAgICAgIGRlZmF1bHRfcG9ydCA9IHRvb2wucG9ydF9mYWN0b3J5LmdldChvcHRp
b25zPW9wdGlvbnMpCiAgICAgICAgICAgICBwb3J0X25hbWVzID0gW2RlZmF1bHRfcG9ydC5uYW1l
KCldCiAKLSAgICAgICAgdGVzdHMgPSBkZWZhdWx0X3BvcnQudGVzdHMoYXJncykKKyAgICAgICAg
dGVzdHMgPSBzZXQoZGVmYXVsdF9wb3J0LnRlc3RzKGFyZ3MpKQogICAgICAgICBmb3IgcG9ydF9u
YW1lIGluIHBvcnRfbmFtZXM6CiAgICAgICAgICAgICBtb2RlbCA9IHNlbGYuX21vZGVsKG9wdGlv
bnMsIHBvcnRfbmFtZSwgdGVzdHMpCiAgICAgICAgICAgICB0ZXN0c190b19wcmludCA9IHNlbGYu
X2ZpbHRlcl90ZXN0cyhvcHRpb25zLCBtb2RlbCwgdGVzdHMpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174481</attachid>
            <date>2012-11-15 10:24:24 -0800</date>
            <delta_ts>2012-11-21 11:41:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102229-20121115192222.patch</filename>
            <type>text/plain</type>
            <size>16801</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM0Nzc4CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZTQ4OTJjZDRkMzg0ZTAzN2EwMGMxNTdmYjM3NzcwYTY3
MWJiODEzYi4uNzJhMmNkMjAwMTI5ODcxN2FhOTUyMjg0MWIxOTQzZDI3MjQ4OGUzNSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDY4
IEBACiAyMDEyLTExLTE1ICBaYW4gRG9iZXJzZWsgIDx6YW5kb2JlcnNla0BnbWFpbC5jb20+CiAK
KyAgICAgICAgQWRkIHRoZSAtLW9yZGVyIG9wdGlvbiB0byBOUldUCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDIyMjkKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgLS1vcmRlciBvcHRpb24gY29udHJv
bHMgaW4gd2hhdCBvcmRlciB0aGUgZ2F0aGVyZWQgdGVzdHMgd2lsbCBiZSBydW4uCisgICAgICAg
IFRoZXJlIGFyZSAzIG9wdGlvbnM6CisgICAgICAgIC0gbmF0dXJhbCwgdGhlIHRlc3RzIGFyZSBz
b3J0ZWQgaW4gbmF0dXJhbCBvcmRlciwKKyAgICAgICAgLSByYW5kb20sIHRoZSB0ZXN0cyBhcmUg
c29ydGVkIGluIHJhbmRvbSBvcmRlciwKKyAgICAgICAgLSBub25lLCB0aGUgdGVzdHMgYXJlIGtl
cHQgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgd2VyZSBzcGVjaWZpZWQgdGhyb3VnaAorICAg
ICAgICBhcmd1bWVudHMgb3IgdGhlIHRlc3QgbGlzdC4KKworICAgICAgICBUaGUgbmF0dXJhbCBv
cHRpb24gaXMgdGhlIGRlZmF1bHQgb25lIGFuZCBrZWVwcyB0aGUgY3VycmVudCBiZWhhdmlvci4K
KworICAgICAgICBUaGUgbm9uZSBvcHRpb24gaXMgcHJpbWFyaWx5IGludGVuZGVkIHRvIGJlIHVz
ZWQgd2l0aCB0aGUgLS10ZXN0LWxpc3Qgb3B0aW9uLAorICAgICAgICB3aXRoIHRoZSB0ZXN0IGxp
c3QgZmlsZSBleHBlY3RlZCB0byBsaXN0IHNwZWNpZmljIHRlc3QgbmFtZXMuCisgICAgICAgIFdo
ZW4gYSBkaXJlY3RvcnkgaXMgc3BlY2lmaWVkIGFzIG9uZSBvZiB0aGUgcGF0aHMgZnJvbSB1bmRl
ciB3aGljaCB0ZXN0cyBzaG91bGQKKyAgICAgICAgYmUgZ2F0aGVyZWQgYW5kIHRoZSBub25lIG9w
dGlvbiBpcyB1c2VkLCB0aGF0IHBhdGggd2lsbCBleHBhbmQgdG8gYWxsIHRoZSB0ZXN0cworICAg
ICAgICB1bmRlciBpdCwgd2l0aCB0aGVzZSB0ZXN0cyBzb3J0ZWQgaW4gdGhlIG5hdHVyYWwgb3Jk
ZXIuCisKKyAgICAgICAgVXNpbmcgLS1vcmRlcj1yYW5kb20gZHVwbGljYXRlZCB0aGUgYmVoYXZp
b3Igb2YgdGhlIC0tcmFuZG9taXplLW9yZGVyIG9wdGlvbiwgc28KKyAgICAgICAgdGhlIGxhdHRl
ciBpcyByZW1vdmVkLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBpbmNvcnBvcmF0ZXMgdGhl
IGNoYW5nZSB3aXRoIHdoaWNoIG1ha2VzIGl0IGlzIHBvc3NpYmxlIHRvIHNwZWNpZnkKKyAgICAg
ICAgYSB0ZXN0IHZpYSBhcmd1bWVudHMgb3IgdGhlIHRlc3QgbGlzdCBtdWx0aXBsZSB0ZXN0cyBh
bmQgdGhlbiBoYXZlIHRoZSB0ZXN0IHJ1bgorICAgICAgICB0aGF0IG1hbnkgdGltZXMuCisKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9maW5kX2ZpbGVzLnB5OgorICAgICAgICAo
X25vcm1hbGl6ZWRfZmluZCk6IEJvdGggcGF0aHMgdGhhdCBhcmUgdGhlbiBzZWFyY2hlZCBmb3Ig
dGhlIHRlc3RzIGFuZCB0aGUgdGVzdHMgdGhhdAorICAgICAgICB3ZXJlIGZvdW5kIGFyZSBub3cg
a2VwdCBpbiBsaXN0cy4gVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBydW4gYSB0ZXN0IG11bHRp
cGxlIHRpbWVzCisgICAgICAgIGJ5IHNwZWNpZnlpbmcgaXQgbXVsdGlwbGUgdGltZXMgdGhyb3Vn
aCBhcmd1bWVudHMgb3IgdGhlIHRlc3QgbGlzdCBmaWxlLgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X2ZpbmRlci5weToKKyAg
ICAgICAgKExheW91dFRlc3RGaW5kZXIuZmluZF90ZXN0cyk6IEtlZXAgdGhlIHBhdGhzIHdoZXJl
IHdlIHNob3VsZCBzZWFyY2ggZm9yIHRlc3RzIGluIGEgbGlzdC4KKyAgICAgICAgKExheW91dFRl
c3RGaW5kZXIuc2tpcF90ZXN0cyk6IFN1YnRyYWN0aW5nIGZyb20gYSBzZXQgb2YgcGF0aHMgaXMg
bmVjZXNzYXJ5LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRy
b2xsZXJzL21hbmFnZXIucHk6CisgICAgICAgIChNYW5hZ2VyLl9wcmVwYXJlX2xpc3RzKTogS2Vl
cCB0aGUgdGVzdCBuYW1lcyBpbiBhIGxpc3QuIE9yZGVyIHRoYXQgbGlzdCBhcyBzcGVjaWZpZWQg
YnkKKyAgICAgICAgdGhlIG5ldyAtLW9yZGVyIG9wdGlvbi4KKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHk6CisgICAgICAgIChQb3J0LnRlc3RzKTog
VGhpcyBtZXRob2Qgc2hvdWxkIG5vdyByZXR1cm4gYSBsaXN0IG9mIGFsbCB0aGUgdGVzdHMgZm91
bmQgaW4gdGhlIHNwZWNpZmllZAorICAgICAgICBwYXRocy4KKyAgICAgICAgKFBvcnQuX3JlYWxf
dGVzdHMpOiBBIGxpc3QgaXMgcmVxdWlyZWQsIHNvIG5vIGNvbnZlcnNpb24gdG8gYSBzZXQgaXMg
bWFkZS4KKyAgICAgICAgKFBvcnQuX3ZpcnR1YWxfdGVzdHMpOiBBIGxpc3QgaXMgcmVxdWlyZWQs
IHNvIHRoZSBmdW5jdGlvbiBub3cgb3BlcmF0ZXMgb24gdGhhdCByYXRoZXIgdGhhbgorICAgICAg
ICBvbiBhIHNldC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2Jhc2VfdW5pdHRlc3QucHk6CisgICAgICAgIChQb3J0VGVzdC50ZXN0X2ZpbmRfd2l0aF9za2lw
cGVkX2RpcmVjdG9yaWVzXzIpOiBBZGp1c3QgdGhlIHRlc3QgY2FzZSB0byBjaGVjayBmb3IgYW4g
ZW1wdHkKKyAgICAgICAgbGlzdCByYXRoZXIgdGhhbiBhbiBlbXB0eSBzZXQuCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weToKKyAgICAg
ICAgKHBhcnNlX2FyZ3MpOiBSZW1vdmUgdGhlIC0tcmFuZG9taXplLW9yZGVyIG9wdGlvbiwgaXQn
cyBub3cgY292ZXJlZCBieSAtLW9yZGVyPXJhbmRvbS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX2ludGVncmF0aW9udGVzdC5weTogQWRk
IHVuaXQgdGVzdHMgY292ZXJpbmcKKyAgICAgICAgdmFyaW91cyBhc3BlY3RzIG9mIHRoaXMgY2hh
bmdlLgorICAgICAgICAoTWFpblRlc3QudGVzdF9uYXR1cmFsX29yZGVyKToKKyAgICAgICAgKE1h
aW5UZXN0KToKKyAgICAgICAgKE1haW5UZXN0LnRlc3RfbmF0dXJhbF9vcmRlcl90ZXN0X3NwZWNp
ZmllZF9tdWx0aXBsZV90aW1lcyk6CisgICAgICAgIChNYWluVGVzdC50ZXN0X3JhbmRvbV9vcmRl
cik6CisgICAgICAgIChNYWluVGVzdC50ZXN0X3JhbmRvbV9vcmRlcl90ZXN0X3NwZWNpZmllZF9t
dWx0aXBsZV90aW1lcyk6CisgICAgICAgIChNYWluVGVzdC50ZXN0X25vX29yZGVyKToKKyAgICAg
ICAgKE1haW5UZXN0LnRlc3Rfbm9fb3JkZXJfdGVzdF9zcGVjaWZpZWRfbXVsdGlwbGVfdGltZXMp
OgorICAgICAgICAoTWFpblRlc3QudGVzdF9ub19vcmRlcl93aXRoX2RpcmVjdG9yeV9lbnRyaWVz
X2luX25hdHVyYWxfb3JkZXIpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21t
YW5kcy9xdWVyaWVzLnB5OgorICAgICAgICAoUHJpbnRFeHBlY3RhdGlvbnMuZXhlY3V0ZSk6IE9w
ZXJhdGUgb24gYSBzZXQgb2YgdGVzdHMgd2hlbiBwcmludGluZyBvdXQgZXhwZWN0YXRpb25zLgor
CisyMDEyLTExLTE1ICBaYW4gRG9iZXJzZWsgIDx6YW5kb2JlcnNla0BnbWFpbC5jb20+CisKICAg
ICAgICAgTW92ZSBuYXR1cmFsIHNvcnRpbmcgdG8gYSBzZXBhcmF0ZSBtb2R1bGUKICAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMjQwMQogCmRpZmYgLS1n
aXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9maW5kX2ZpbGVzLnB5IGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tb24vZmluZF9maWxlcy5weQppbmRleCAzMmNlNGQxMDU5ZmE1
NzRhN2VjZDliOTdhNjVhNzU0NWJiMzU2Njg4Li4zMjY1YzgxOGExOTk3MDJlNDUzNDNjMGM0ODYw
YzkxN2RjZmM3YWE3IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9m
aW5kX2ZpbGVzLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2ZpbmRfZmls
ZXMucHkKQEAgLTQ0LDYgKzQ0LDggQEAgSWYgYSBjYWxsYmFjayBpcyBwYXNzZWQgaW4sIGl0IHdp
bGwgYmUgY2FsbGVkIGZvciB0aGUgZWFjaCBmaWxlIGFuZCB0aGUgZmlsZQogd2lsbCBiZSBpbmNs
dWRlZCBpbnRvIHRoZSByZXN1bHQgaWYgdGhlIGNhbGxiYWNrIHJldHVybnMgVHJ1ZS4KIFRoZSBj
YWxsYmFjayBoYXMgdG8gdGFrZSB0aHJlZSBhcmd1bWVudHM6IGZpbGVzeXN0ZW0sIGRpcm5hbWUg
YW5kIGZpbGVuYW1lLiIiIgogCitmcm9tIHdlYmtpdHB5LmNvbW1vbiBpbXBvcnQgbmF0dXJhbF9v
cmRlcgorCiAKIGRlZiBmaW5kKGZpbGVzeXN0ZW0sIGJhc2VfZGlyLCBwYXRocz1Ob25lLCBza2lw
cGVkX2RpcmVjdG9yaWVzPU5vbmUsIGZpbGVfZmlsdGVyPU5vbmUpOgogICAgICIiIkZpbmRzIHRo
ZSBzZXQgb2YgdGVzdHMgdW5kZXIgYSBnaXZlbiBsaXN0IG9mIHN1Yi1wYXRocy4KQEAgLTcxLDIw
ICs3MywyMCBAQCBkZWYgX25vcm1hbGl6ZWRfZmluZChmaWxlc3lzdGVtLCBwYXRocywgc2tpcHBl
ZF9kaXJlY3RvcmllcywgZmlsZV9maWx0ZXIpOgogICAgICAgcGF0aHM6IGEgbGlzdCBvZiBhYnNv
bHV0ZSBwYXRoIGV4cHJlc3Npb25zIHRvIHNlYXJjaC4KICAgICAgICAgICBHbG9iIHBhdHRlcm5z
IGFyZSBvay4KICAgICAiIiIKLSAgICBwYXRoc190b193YWxrID0gc2V0KCkKKyAgICBwYXRoc190
b193YWxrID0gbGlzdCgpCiAKICAgICBmb3IgcGF0aCBpbiBwYXRoczoKICAgICAgICAgIyBJZiB0
aGVyZSdzIGFuICogaW4gdGhlIG5hbWUsIGFzc3VtZSBpdCdzIGEgZ2xvYiBwYXR0ZXJuLgogICAg
ICAgICBpZiBwYXRoLmZpbmQoJyonKSA+IC0xOgogICAgICAgICAgICAgZmlsZW5hbWVzID0gZmls
ZXN5c3RlbS5nbG9iKHBhdGgpCi0gICAgICAgICAgICBwYXRoc190b193YWxrLnVwZGF0ZShmaWxl
bmFtZXMpCisgICAgICAgICAgICBwYXRoc190b193YWxrLmV4dGVuZChmaWxlbmFtZXMpCiAgICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICBwYXRoc190b193YWxrLmFkZChwYXRoKQorICAgICAgICAg
ICAgcGF0aHNfdG9fd2Fsay5hcHBlbmQocGF0aCkKIAotICAgICMgRklYTUU6IEknbSBub3Qgc3Vy
ZSB0aGVyZSdzIG11Y2ggcG9pbnQgaW4gdGhpcyBiZWluZyBhIHNldC4gQSBsaXN0IHdvdWxkIHBy
b2JhYmx5IGJlIGZhc3Rlci4KLSAgICBhbGxfZmlsZXMgPSBzZXQoKQorICAgIGFsbF9maWxlcyA9
IGxpc3QoKQogICAgIGZvciBwYXRoIGluIHBhdGhzX3RvX3dhbGs6CiAgICAgICAgIGZpbGVzID0g
ZmlsZXN5c3RlbS5maWxlc191bmRlcihwYXRoLCBza2lwcGVkX2RpcmVjdG9yaWVzLCBmaWxlX2Zp
bHRlcikKLSAgICAgICAgYWxsX2ZpbGVzLnVwZGF0ZShzZXQoZmlsZXMpKQorICAgICAgICBmaWxl
cy5zb3J0KGtleT1uYXR1cmFsX29yZGVyLnRlc3RfbmFtZV9rZXkpCisgICAgICAgIGFsbF9maWxl
cy5leHRlbmQoZmlsZXMpCiAKICAgICByZXR1cm4gYWxsX2ZpbGVzCmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVzdF9m
aW5kZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVy
cy9sYXlvdXRfdGVzdF9maW5kZXIucHkKaW5kZXggNmI0Y2M5MWY0ZDhlOGI4NDAzNWNhODNmZjFi
ODBjMDQyYjdiNDE3MS4uOGMwMDZlNDMzOWU0OTNkNTZiYmE3MDYwMjE2NGQzZDg4OTZhMDY0MCAx
MDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxl
cnMvbGF5b3V0X3Rlc3RfZmluZGVyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X2ZpbmRlci5weQpAQCAtNDgsNyArNDgs
NiBAQCBjbGFzcyBMYXlvdXRUZXN0RmluZGVyKG9iamVjdCk6CiAgICAgICAgIHBhdGhzID0gc2Vs
Zi5fc3RyaXBfdGVzdF9kaXJfcHJlZml4ZXMoYXJncykKICAgICAgICAgaWYgb3B0aW9ucy50ZXN0
X2xpc3Q6CiAgICAgICAgICAgICBwYXRocyArPSBzZWxmLl9zdHJpcF90ZXN0X2Rpcl9wcmVmaXhl
cyhzZWxmLl9yZWFkX3Rlc3RfbmFtZXNfZnJvbV9maWxlKG9wdGlvbnMudGVzdF9saXN0LCB0ZXN0
X25hbWUuVEVTVF9QQVRIX1NFUEFSQVRPUikpCi0gICAgICAgIHBhdGhzID0gc2V0KHBhdGhzKQog
ICAgICAgICB0ZXN0X2ZpbGVzID0gc2VsZi5fcG9ydC50ZXN0cyhwYXRocykKICAgICAgICAgcmV0
dXJuIChwYXRocywgdGVzdF9maWxlcykKIApAQCAtMTA5LDcgKzEwOCw3IEBAIGNsYXNzIExheW91
dFRlc3RGaW5kZXIob2JqZWN0KToKICAgICAgICAgICAgIHRlc3RzX3RvX3NraXAgPSBzZXQoKQog
ICAgICAgICBlbGlmIHNlbGYuX29wdGlvbnMuc2tpcHBlZCAhPSAnYWx3YXlzJzoKICAgICAgICAg
ICAgICMgbWFrZSBzdXJlIHdlJ3JlIGV4cGxpY2l0bHkgcnVubmluZyBhbnkgdGVzdHMgcGFzc2Vk
IG9uIHRoZSBjb21tYW5kIGxpbmU7IGVxdWl2YWxlbnQgdG8gJ2RlZmF1bHQnLgotICAgICAgICAg
ICAgdGVzdHNfdG9fc2tpcCAtPSBwYXRocworICAgICAgICAgICAgdGVzdHNfdG9fc2tpcCAtPSBz
ZXQocGF0aHMpCiAKICAgICAgICAgIyB1bmxlc3Mgb2YgY291cnNlIHdlIGRvbid0IHdhbnQgdG8g
cnVuIHRoZSBIVFRQIHRlc3RzIDopCiAgICAgICAgIGlmIG5vdCBzZWxmLl9vcHRpb25zLmh0dHA6
CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9s
bGVycy9tYW5hZ2VyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29u
dHJvbGxlcnMvbWFuYWdlci5weQppbmRleCA0MmM4ZmM0Zjk4OWRjNThhYTRlYjlkNjRjZTljNWFi
ZmE4Zjk1ZWFmLi4zNDA0MTVhZmJlMWI1MzQ5ZmNkY2RhOTA4Y2ExNTFhY2U4N2JlNDM4IDEwMDY0
NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9t
YW5hZ2VyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRy
b2xsZXJzL21hbmFnZXIucHkKQEAgLTMwNSwxNCArMzA1LDE0IEBAIGNsYXNzIE1hbmFnZXIob2Jq
ZWN0KToKIAogICAgIGRlZiBfcHJlcGFyZV9saXN0cyhzZWxmKToKICAgICAgICAgdGVzdHNfdG9f
c2tpcCA9IHNlbGYuX2ZpbmRlci5za2lwX3Rlc3RzKHNlbGYuX3BhdGhzLCBzZWxmLl90ZXN0X25h
bWVzLCBzZWxmLl9leHBlY3RhdGlvbnMsIHNlbGYuX2h0dHBfdGVzdHMoKSkKLSAgICAgICAgc2Vs
Zi5fdGVzdF9uYW1lcyA9IGxpc3Qoc2V0KHNlbGYuX3Rlc3RfbmFtZXMpIC0gdGVzdHNfdG9fc2tp
cCkKKyAgICAgICAgc2VsZi5fdGVzdF9uYW1lcyA9IFt0ZXN0IGZvciB0ZXN0IGluIHNlbGYuX3Rl
c3RfbmFtZXMgaWYgdGVzdCBub3QgaW4gdGVzdHNfdG9fc2tpcF0KIAogICAgICAgICAjIENyZWF0
ZSBhIHNvcnRlZCBsaXN0IG9mIHRlc3QgZmlsZXMgc28gdGhlIHN1YnNldCBjaHVuaywKICAgICAg
ICAgIyBpZiB1c2VkLCBjb250YWlucyBhbHBoYWJldGljYWxseSBjb25zZWN1dGl2ZSB0ZXN0cy4K
LSAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5yYW5kb21pemVfb3JkZXI6Ci0gICAgICAgICAgICBy
YW5kb20uc2h1ZmZsZShzZWxmLl90ZXN0X25hbWVzKQotICAgICAgICBlbHNlOgorICAgICAgICBp
ZiBzZWxmLl9vcHRpb25zLm9yZGVyID09ICduYXR1cmFsJzoKICAgICAgICAgICAgIHNlbGYuX3Rl
c3RfbmFtZXMuc29ydChrZXk9bmF0dXJhbF9vcmRlci50ZXN0X25hbWVfa2V5KQorICAgICAgICBl
bGlmIHNlbGYuX29wdGlvbnMub3JkZXIgPT0gJ3JhbmRvbSc6CisgICAgICAgICAgICByYW5kb20u
c2h1ZmZsZShzZWxmLl90ZXN0X25hbWVzKQogCiAgICAgICAgIHNlbGYuX3Rlc3RfbmFtZXMsIHRl
c3RzX2luX290aGVyX2NodW5rcyA9IHNlbGYuX2ZpbmRlci5zcGxpdF9pbnRvX2NodW5rcyhzZWxm
Ll90ZXN0X25hbWVzKQogICAgICAgICBzZWxmLl9leHBlY3RhdGlvbnMuYWRkX3NraXBwZWRfdGVz
dHModGVzdHNfaW5fb3RoZXJfY2h1bmtzKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CmluZGV4IDY4NDkyZWM1Njk0MzdjNjNiOTgxMGU3Yjk1
OGM4Y2JmNWRjMWUzOGQuLjBiMTcxZDViY2I1ZDQxYjJjNWZkMzgwOGI0YzkxNWVmYjdiNDM1OWUg
MTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFz
ZS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2Uu
cHkKQEAgLTU3NSw3ICs1NzUsOSBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgZGVmIHRlc3Rz
KHNlbGYsIHBhdGhzKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSBsaXN0IG9mIHRlc3RzIGZvdW5k
LiBCb3RoIGdlbmVyaWMgYW5kIHBsYXRmb3JtLXNwZWNpZmljIHRlc3RzIG1hdGNoaW5nIHBhdGhz
IHNob3VsZCBiZSByZXR1cm5lZC4iIiIKICAgICAgICAgZXhwYW5kZWRfcGF0aHMgPSBzZWxmLl9l
eHBhbmRlZF9wYXRocyhwYXRocykKLSAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWxfdGVzdHMoZXhw
YW5kZWRfcGF0aHMpLnVuaW9uKHNlbGYuX3ZpcnR1YWxfdGVzdHMoZXhwYW5kZWRfcGF0aHMsIHNl
bGYucG9wdWxhdGVkX3ZpcnR1YWxfdGVzdF9zdWl0ZXMoKSkpCisgICAgICAgIHRlc3RzID0gc2Vs
Zi5fcmVhbF90ZXN0cyhleHBhbmRlZF9wYXRocykKKyAgICAgICAgdGVzdHMuZXh0ZW5kKHNlbGYu
X3ZpcnR1YWxfdGVzdHMoZXhwYW5kZWRfcGF0aHMsIHNlbGYucG9wdWxhdGVkX3ZpcnR1YWxfdGVz
dF9zdWl0ZXMoKSkpCisgICAgICAgIHJldHVybiB0ZXN0cwogCiAgICAgZGVmIF9leHBhbmRlZF9w
YXRocyhzZWxmLCBwYXRocyk6CiAgICAgICAgIGV4cGFuZGVkX3BhdGhzID0gW10KQEAgLTU5NCw3
ICs1OTYsNyBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgICAgICMgV2hlbiBjb2xsZWN0aW5n
IHRlc3QgY2FzZXMsIHNraXAgdGhlc2UgZGlyZWN0b3JpZXMKICAgICAgICAgc2tpcHBlZF9kaXJl
Y3RvcmllcyA9IHNldChbJy5zdm4nLCAnX3N2bicsICdyZXNvdXJjZXMnLCAnc2NyaXB0LXRlc3Rz
JywgJ3JlZmVyZW5jZScsICdyZWZ0ZXN0J10pCiAgICAgICAgIGZpbGVzID0gZmluZF9maWxlcy5m
aW5kKHNlbGYuX2ZpbGVzeXN0ZW0sIHNlbGYubGF5b3V0X3Rlc3RzX2RpcigpLCBwYXRocywgc2tp
cHBlZF9kaXJlY3RvcmllcywgUG9ydC5faXNfdGVzdF9maWxlKQotICAgICAgICByZXR1cm4gc2V0
KFtzZWxmLnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUoZikgZm9yIGYgaW4gZmlsZXNdKQorICAgICAg
ICByZXR1cm4gW3NlbGYucmVsYXRpdmVfdGVzdF9maWxlbmFtZShmKSBmb3IgZiBpbiBmaWxlc10K
IAogICAgICMgV2hlbiBjb2xsZWN0aW5nIHRlc3QgY2FzZXMsIHdlIGluY2x1ZGUgYW55IGZpbGUg
d2l0aCB0aGVzZSBleHRlbnNpb25zLgogICAgIF9zdXBwb3J0ZWRfZmlsZV9leHRlbnNpb25zID0g
c2V0KFsnLmh0bWwnLCAnLnNodG1sJywgJy54bWwnLCAnLnhodG1sJywgJy5wbCcsCkBAIC0xMzEx
LDE0ICsxMzEzLDE0IEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICAgICAgcmV0dXJuIHN1aXRl
cwogCiAgICAgZGVmIF92aXJ0dWFsX3Rlc3RzKHNlbGYsIHBhdGhzLCBzdWl0ZXMpOgotICAgICAg
ICB2aXJ0dWFsX3Rlc3RzID0gc2V0KCkKKyAgICAgICAgdmlydHVhbF90ZXN0cyA9IGxpc3QoKQog
ICAgICAgICBmb3Igc3VpdGUgaW4gc3VpdGVzOgogICAgICAgICAgICAgaWYgcGF0aHM6CiAgICAg
ICAgICAgICAgICAgZm9yIHRlc3QgaW4gc3VpdGUudGVzdHM6CiAgICAgICAgICAgICAgICAgICAg
IGlmIGFueSh0ZXN0LnN0YXJ0c3dpdGgocCkgZm9yIHAgaW4gcGF0aHMpOgotICAgICAgICAgICAg
ICAgICAgICAgICAgdmlydHVhbF90ZXN0cy5hZGQodGVzdCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHZpcnR1YWxfdGVzdHMuYXBwZW5kKHRlc3QpCiAgICAgICAgICAgICBlbHNlOgotICAgICAg
ICAgICAgICAgIHZpcnR1YWxfdGVzdHMudXBkYXRlKHNldChzdWl0ZS50ZXN0cy5rZXlzKCkpKQor
ICAgICAgICAgICAgICAgIHZpcnR1YWxfdGVzdHMuZXh0ZW5kKHN1aXRlLnRlc3RzLmtleXMoKSkK
ICAgICAgICAgcmV0dXJuIHZpcnR1YWxfdGVzdHMKIAogICAgIGRlZiBsb29rdXBfdmlydHVhbF90
ZXN0X2Jhc2Uoc2VsZiwgdGVzdF9uYW1lKToKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZV91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZV91bml0dGVzdC5weQppbmRleCA3N2VmMDRh
MDRkNjNiNGMyZGZiNWE5YzQxNjk4NzA5ZWRhMDAxOTc5Li5hNjIwZWJjMTQ4MjFmODU1YjIxZTRj
ZmRjNDI1NzU2YzkwMzlkZDk4IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2Jhc2VfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlX3VuaXR0ZXN0LnB5CkBAIC0zMjUsNyArMzI1LDcg
QEAgY2xhc3MgUG9ydFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X2ZpbmRf
d2l0aF9za2lwcGVkX2RpcmVjdG9yaWVzXzIoc2VsZik6CiAgICAgICAgIHBvcnQgPSBzZWxmLm1h
a2VfcG9ydCh3aXRoX3Rlc3RzPVRydWUpCiAgICAgICAgIHRlc3RzID0gcG9ydC50ZXN0cyhbJ3Vz
ZXJzY3JpcHRzL3Jlc291cmNlcyddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3RzLCBz
ZXQoW10pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3RzLCBbXSkKIAogICAgIGRlZiB0
ZXN0X2lzX3Rlc3RfZmlsZShzZWxmKToKICAgICAgICAgZmlsZXN5c3RlbSA9IE1vY2tGaWxlU3lz
dGVtKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1
bl93ZWJraXRfdGVzdHMucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9y
dW5fd2Via2l0X3Rlc3RzLnB5CmluZGV4IDJkZjU3Y2Y2ZjI3YmFkNThmNTQyZDNhNGVlNmZmOTZm
ODRhZTIzYzIuLmM1MDVjZDM5OWNhNzc1YmZlZTM4YTZlMDc2NmExODVjN2E5MTJkZWUgMTAwNzU1
Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVz
dHMucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtp
dF90ZXN0cy5weQpAQCAtMzUzLDkgKzM1MywxMSBAQCBkZWYgcGFyc2VfYXJncyhhcmdzPU5vbmUp
OgogICAgICAgICAgICAgaGVscD0iUnVuIGFsbCB0ZXN0cywgZXZlbiB0aG9zZSBtYXJrZWQgU0tJ
UCBpbiB0aGUgdGVzdCBsaXN0IChzYW1lIGFzIC0tc2tpcHBlZD1pZ25vcmUpIiksCiAgICAgICAg
IG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXRpbWUtb3V0LW1zIiwKICAgICAgICAgICAgIGhlbHA9
IlNldCB0aGUgdGltZW91dCBmb3IgZWFjaCB0ZXN0IiksCi0gICAgICAgIG9wdHBhcnNlLm1ha2Vf
b3B0aW9uKCItLXJhbmRvbWl6ZS1vcmRlciIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCi0gICAgICAg
ICAgICBkZWZhdWx0PUZhbHNlLCBoZWxwPSgiUnVuIHRlc3RzIGluIHJhbmRvbSBvcmRlciAodXNl
ZnVsICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvciB0cmFja2luZyBkb3du
IGNvcnJ1cHRpb24pIikpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1vcmRlciIs
IGFjdGlvbj0ic3RvcmUiLCBkZWZhdWx0PSJuYXR1cmFsIiwKKyAgICAgICAgICAgIGhlbHA9KCJk
ZXRlcm1pbmUgdGhlIG9yZGVyIGluIHdoaWNoIHRoZSB0ZXN0IGNhc2VzIHdpbGwgYmUgcnVuLiAi
CisgICAgICAgICAgICAgICAgICAiJ25vbmUnID09IHVzZSB0aGUgb3JkZXIgaW4gd2hpY2ggdGhl
IHRlc3RzIHdlcmUgbGlzdGVkIGVpdGhlciBpbiBhcmd1bWVudHMgb3IgdGVzdCBsaXN0LCAiCisg
ICAgICAgICAgICAgICAgICAiJ25hdHVyYWwnID09IHVzZSB0aGUgbmF0dXJhbCBvcmRlciAoZGVm
YXVsdCksICIKKyAgICAgICAgICAgICAgICAgICIncmFuZG9tJyA9PSByYW5kb21pemUgdGhlIHRl
c3Qgb3JkZXIuIikpLAogICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1ydW4tY2h1bmsi
LAogICAgICAgICAgICAgaGVscD0oIlJ1biBhIHNwZWNpZmllZCBjaHVuayAobjpsKSwgdGhlIG50
aCBvZiBsZW4gbCwgIgogICAgICAgICAgICAgICAgICAib2YgdGhlIGxheW91dCB0ZXN0cyIpKSwK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJr
aXRfdGVzdHNfaW50ZWdyYXRpb250ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c19pbnRlZ3JhdGlvbnRlc3QucHkKaW5kZXggZGUxYTIx
Y2M1Mjc0ZjZhYjk1NjIxOGU5ZDczYjY4Y2RkMmJiOTI5OS4uMmJmZTkwNGQ1YjI0YjIzZWUyMDIy
NDU1Nzk0YjYxMTVlMWRhYjcwYiAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c19pbnRlZ3JhdGlvbnRlc3QucHkKKysrIGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c19pbnRlZ3Jh
dGlvbnRlc3QucHkKQEAgLTM4OSw5ICszODksNDEgQEAgY2xhc3MgTWFpblRlc3QodW5pdHRlc3Qu
VGVzdENhc2UsIFN0cmVhbVRlc3RpbmdNaXhpbik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RW1wdHko
b3V0KQogICAgICAgICBzZWxmLmFzc2VydENvbnRhaW5zKGVyciwgJ05vIHRlc3RzIHRvIHJ1bi5c
bicpCiAKLSAgICBkZWYgdGVzdF9yYW5kb21pemVfb3JkZXIoc2VsZik6Ci0gICAgICAgICMgRklY
TUU6IHZlcmlmeSBvcmRlciB3YXMgc2h1ZmZsZWQKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBh
c3NpbmdfcnVuKFsnLS1yYW5kb21pemUtb3JkZXInXSkpCisgICAgZGVmIHRlc3RfbmF0dXJhbF9v
cmRlcihzZWxmKToKKyAgICAgICAgdGVzdHNfdG9fcnVuID0gWydwYXNzZXMvYXVkaW8uaHRtbCcs
ICdmYWlsdXJlcy9leHBlY3RlZC90ZXh0Lmh0bWwnLCAnZmFpbHVyZXMvZXhwZWN0ZWQvbWlzc2lu
Z190ZXh0Lmh0bWwnLCAncGFzc2VzL2FyZ3MuaHRtbCddCisgICAgICAgIHRlc3RzX3J1biA9IGdl
dF90ZXN0c19ydW4oWyctLW9yZGVyPW5hdHVyYWwnXSArIHRlc3RzX3RvX3J1biwgdGVzdHNfaW5j
bHVkZWQ9VHJ1ZSwgZmxhdHRlbl9iYXRjaGVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoWydmYWlsdXJlcy9leHBlY3RlZC9taXNzaW5nX3RleHQuaHRtbCcsICdmYWlsdXJlcy9leHBl
Y3RlZC90ZXh0Lmh0bWwnLCAncGFzc2VzL2FyZ3MuaHRtbCcsICdwYXNzZXMvYXVkaW8uaHRtbCdd
LCB0ZXN0c19ydW4pCisKKyAgICBkZWYgdGVzdF9uYXR1cmFsX29yZGVyX3Rlc3Rfc3BlY2lmaWVk
X211bHRpcGxlX3RpbWVzKHNlbGYpOgorICAgICAgICB0ZXN0c190b19ydW4gPSBbJ3Bhc3Nlcy9h
cmdzLmh0bWwnLCAncGFzc2VzL2F1ZGlvLmh0bWwnLCAncGFzc2VzL2F1ZGlvLmh0bWwnLCAncGFz
c2VzL2FyZ3MuaHRtbCddCisgICAgICAgIHRlc3RzX3J1biA9IGdldF90ZXN0c19ydW4oWyctLW9y
ZGVyPW5hdHVyYWwnXSArIHRlc3RzX3RvX3J1biwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgZmxhdHRl
bl9iYXRjaGVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWydwYXNzZXMvYXJncy5o
dG1sJywgJ3Bhc3Nlcy9hcmdzLmh0bWwnLCAncGFzc2VzL2F1ZGlvLmh0bWwnLCAncGFzc2VzL2F1
ZGlvLmh0bWwnXSwgdGVzdHNfcnVuKQorCisgICAgZGVmIHRlc3RfcmFuZG9tX29yZGVyKHNlbGYp
OgorICAgICAgICB0ZXN0c190b19ydW4gPSBbJ3Bhc3Nlcy9hdWRpby5odG1sJywgJ2ZhaWx1cmVz
L2V4cGVjdGVkL3RleHQuaHRtbCcsICdmYWlsdXJlcy9leHBlY3RlZC9taXNzaW5nX3RleHQuaHRt
bCcsICdwYXNzZXMvYXJncy5odG1sJ10KKyAgICAgICAgdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1
bihbJy0tb3JkZXI9cmFuZG9tJ10gKyB0ZXN0c190b19ydW4sIHRlc3RzX2luY2x1ZGVkPVRydWUs
IGZsYXR0ZW5fYmF0Y2hlcz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZCh0
ZXN0c190b19ydW4pLCBzb3J0ZWQodGVzdHNfcnVuKSkKKworICAgIGRlZiB0ZXN0X3JhbmRvbV9v
cmRlcl90ZXN0X3NwZWNpZmllZF9tdWx0aXBsZV90aW1lcyhzZWxmKToKKyAgICAgICAgdGVzdHNf
dG9fcnVuID0gWydwYXNzZXMvYXJncy5odG1sJywgJ3Bhc3Nlcy9hdWRpby5odG1sJywgJ3Bhc3Nl
cy9hdWRpby5odG1sJywgJ3Bhc3Nlcy9hcmdzLmh0bWwnXQorICAgICAgICB0ZXN0c19ydW4gPSBn
ZXRfdGVzdHNfcnVuKFsnLS1vcmRlcj1yYW5kb20nXSArIHRlc3RzX3RvX3J1biwgdGVzdHNfaW5j
bHVkZWQ9VHJ1ZSwgZmxhdHRlbl9iYXRjaGVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwodGVzdHNfcnVuLmNvdW50KCdwYXNzZXMvYXVkaW8uaHRtbCcpLCAyKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKHRlc3RzX3J1bi5jb3VudCgncGFzc2VzL2FyZ3MuaHRtbCcpLCAyKQorCisg
ICAgZGVmIHRlc3Rfbm9fb3JkZXIoc2VsZik6CisgICAgICAgIHRlc3RzX3RvX3J1biA9IFsncGFz
c2VzL2F1ZGlvLmh0bWwnLCAnZmFpbHVyZXMvZXhwZWN0ZWQvdGV4dC5odG1sJywgJ2ZhaWx1cmVz
L2V4cGVjdGVkL21pc3NpbmdfdGV4dC5odG1sJywgJ3Bhc3Nlcy9hcmdzLmh0bWwnXQorICAgICAg
ICB0ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsnLS1vcmRlcj1ub25lJ10gKyB0ZXN0c190b19y
dW4sIHRlc3RzX2luY2x1ZGVkPVRydWUsIGZsYXR0ZW5fYmF0Y2hlcz1UcnVlKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHRlc3RzX3RvX3J1biwgdGVzdHNfcnVuKQorCisgICAgZGVmIHRlc3Rf
bm9fb3JkZXJfdGVzdF9zcGVjaWZpZWRfbXVsdGlwbGVfdGltZXMoc2VsZik6CisgICAgICAgIHRl
c3RzX3RvX3J1biA9IFsncGFzc2VzL2FyZ3MuaHRtbCcsICdwYXNzZXMvYXVkaW8uaHRtbCcsICdw
YXNzZXMvYXVkaW8uaHRtbCcsICdwYXNzZXMvYXJncy5odG1sJ10KKyAgICAgICAgdGVzdHNfcnVu
ID0gZ2V0X3Rlc3RzX3J1bihbJy0tb3JkZXI9bm9uZSddICsgdGVzdHNfdG9fcnVuLCB0ZXN0c19p
bmNsdWRlZD1UcnVlLCBmbGF0dGVuX2JhdGNoZXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCh0ZXN0c190b19ydW4sIHRlc3RzX3J1bikKKworICAgIGRlZiB0ZXN0X25vX29yZGVyX3dp
dGhfZGlyZWN0b3J5X2VudHJpZXNfaW5fbmF0dXJhbF9vcmRlcihzZWxmKToKKyAgICAgICAgdGVz
dHNfdG9fcnVuID0gWydodHRwL3Rlc3RzL3NzbCcsICdwZXJmL2ZvbycsICdodHRwL3Rlc3RzL3Bh
c3NlcyddCisgICAgICAgIHRlc3RzX3J1biA9IGdldF90ZXN0c19ydW4oWyctLW9yZGVyPW5vbmUn
XSArIHRlc3RzX3RvX3J1biwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgZmxhdHRlbl9iYXRjaGVzPVRy
dWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdHNfcnVuLCBbJ2h0dHAvdGVzdHMvc3Ns
L3RleHQuaHRtbCcsICdwZXJmL2Zvby90ZXN0Lmh0bWwnLCAnaHR0cC90ZXN0cy9wYXNzZXMvaW1h
Z2UuaHRtbCcsICdodHRwL3Rlc3RzL3Bhc3Nlcy90ZXh0Lmh0bWwnXSkKIAogICAgIGRlZiB0ZXN0
X2djX2JldHdlZW5fdGVzdHMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5n
X3J1bihbJy0tZ2MtYmV0d2Vlbi10ZXN0cyddKSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWVyaWVzLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS90b29sL2NvbW1hbmRzL3F1ZXJpZXMucHkKaW5kZXggOTNlMGRmM2QzNjFjODVmODIwYWRjMzQ3
ODRiNDYxNDE1YzFkNTgzZS4uY2JkYjkwM2VlNWVlNDg3ZDYzZDU5MzM4YTQ2YmVkMzA4MDY0MzAy
YSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXJp
ZXMucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXJpZXMu
cHkKQEAgLTQ3Niw3ICs0NzYsNyBAQCBjbGFzcyBQcmludEV4cGVjdGF0aW9ucyhBYnN0cmFjdERl
Y2xhcmF0aXZlQ29tbWFuZCk6CiAgICAgICAgICAgICAgICAgcHJpbnQgZmlsZQogICAgICAgICAg
ICAgcmV0dXJuCiAKLSAgICAgICAgdGVzdHMgPSBkZWZhdWx0X3BvcnQudGVzdHMoYXJncykKKyAg
ICAgICAgdGVzdHMgPSBzZXQoZGVmYXVsdF9wb3J0LnRlc3RzKGFyZ3MpKQogICAgICAgICBmb3Ig
cG9ydF9uYW1lIGluIHBvcnRfbmFtZXM6CiAgICAgICAgICAgICBtb2RlbCA9IHNlbGYuX21vZGVs
KG9wdGlvbnMsIHBvcnRfbmFtZSwgdGVzdHMpCiAgICAgICAgICAgICB0ZXN0c190b19wcmludCA9
IHNlbGYuX2ZpbHRlcl90ZXN0cyhvcHRpb25zLCBtb2RlbCwgdGVzdHMpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>175490</attachid>
            <date>2012-11-21 11:41:10 -0800</date>
            <delta_ts>2012-11-23 09:20:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102229-20121121203857.patch</filename>
            <type>text/plain</type>
            <size>32476</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1NDEzCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYzMxNDQ1YTgxMWIzZTMyZjczYTI1MmJjYWY2MzVhZGVm
NmExNjNkZC4uZGIzMjA0YTNjZmRmMDgxMjUwYTBiZDVlYmMxNGJlNzZiZDM0Njk3MiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk2
IEBACisyMDEyLTExLTIxICBaYW4gRG9iZXJzZWsgIDx6YW5kb2JlcnNla0BnbWFpbC5jb20+CisK
KyAgICAgICAgQWRkIHRoZSAtLW9yZGVyIG9wdGlvbiB0byBOUldUCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDIyMjkKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgLS1vcmRlciBvcHRpb24gY29udHJv
bHMgaW4gd2hhdCBvcmRlciB0aGUgZ2F0aGVyZWQgdGVzdHMgd2lsbCBiZSBydW4uCisgICAgICAg
IFRoZXJlIGFyZSAzIG9wdGlvbnM6CisgICAgICAgIC0gbmF0dXJhbCwgdGhlIHRlc3RzIGFyZSBz
b3J0ZWQgaW4gbmF0dXJhbCBvcmRlciwKKyAgICAgICAgLSByYW5kb20sIHRoZSB0ZXN0cyBhcmUg
c29ydGVkIGluIHJhbmRvbSBvcmRlciwKKyAgICAgICAgLSBub25lLCB0aGUgdGVzdHMgYXJlIGtl
cHQgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgd2VyZSBzcGVjaWZpZWQgdGhyb3VnaAorICAg
ICAgICBhcmd1bWVudHMgb3IgdGhlIHRlc3QgbGlzdC4KKworICAgICAgICBUaGUgbmF0dXJhbCBv
cHRpb24gaXMgdGhlIGRlZmF1bHQgb25lIGFuZCBtYWludGFpbnMgdGhlIGN1cnJlbnQgYmVoYXZp
b3IuCisKKyAgICAgICAgVGhlIG5vbmUgb3B0aW9uIGlzIHByaW1hcmlseSBpbnRlbmRlZCB0byBi
ZSB1c2VkIHdpdGggdGhlIC0tdGVzdC1saXN0IG9wdGlvbiwKKyAgICAgICAgd2l0aCB0aGUgdGVz
dCBsaXN0IGZpbGUgZXhwZWN0ZWQgdG8gbGlzdCBzcGVjaWZpYyB0ZXN0IG5hbWVzLgorICAgICAg
ICBXaGVuIGEgZGlyZWN0b3J5IGlzIHNwZWNpZmllZCBhcyBvbmUgb2YgdGhlIHBhdGhzIGZyb20g
dW5kZXIgd2hpY2ggdGVzdHMgc2hvdWxkCisgICAgICAgIGJlIGdhdGhlcmVkIGFuZCB0aGUgbm9u
ZSBvcHRpb24gaXMgdXNlZCwgdGhhdCBwYXRoIHdpbGwgZXhwYW5kIHRvIGFsbCB0aGUgdGVzdHMK
KyAgICAgICAgdW5kZXIgaXQsIHdpdGggdGhlc2UgdGVzdHMgc29ydGVkIGluIHRoZSBuYXR1cmFs
IG9yZGVyLgorCisgICAgICAgIFVzaW5nIC0tb3JkZXI9cmFuZG9tIGR1cGxpY2F0ZWQgdGhlIGJl
aGF2aW9yIG9mIHRoZSAtLXJhbmRvbWl6ZS1vcmRlciBvcHRpb24sIHNvCisgICAgICAgIHRoZSBs
YXR0ZXIgaXMgcmVtb3ZlZC4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gaW5jb3Jwb3JhdGVz
IHRoZSBjaGFuZ2Ugd2l0aCB3aGljaCBtYWtlcyBpdCBpcyBwb3NzaWJsZSB0byBzcGVjaWZ5Cisg
ICAgICAgIGEgdGVzdCB2aWEgYXJndW1lbnRzIG9yIHRoZSB0ZXN0IGxpc3QgbXVsdGlwbGUgdGVz
dHMgYW5kIHRoZW4gaGF2ZSB0aGUgdGVzdCBydW4KKyAgICAgICAgdGhhdCBtYW55IHRpbWVzLgor
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vZmluZF9maWxlcy5weToKKyAgICAg
ICAgKGZpbmQpOiBBY2NlcHQgYW4gb3B0aW9uYWwgc29ydGluZyBrZXkgdGhhdCBpcyB1c2VkIHRv
IHNvcnQgZmlsZXMgZm91bmQgaW4gdGhlIGRpcmVjdG9yaWVzCisgICAgICAgIHRoYXQgdGhlIGdp
dmVuIHBhdGhzIHNwZWNpZnkuCisgICAgICAgIChfbm9ybWFsaXplZF9maW5kKTogQm90aCBwYXRo
cyB0aGF0IGFyZSB0aGVuIHNlYXJjaGVkIGZvciB0aGUgdGVzdHMgYW5kIHRoZSB0ZXN0cyB0aGF0
CisgICAgICAgIHdlcmUgZm91bmQgYXJlIG5vdyBrZXB0IGluIGxpc3RzLiBUaGlzIG1ha2VzIGl0
IHBvc3NpYmxlIHRvIHJ1biBhIHRlc3QgbXVsdGlwbGUgdGltZXMKKyAgICAgICAgYnkgc3BlY2lm
eWluZyBpdCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGFyZ3VtZW50cyBvciB0aGUgdGVzdCBsaXN0
IGZpbGUuCisgICAgICAgIChfbm9ybWFsaXplZF9maW5kLnNvcnRfYnlfZGlyZWN0b3J5X2tleSk6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5
b3V0X3Rlc3RfZmluZGVyLnB5OgorICAgICAgICAoTGF5b3V0VGVzdEZpbmRlci5maW5kX3Rlc3Rz
KTogS2VlcCB0aGUgcGF0aHMgd2hlcmUgd2Ugc2hvdWxkIHNlYXJjaCBmb3IgdGVzdHMgaW4gYSBs
aXN0LgorICAgICAgICAoTGF5b3V0VGVzdEZpbmRlci5za2lwX3Rlc3RzKTogU3VidHJhY3Rpbmcg
ZnJvbSBhIHNldCBvZiBwYXRocyBpcyBuZWNlc3NhcnkuCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVubmVyLnB5OgorICAg
ICAgICAoTGF5b3V0VGVzdFJ1bm5lci5fX2luaXRfXyk6IFRoZSBTaGFyZGVyIGNsYXNzIG5vIGxv
bmdlciBuZWVkcyBuZWl0aGVyIGEgdGVzdCBuYW1lIHNwbGl0CisgICAgICAgIGZ1bmN0aW9uIG5v
ciBhIHRlc3QgcGF0aCBzZXBhcmF0b3IuCisgICAgICAgIChTaGFyZGVyLl9faW5pdF9fKTogRGl0
dG8uCisgICAgICAgIChTaGFyZGVyLl9zaGFyZF9ieV9kaXJlY3RvcnkpOiBVc2UgdGhlIHNwbGl0
X3Rlc3QgbWV0aG9kIHRoYXQncyBub3cgaW4gdGhlIFBvcnQgaW50ZXJmYWNlLgorICAgICAgICAo
U2hhcmRlci5fcmVzaXplX3NoYXJkcyk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVubmVyX3VuaXR0ZXN0LnB5OgorICAg
ICAgICAoU2hhcmRlclRlc3RzLmdldF9zaGFyZHMpOiBNb2RpZnkgdGhlIFNoYWRlciBpbml0aWFs
aXppbmcgYXMgcmVxdWlyZWQuCisgICAgICAgIChTaGFyZGVyVGVzdHMudGVzdF9tdWx0aXBsZV9s
b2NrZWRfc2hhcmRzKTogVGhlIG5hdHVyYWwgc29ydGluZyBhbmQgdGVzdCBuYW1lIGtleSB1bml0
IHRlc3RzCisgICAgICAgIGFyZSBub3cgbW92ZWQgdG8gdGhlIGJhc2UgUG9ydCB1bml0IHRlc3Rz
LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21h
bmFnZXIucHk6CisgICAgICAgIChNYW5hZ2VyLl9wcmVwYXJlX2xpc3RzKTogS2VlcCB0aGUgdGVz
dCBuYW1lcyBpbiBhIGxpc3QuIE9yZGVyIHRoYXQgbGlzdCBhcyBzcGVjaWZpZWQgYnkKKyAgICAg
ICAgdGhlIG5ldyAtLW9yZGVyIG9wdGlvbi4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2Jhc2UucHk6CisgICAgICAgIChQb3J0LnRlc3RzKTogVGhpcyBtZXRo
b2Qgc2hvdWxkIG5vdyByZXR1cm4gYSBsaXN0IG9mIGFsbCB0aGUgdGVzdHMgZm91bmQgaW4gdGhl
IHNwZWNpZmllZAorICAgICAgICBwYXRocy4KKyAgICAgICAgKFBvcnQuX3JlYWxfdGVzdHMpOiBB
IGxpc3QgaXMgcmVxdWlyZWQsIHNvIG5vIGNvbnZlcnNpb24gdG8gYSBzZXQgaXMgbWFkZS4KKyAg
ICAgICAgKFBvcnQpOgorICAgICAgICAoUG9ydC50ZXN0X2tleSk6IFBsYWNlIHRoaXMgbWV0aG9k
IGhlcmUgZm9yIG5vdywgYnV0IGl0IHNob3VsZCByZWFsbHkgbW92ZSBpbnRvIGEgc2VwYXJhdGUK
KyAgICAgICAgbW9kdWxlLgorICAgICAgICAoUG9ydC5fbmF0dXJhbF9zb3J0X2tleSk6IERpdHRv
LgorICAgICAgICAoUG9ydC5fbmF0dXJhbF9zb3J0X2tleS50cnlpbnQpOgorICAgICAgICAoUG9y
dC5zcGxpdF90ZXN0KTogTWFrZSB0aGlzIG1ldGhvZCBzdGF0aWMgYXMgaXQgZG9lc24ndCByZWFs
bHkgaGF2ZSBhbnl0aGluZyB0byBkbyB3aXRoIHRoZQorICAgICAgICBQb3J0IGludGVyZmFjZS4g
RGl0dG8gYWJvdXQgdGhlIG1ldGhvZCBiZWluZyBiZXR0ZXIgc3VpdGVkIGZvciBhIGRpZmZlcmVu
dCBtb2R1bGUuCisgICAgICAgIChQb3J0Ll92aXJ0dWFsX3Rlc3RzKTogQSBsaXN0IGlzIHJlcXVp
cmVkLCBzbyB0aGUgZnVuY3Rpb24gbm93IG9wZXJhdGVzIG9uIHRoYXQgcmF0aGVyIHRoYW4KKyAg
ICAgICAgb24gYSBzZXQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9iYXNlX3VuaXR0ZXN0LnB5OgorICAgICAgICAoUG9ydFRlc3QudGVzdF9maW5kX3dpdGhf
c2tpcHBlZF9kaXJlY3Rvcmllc18yKTogQWRqdXN0IHRoZSB0ZXN0IGNhc2UgdG8gY2hlY2sgZm9y
IGFuIGVtcHR5CisgICAgICAgIGxpc3QgcmF0aGVyIHRoYW4gYW4gZW1wdHkgc2V0LgorICAgICAg
ICAoUG9ydFRlc3QudGVzdF9kb250X3JlcXVpcmVfaHR0cF9zZXJ2ZXIpOgorICAgICAgICAoTmF0
dXJhbENvbXBhcmVUZXN0KTogVGhlIG5hdHVyYWwgc29ydGluZyB1bml0IHRlc3RzIGFyZSBwbGFj
ZWQgaGVyZSBmb3Igbm93LgorICAgICAgICAoTmF0dXJhbENvbXBhcmVUZXN0LmFzc2VydF9jbXAp
OgorICAgICAgICAoTmF0dXJhbENvbXBhcmVUZXN0LnRlc3RfbmF0dXJhbF9jb21wYXJlKToKKyAg
ICAgICAgKEtleUNvbXBhcmVUZXN0KTogVGhlIHRlc3QgbmFtZSBrZXkgdW5pdCB0ZXN0cyBhcmUg
cGxhY2VkIGhlcmUgZm9yIG5vdy4KKyAgICAgICAgKEtleUNvbXBhcmVUZXN0LmFzc2VydF9jbXAp
OgorICAgICAgICAoS2V5Q29tcGFyZVRlc3QudGVzdF90ZXN0X2tleSk6CisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tb2NrX2RydC5weToKKyAgICAgICAgKE1v
Y2tEUlQucnVuKTogVGhlIHNwbGl0X3Rlc3QgbWV0aG9kIGlzIG5vdyBzdGF0aWMuCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weToKKyAg
ICAgICAgKHBhcnNlX2FyZ3MpOiBSZW1vdmUgdGhlIC0tcmFuZG9taXplLW9yZGVyIG9wdGlvbiwg
aXQncyBub3cgcG9zc2libGUgdG8gcmVwbGljYXRlIGl0cyBiZWhhdmlvcgorICAgICAgICBieSB1
c2luZyAtLW9yZGVyPXJhbmRvbS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX2ludGVncmF0aW9udGVzdC5weTogQWRkIHVuaXQgdGVzdHMg
Y292ZXJpbmcKKyAgICAgICAgdmFyaW91cyBhc3BlY3RzIG9mIHRoaXMgY2hhbmdlLgorICAgICAg
ICAoTWFpblRlc3QudGVzdF9uYXR1cmFsX29yZGVyKToKKyAgICAgICAgKE1haW5UZXN0KToKKyAg
ICAgICAgKE1haW5UZXN0LnRlc3RfbmF0dXJhbF9vcmRlcl90ZXN0X3NwZWNpZmllZF9tdWx0aXBs
ZV90aW1lcyk6CisgICAgICAgIChNYWluVGVzdC50ZXN0X3JhbmRvbV9vcmRlcik6CisgICAgICAg
IChNYWluVGVzdC50ZXN0X3JhbmRvbV9vcmRlcl90ZXN0X3NwZWNpZmllZF9tdWx0aXBsZV90aW1l
cyk6CisgICAgICAgIChNYWluVGVzdC50ZXN0X25vX29yZGVyKToKKyAgICAgICAgKE1haW5UZXN0
LnRlc3Rfbm9fb3JkZXJfdGVzdF9zcGVjaWZpZWRfbXVsdGlwbGVfdGltZXMpOgorICAgICAgICAo
TWFpblRlc3QudGVzdF9ub19vcmRlcl93aXRoX2RpcmVjdG9yeV9lbnRyaWVzX2luX25hdHVyYWxf
b3JkZXIpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWVyaWVz
LnB5OgorICAgICAgICAoUHJpbnRFeHBlY3RhdGlvbnMuZXhlY3V0ZSk6IE9wZXJhdGUgb24gYSBz
ZXQgb2YgdGVzdHMgd2hlbiBwcmludGluZyBvdXQgZXhwZWN0YXRpb25zLgorCiAyMDEyLTExLTIx
ICBUaGlhZ28gTWFyY29zIFAuIFNhbnRvcyAgPHRoaWFnby5zYW50b3NAaW50ZWwuY29tPgogCiAg
ICAgICAgIFtFRkxdIEtVUkwgdW5pdCB0ZXN0IGNyYXNoaW5nIHdoZW4gdGlsZWQgYmFja2luZyBz
dG9yZSBpcyBlbmFibGVkIG9uIFJlbGVhc2UgQm90cwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vZmluZF9maWxlcy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL2ZpbmRfZmlsZXMucHkKaW5kZXggMzJjZTRkMTA1OWZhNTc0YTdlY2Q5Yjk3YTY1YTc1
NDViYjM1NjY4OC4uYjY1ZTc3ZjlmZWZlYzcyMTlmN2I1MDI1NmMyNGYyZWExMTBlZmNjYyAxMDA2
NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vZmluZF9maWxlcy5weQorKysg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9maW5kX2ZpbGVzLnB5CkBAIC00NCw4ICs0
NCwxMCBAQCBJZiBhIGNhbGxiYWNrIGlzIHBhc3NlZCBpbiwgaXQgd2lsbCBiZSBjYWxsZWQgZm9y
IHRoZSBlYWNoIGZpbGUgYW5kIHRoZSBmaWxlCiB3aWxsIGJlIGluY2x1ZGVkIGludG8gdGhlIHJl
c3VsdCBpZiB0aGUgY2FsbGJhY2sgcmV0dXJucyBUcnVlLgogVGhlIGNhbGxiYWNrIGhhcyB0byB0
YWtlIHRocmVlIGFyZ3VtZW50czogZmlsZXN5c3RlbSwgZGlybmFtZSBhbmQgZmlsZW5hbWUuIiIi
CiAKK2ltcG9ydCBpdGVydG9vbHMKIAotZGVmIGZpbmQoZmlsZXN5c3RlbSwgYmFzZV9kaXIsIHBh
dGhzPU5vbmUsIHNraXBwZWRfZGlyZWN0b3JpZXM9Tm9uZSwgZmlsZV9maWx0ZXI9Tm9uZSk6CisK
K2RlZiBmaW5kKGZpbGVzeXN0ZW0sIGJhc2VfZGlyLCBwYXRocz1Ob25lLCBza2lwcGVkX2RpcmVj
dG9yaWVzPU5vbmUsIGZpbGVfZmlsdGVyPU5vbmUsIGRpcmVjdG9yeV9zb3J0X2tleT1Ob25lKToK
ICAgICAiIiJGaW5kcyB0aGUgc2V0IG9mIHRlc3RzIHVuZGVyIGEgZ2l2ZW4gbGlzdCBvZiBzdWIt
cGF0aHMuCiAKICAgICBBcmdzOgpAQCAtNTcsMzQgKzU5LDI3IEBAIGRlZiBmaW5kKGZpbGVzeXN0
ZW0sIGJhc2VfZGlyLCBwYXRocz1Ob25lLCBza2lwcGVkX2RpcmVjdG9yaWVzPU5vbmUsIGZpbGVf
ZmlsdGVyCiAKICAgICBwYXRocyA9IHBhdGhzIG9yIFsnKiddCiAgICAgc2tpcHBlZF9kaXJlY3Rv
cmllcyA9IHNraXBwZWRfZGlyZWN0b3JpZXMgb3Igc2V0KFsnLnN2bicsICdfc3ZuJ10pCi0gICAg
cmV0dXJuIF9ub3JtYWxpemVkX2ZpbmQoZmlsZXN5c3RlbSwgX25vcm1hbGl6ZShmaWxlc3lzdGVt
LCBiYXNlX2RpciwgcGF0aHMpLCBza2lwcGVkX2RpcmVjdG9yaWVzLCBmaWxlX2ZpbHRlcikKKyAg
ICByZXR1cm4gX25vcm1hbGl6ZWRfZmluZChmaWxlc3lzdGVtLCBfbm9ybWFsaXplKGZpbGVzeXN0
ZW0sIGJhc2VfZGlyLCBwYXRocyksIHNraXBwZWRfZGlyZWN0b3JpZXMsIGZpbGVfZmlsdGVyLCBk
aXJlY3Rvcnlfc29ydF9rZXkpCiAKIAogZGVmIF9ub3JtYWxpemUoZmlsZXN5c3RlbSwgYmFzZV9k
aXIsIHBhdGhzKToKICAgICByZXR1cm4gW2ZpbGVzeXN0ZW0ubm9ybXBhdGgoZmlsZXN5c3RlbS5q
b2luKGJhc2VfZGlyLCBwYXRoKSkgZm9yIHBhdGggaW4gcGF0aHNdCiAKIAotZGVmIF9ub3JtYWxp
emVkX2ZpbmQoZmlsZXN5c3RlbSwgcGF0aHMsIHNraXBwZWRfZGlyZWN0b3JpZXMsIGZpbGVfZmls
dGVyKToKK2RlZiBfbm9ybWFsaXplZF9maW5kKGZpbGVzeXN0ZW0sIHBhdGhzLCBza2lwcGVkX2Rp
cmVjdG9yaWVzLCBmaWxlX2ZpbHRlciwgZGlyZWN0b3J5X3NvcnRfa2V5KToKICAgICAiIiJGaW5k
cyB0aGUgc2V0IG9mIHRlc3RzIHVuZGVyIHRoZSBsaXN0IG9mIHBhdGhzLgogCiAgICAgQXJnczoK
ICAgICAgIHBhdGhzOiBhIGxpc3Qgb2YgYWJzb2x1dGUgcGF0aCBleHByZXNzaW9ucyB0byBzZWFy
Y2guCiAgICAgICAgICAgR2xvYiBwYXR0ZXJucyBhcmUgb2suCiAgICAgIiIiCi0gICAgcGF0aHNf
dG9fd2FsayA9IHNldCgpCi0KLSAgICBmb3IgcGF0aCBpbiBwYXRoczoKLSAgICAgICAgIyBJZiB0
aGVyZSdzIGFuICogaW4gdGhlIG5hbWUsIGFzc3VtZSBpdCdzIGEgZ2xvYiBwYXR0ZXJuLgotICAg
ICAgICBpZiBwYXRoLmZpbmQoJyonKSA+IC0xOgotICAgICAgICAgICAgZmlsZW5hbWVzID0gZmls
ZXN5c3RlbS5nbG9iKHBhdGgpCi0gICAgICAgICAgICBwYXRoc190b193YWxrLnVwZGF0ZShmaWxl
bmFtZXMpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwYXRoc190b193YWxrLmFkZChwYXRo
KQotCi0gICAgIyBGSVhNRTogSSdtIG5vdCBzdXJlIHRoZXJlJ3MgbXVjaCBwb2ludCBpbiB0aGlz
IGJlaW5nIGEgc2V0LiBBIGxpc3Qgd291bGQgcHJvYmFibHkgYmUgZmFzdGVyLgotICAgIGFsbF9m
aWxlcyA9IHNldCgpCi0gICAgZm9yIHBhdGggaW4gcGF0aHNfdG9fd2FsazoKLSAgICAgICAgZmls
ZXMgPSBmaWxlc3lzdGVtLmZpbGVzX3VuZGVyKHBhdGgsIHNraXBwZWRfZGlyZWN0b3JpZXMsIGZp
bGVfZmlsdGVyKQotICAgICAgICBhbGxfZmlsZXMudXBkYXRlKHNldChmaWxlcykpCiAKKyAgICBw
YXRoc190b193YWxrID0gaXRlcnRvb2xzLmNoYWluKCooZmlsZXN5c3RlbS5nbG9iKHBhdGgpIGZv
ciBwYXRoIGluIHBhdGhzKSkKKworICAgIGRlZiBzb3J0X2J5X2RpcmVjdG9yeV9rZXkoZmlsZXNf
bGlzdCk6CisgICAgICAgIGlmIGRpcmVjdG9yeV9zb3J0X2tleToKKyAgICAgICAgICAgIGZpbGVz
X2xpc3Quc29ydChrZXk9ZGlyZWN0b3J5X3NvcnRfa2V5KQorICAgICAgICByZXR1cm4gZmlsZXNf
bGlzdAorCisgICAgYWxsX2ZpbGVzID0gaXRlcnRvb2xzLmNoYWluKCooc29ydF9ieV9kaXJlY3Rv
cnlfa2V5KGZpbGVzeXN0ZW0uZmlsZXNfdW5kZXIocGF0aCwgc2tpcHBlZF9kaXJlY3Rvcmllcywg
ZmlsZV9maWx0ZXIpKSBmb3IgcGF0aCBpbiBwYXRoc190b193YWxrKSkKICAgICByZXR1cm4gYWxs
X2ZpbGVzCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9j
b250cm9sbGVycy9sYXlvdXRfdGVzdF9maW5kZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVzdF9maW5kZXIucHkKaW5kZXggNjQ0
N2M4ZmI0ODlhMTRlYmZmYTY1ODljYzQ3N2JlY2RkOWY0YWU5Zi4uNDI5YWVkZGZkODM5ZmFkODll
M2MwODkzODg1YTEyZjRjNTg5MDQ0MCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfZmluZGVyLnB5CisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0
X2ZpbmRlci5weQpAQCAtNDcsNyArNDcsNiBAQCBjbGFzcyBMYXlvdXRUZXN0RmluZGVyKG9iamVj
dCk6CiAgICAgICAgIHBhdGhzID0gc2VsZi5fc3RyaXBfdGVzdF9kaXJfcHJlZml4ZXMoYXJncykK
ICAgICAgICAgaWYgb3B0aW9ucy50ZXN0X2xpc3Q6CiAgICAgICAgICAgICBwYXRocyArPSBzZWxm
Ll9zdHJpcF90ZXN0X2Rpcl9wcmVmaXhlcyhzZWxmLl9yZWFkX3Rlc3RfbmFtZXNfZnJvbV9maWxl
KG9wdGlvbnMudGVzdF9saXN0LCBzZWxmLl9wb3J0LlRFU1RfUEFUSF9TRVBBUkFUT1IpKQotICAg
ICAgICBwYXRocyA9IHNldChwYXRocykKICAgICAgICAgdGVzdF9maWxlcyA9IHNlbGYuX3BvcnQu
dGVzdHMocGF0aHMpCiAgICAgICAgIHJldHVybiAocGF0aHMsIHRlc3RfZmlsZXMpCiAKQEAgLTEw
OCw3ICsxMDcsNyBAQCBjbGFzcyBMYXlvdXRUZXN0RmluZGVyKG9iamVjdCk6CiAgICAgICAgICAg
ICB0ZXN0c190b19za2lwID0gc2V0KCkKICAgICAgICAgZWxpZiBzZWxmLl9vcHRpb25zLnNraXBw
ZWQgIT0gJ2Fsd2F5cyc6CiAgICAgICAgICAgICAjIG1ha2Ugc3VyZSB3ZSdyZSBleHBsaWNpdGx5
IHJ1bm5pbmcgYW55IHRlc3RzIHBhc3NlZCBvbiB0aGUgY29tbWFuZCBsaW5lOyBlcXVpdmFsZW50
IHRvICdkZWZhdWx0Jy4KLSAgICAgICAgICAgIHRlc3RzX3RvX3NraXAgLT0gcGF0aHMKKyAgICAg
ICAgICAgIHRlc3RzX3RvX3NraXAgLT0gc2V0KHBhdGhzKQogCiAgICAgICAgICMgdW5sZXNzIG9m
IGNvdXJzZSB3ZSBkb24ndCB3YW50IHRvIHJ1biB0aGUgSFRUUCB0ZXN0cyA6KQogICAgICAgICBp
ZiBub3Qgc2VsZi5fb3B0aW9ucy5odHRwOgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVubmVyLnB5IGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rlc3Rf
cnVubmVyLnB5CmluZGV4IDE3Y2JlMzEyNWJkMTI5MzcwZGIxMDkzYTIyZjNjM2YxZTBmMmRhNmIu
LjhlYjBmOWRhN2UwZmUwMjNiMWY5NjMyMDNhNmViMTM2NDEzMDFmODUgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0
X3J1bm5lci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250
cm9sbGVycy9sYXlvdXRfdGVzdF9ydW5uZXIucHkKQEAgLTM3LDYgKzM3LDcgQEAgZnJvbSB3ZWJr
aXRweS5sYXlvdXRfdGVzdHMuY29udHJvbGxlcnMgaW1wb3J0IHNpbmdsZV90ZXN0X3J1bm5lcgog
ZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubW9kZWxzIGltcG9ydCB0ZXN0X2V4cGVjdGF0aW9u
cwogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubW9kZWxzIGltcG9ydCB0ZXN0X2ZhaWx1cmVz
CiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMgaW1wb3J0IHRlc3RfcmVzdWx0cwor
ZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgUG9ydAogZnJvbSB3ZWJraXRw
eS50b29sIGltcG9ydCBncmFtbWFyCiAKIApAQCAtNjgsNyArNjksNyBAQCBjbGFzcyBMYXlvdXRU
ZXN0UnVubmVyKG9iamVjdCk6CiAgICAgICAgIHNlbGYuX3Jlc3VsdHNfZGlyZWN0b3J5ID0gcmVz
dWx0c19kaXJlY3RvcnkKICAgICAgICAgc2VsZi5fZXhwZWN0YXRpb25zID0gTm9uZQogICAgICAg
ICBzZWxmLl90ZXN0X2lzX3Nsb3cgPSB0ZXN0X2lzX3Nsb3dfZm4KLSAgICAgICAgc2VsZi5fc2hh
cmRlciA9IFNoYXJkZXIoc2VsZi5fcG9ydC5zcGxpdF90ZXN0LCBzZWxmLl9wb3J0LlRFU1RfUEFU
SF9TRVBBUkFUT1IsIHNlbGYuX29wdGlvbnMubWF4X2xvY2tlZF9zaGFyZHMpCisgICAgICAgIHNl
bGYuX3NoYXJkZXIgPSBTaGFyZGVyKHNlbGYuX29wdGlvbnMubWF4X2xvY2tlZF9zaGFyZHMpCiAK
ICAgICAgICAgc2VsZi5fY3VycmVudF9yZXN1bHRfc3VtbWFyeSA9IE5vbmUKICAgICAgICAgc2Vs
Zi5fbmVlZHNfaHR0cCA9IE5vbmUKQEAgLTgwLDkgKzgxLDYgQEAgY2xhc3MgTGF5b3V0VGVzdFJ1
bm5lcihvYmplY3QpOgogICAgICAgICBzZWxmLl93b3JrZXJfc3RhdHMgPSB7fQogICAgICAgICBz
ZWxmLl9maWxlc3lzdGVtID0gc2VsZi5fcG9ydC5ob3N0LmZpbGVzeXN0ZW0KIAotICAgIGRlZiB0
ZXN0X2tleShzZWxmLCB0ZXN0X25hbWUpOgotICAgICAgICByZXR1cm4gc2VsZi5fc2hhcmRlci50
ZXN0X2tleSh0ZXN0X25hbWUpCi0KICAgICBkZWYgcnVuX3Rlc3RzKHNlbGYsIHRlc3RfaW5wdXRz
LCBleHBlY3RhdGlvbnMsIHJlc3VsdF9zdW1tYXJ5LCBudW1fd29ya2VycywgbmVlZHNfaHR0cCwg
bmVlZHNfd2Vic29ja2V0cywgcmV0cnlpbmcpOgogICAgICAgICAiIiJSZXR1cm5zIGEgdHVwbGUg
b2YgKGludGVycnVwdGVkLCBrZXlib2FyZF9pbnRlcnJ1cHRlZCwgdGhyZWFkX3RpbWluZ3MsIHRl
c3RfdGltaW5ncywgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpOgogICAgICAgICAgICAgaW50ZXJy
dXB0ZWQgaXMgd2hldGhlciB0aGUgcnVuIHdhcyBpbnRlcnJ1cHRlZApAQCAtNDc0LDkgKzQ3Miw3
IEBAIGNsYXNzIFRlc3RTaGFyZChvYmplY3QpOgogCiAKIGNsYXNzIFNoYXJkZXIob2JqZWN0KToK
LSAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdF9zcGxpdF9mbiwgdGVzdF9wYXRoX3NlcGFyYXRv
ciwgbWF4X2xvY2tlZF9zaGFyZHMpOgotICAgICAgICBzZWxmLl9zcGxpdCA9IHRlc3Rfc3BsaXRf
Zm4KLSAgICAgICAgc2VsZi5fc2VwID0gdGVzdF9wYXRoX3NlcGFyYXRvcgorICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBtYXhfbG9ja2VkX3NoYXJkcyk6CiAgICAgICAgIHNlbGYuX21heF9sb2NrZWRf
c2hhcmRzID0gbWF4X2xvY2tlZF9zaGFyZHMKIAogICAgIGRlZiBzaGFyZF90ZXN0cyhzZWxmLCB0
ZXN0X2lucHV0cywgbnVtX3dvcmtlcnMsIGZ1bGx5X3BhcmFsbGVsKToKQEAgLTU0Nyw3ICs1NDMs
NyBAQCBjbGFzcyBTaGFyZGVyKG9iamVjdCk6CiAgICAgICAgICMgRklYTUU6IEdpdmVuIHRoYXQg
dGhlIHRlc3RzIGFyZSBhbHJlYWR5IHNvcnRlZCBieSBkaXJlY3RvcnksCiAgICAgICAgICMgd2Ug
Y2FuIHByb2JhYmx5IHJld3JpdGUgdGhpcyB0byBiZSBjbGVhcmVyIGFuZCBmYXN0ZXIuCiAgICAg
ICAgIGZvciB0ZXN0X2lucHV0IGluIHRlc3RfaW5wdXRzOgotICAgICAgICAgICAgZGlyZWN0b3J5
ID0gc2VsZi5fc3BsaXQodGVzdF9pbnB1dC50ZXN0X25hbWUpWzBdCisgICAgICAgICAgICBkaXJl
Y3RvcnkgPSBQb3J0LnNwbGl0X3Rlc3QodGVzdF9pbnB1dC50ZXN0X25hbWUpWzBdCiAgICAgICAg
ICAgICB0ZXN0c19ieV9kaXIuc2V0ZGVmYXVsdChkaXJlY3RvcnksIFtdKQogICAgICAgICAgICAg
dGVzdHNfYnlfZGlyW2RpcmVjdG9yeV0uYXBwZW5kKHRlc3RfaW5wdXQpCiAKQEAgLTYwMywyOSAr
NTk5LDMgQEAgY2xhc3MgU2hhcmRlcihvYmplY3QpOgogICAgICAgICAgICAgc29tZV9zaGFyZHMs
IHJlbWFpbmluZ19zaGFyZHMgPSBzcGxpdF9hdChyZW1haW5pbmdfc2hhcmRzLCBudW1fb2xkX3Bl
cl9uZXcpCiAgICAgICAgICAgICBuZXdfc2hhcmRzLmFwcGVuZChUZXN0U2hhcmQoJyVzXyVkJyAl
IChzaGFyZF9uYW1lX3ByZWZpeCwgbGVuKG5ld19zaGFyZHMpICsgMSksIGV4dHJhY3RfYW5kX2Zs
YXR0ZW4oc29tZV9zaGFyZHMpKSkKICAgICAgICAgcmV0dXJuIG5ld19zaGFyZHMKLQotICAgIGRl
ZiB0ZXN0X2tleShzZWxmLCB0ZXN0X25hbWUpOgotICAgICAgICAiIiJUdXJucyBhIHRlc3QgbmFt
ZSBpbnRvIGEgbGlzdCB3aXRoIHR3byBzdWJsaXN0cywgdGhlIG5hdHVyYWwga2V5IG9mIHRoZQot
ICAgICAgICBkaXJuYW1lLCBhbmQgdGhlIG5hdHVyYWwga2V5IG9mIHRoZSBiYXNlbmFtZS4KLQot
ICAgICAgICBUaGlzIGNhbiBiZSB1c2VkIHdoZW4gc29ydGluZyBwYXRocyBzbyB0aGF0IGZpbGVz
IGluIGEgZGlyZWN0b3J5LgotICAgICAgICBkaXJlY3RvcnkgYXJlIGtlcHQgdG9nZXRoZXIgcmF0
aGVyIHRoYW4gYmVpbmcgbWl4ZWQgaW4gd2l0aCBmaWxlcyBpbgotICAgICAgICBzdWJkaXJlY3Rv
cmllcy4iIiIKLSAgICAgICAgZGlybmFtZSwgYmFzZW5hbWUgPSBzZWxmLl9zcGxpdCh0ZXN0X25h
bWUpCi0gICAgICAgIHJldHVybiAoc2VsZi5uYXR1cmFsX3NvcnRfa2V5KGRpcm5hbWUgKyBzZWxm
Ll9zZXApLCBzZWxmLm5hdHVyYWxfc29ydF9rZXkoYmFzZW5hbWUpKQotCi0gICAgQHN0YXRpY21l
dGhvZAotICAgIGRlZiBuYXR1cmFsX3NvcnRfa2V5KHN0cmluZ190b19zcGxpdCk6Ci0gICAgICAg
ICIiIiBUdXJucyBhIHN0cmluZyBpbnRvIGEgbGlzdCBvZiBzdHJpbmcgYW5kIG51bWJlciBjaHVu
a3MsIGkuZS4gInoyM2EiIC0+IFsieiIsIDIzLCAiYSJdCi0KLSAgICAgICAgVGhpcyBjYW4gYmUg
dXNlZCB0byBpbXBsZW1lbnQgIm5hdHVyYWwgc29ydCIgb3JkZXIuIFNlZToKLSAgICAgICAgaHR0
cDovL3d3dy5jb2Rpbmdob3Jyb3IuY29tL2Jsb2cvMjAwNy8xMi9zb3J0aW5nLWZvci1odW1hbnMt
bmF0dXJhbC1zb3J0LW9yZGVyLmh0bWwKLSAgICAgICAgaHR0cDovL25lZGJhdGNoZWxkZXIuY29t
L2Jsb2cvMjAwNzEyLmh0bWwjZTIwMDcxMjExVDA1NDk1NgotICAgICAgICAiIiIKLSAgICAgICAg
ZGVmIHRyeWludCh2YWwpOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJldHVy
biBpbnQodmFsKQotICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHZhbAotCi0gICAgICAgIHJldHVybiBbdHJ5aW50KGNodW5rKSBmb3IgY2h1bmsg
aW4gcmUuc3BsaXQoJyhcZCspJywgc3RyaW5nX3RvX3NwbGl0KV0KZGlmZiAtLWdpdCBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X3J1
bm5lcl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2Nv
bnRyb2xsZXJzL2xheW91dF90ZXN0X3J1bm5lcl91bml0dGVzdC5weQppbmRleCA1MDFmYjQzMjY0
ZDc1NDM4Y2I5M2I0YWMxNjY5NWIwOTBiYTExZjRmLi40Yjg4ZmFlMjVhN2QwOWVjNGVhOThjZmUz
Y2VlODk3Yjk1Y2IxMTIzIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVzdF9ydW5uZXJfdW5pdHRlc3QucHkKKysrIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rl
c3RfcnVubmVyX3VuaXR0ZXN0LnB5CkBAIC0yMzUsMTIgKzIzNSw3IEBAIGNsYXNzIFNoYXJkZXJU
ZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHJldHVybiBUZXN0SW5wdXQodGVzdF9m
aWxlLCByZXF1aXJlc19sb2NrPSh0ZXN0X2ZpbGUuc3RhcnRzd2l0aCgnaHR0cCcpIG9yIHRlc3Rf
ZmlsZS5zdGFydHN3aXRoKCdwZXJmJykpKQogCiAgICAgZGVmIGdldF9zaGFyZHMoc2VsZiwgbnVt
X3dvcmtlcnMsIGZ1bGx5X3BhcmFsbGVsLCB0ZXN0X2xpc3Q9Tm9uZSwgbWF4X2xvY2tlZF9zaGFy
ZHM9MSk6Ci0gICAgICAgIGRlZiBzcGxpdCh0ZXN0X25hbWUpOgotICAgICAgICAgICAgaWR4ID0g
dGVzdF9uYW1lLnJmaW5kKCcvJykKLSAgICAgICAgICAgIGlmIGlkeCAhPSAtMToKLSAgICAgICAg
ICAgICAgICByZXR1cm4gKHRlc3RfbmFtZVswOmlkeF0sIHRlc3RfbmFtZVtpZHggKyAxOl0pCi0K
LSAgICAgICAgc2VsZi5zaGFyZGVyID0gU2hhcmRlcihzcGxpdCwgJy8nLCBtYXhfbG9ja2VkX3No
YXJkcykKKyAgICAgICAgc2VsZi5zaGFyZGVyID0gU2hhcmRlcihtYXhfbG9ja2VkX3NoYXJkcykK
ICAgICAgICAgdGVzdF9saXN0ID0gdGVzdF9saXN0IG9yIHNlbGYudGVzdF9saXN0CiAgICAgICAg
IHJldHVybiBzZWxmLnNoYXJkZXIuc2hhcmRfdGVzdHMoW3NlbGYuZ2V0X3Rlc3RfaW5wdXQodGVz
dCkgZm9yIHRlc3QgaW4gdGVzdF9saXN0XSwgbnVtX3dvcmtlcnMsIGZ1bGx5X3BhcmFsbGVsKQog
CkBAIC0zMzUsNDggKzMzMCwzIEBAIGNsYXNzIFNoYXJkZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2Fz
ZSk6CiAgICAgICAgICAgICAgICAnaHR0cC90ZXN0cy93ZWJzb2NrZXQvdGVzdHMvd2Vic29ja2V0
LXByb3RvY29sLWlnbm9yZWQuaHRtbCcsCiAgICAgICAgICAgICAgICAnaHR0cC90ZXN0cy94bWxo
dHRwcmVxdWVzdC9zdXBwb3J0ZWQteG1sLWNvbnRlbnQtdHlwZXMuaHRtbCcsCiAgICAgICAgICAg
ICAgICAncGVyZi9vYmplY3Qta2V5cy5odG1sJ10pXSkKLQotCi1jbGFzcyBOYXR1cmFsQ29tcGFy
ZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiBhc3NlcnRfY21wKHNlbGYsIHgsIHks
IHJlc3VsdCk6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKFNoYXJkZXIubmF0dXJhbF9z
b3J0X2tleSh4KSwgU2hhcmRlci5uYXR1cmFsX3NvcnRfa2V5KHkpKSwgcmVzdWx0KQotCi0gICAg
ZGVmIHRlc3RfbmF0dXJhbF9jb21wYXJlKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydF9jbXAo
J2EnLCAnYScsIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0X2NtcCgnYWInLCAnYScsIDEpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0X2NtcCgnYScsICdhYicsIC0xKQotICAgICAgICBzZWxmLmFzc2VydF9j
bXAoJycsICcnLCAwKQotICAgICAgICBzZWxmLmFzc2VydF9jbXAoJycsICdhYicsIC0xKQotICAg
ICAgICBzZWxmLmFzc2VydF9jbXAoJzEnLCAnMicsIC0xKQotICAgICAgICBzZWxmLmFzc2VydF9j
bXAoJzInLCAnMScsIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2NtcCgnMScsICcxMCcsIC0xKQot
ICAgICAgICBzZWxmLmFzc2VydF9jbXAoJzInLCAnMTAnLCAtMSkKLSAgICAgICAgc2VsZi5hc3Nl
cnRfY21wKCdmb29fMS5odG1sJywgJ2Zvb18yLmh0bWwnLCAtMSkKLSAgICAgICAgc2VsZi5hc3Nl
cnRfY21wKCdmb29fMS4xLmh0bWwnLCAnZm9vXzIuaHRtbCcsIC0xKQotICAgICAgICBzZWxmLmFz
c2VydF9jbXAoJ2Zvb18xLmh0bWwnLCAnZm9vXzEwLmh0bWwnLCAtMSkKLSAgICAgICAgc2VsZi5h
c3NlcnRfY21wKCdmb29fMi5odG1sJywgJ2Zvb18xMC5odG1sJywgLTEpCi0gICAgICAgIHNlbGYu
YXNzZXJ0X2NtcCgnZm9vXzIzLmh0bWwnLCAnZm9vXzEwLmh0bWwnLCAxKQotICAgICAgICBzZWxm
LmFzc2VydF9jbXAoJ2Zvb18yMy5odG1sJywgJ2Zvb18xMDAuaHRtbCcsIC0xKQotCi0KLWNsYXNz
IEtleUNvbXBhcmVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgc2V0VXAoc2VsZik6
Ci0gICAgICAgIGRlZiBzcGxpdCh0ZXN0X25hbWUpOgotICAgICAgICAgICAgaWR4ID0gdGVzdF9u
YW1lLnJmaW5kKCcvJykKLSAgICAgICAgICAgIGlmIGlkeCAhPSAtMToKLSAgICAgICAgICAgICAg
ICByZXR1cm4gKHRlc3RfbmFtZVswOmlkeF0sIHRlc3RfbmFtZVtpZHggKyAxOl0pCi0KLSAgICAg
ICAgc2VsZi5zaGFyZGVyID0gU2hhcmRlcihzcGxpdCwgJy8nLCAxKQotCi0gICAgZGVmIGFzc2Vy
dF9jbXAoc2VsZiwgeCwgeSwgcmVzdWx0KToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAo
c2VsZi5zaGFyZGVyLnRlc3Rfa2V5KHgpLCBzZWxmLnNoYXJkZXIudGVzdF9rZXkoeSkpLCByZXN1
bHQpCi0KLSAgICBkZWYgdGVzdF90ZXN0X2tleShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRf
Y21wKCcvYScsICcvYScsIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0X2NtcCgnL2EnLCAnL2InLCAt
MSkKLSAgICAgICAgc2VsZi5hc3NlcnRfY21wKCcvYTInLCAnL2ExMCcsIC0xKQotICAgICAgICBz
ZWxmLmFzc2VydF9jbXAoJy9hMi9mb28nLCAnL2ExMC9mb28nLCAtMSkKLSAgICAgICAgc2VsZi5h
c3NlcnRfY21wKCcvYS9mb28xMScsICcvYS9mb28yJywgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRf
Y21wKCcvYWInLCAnL2EvYS9iJywgLTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2NtcCgnL2EvYS9i
JywgJy9hYicsIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2NtcCgnL2Zvby1iYXIvYmF6JywgJy9m
b28vYmF6JywgLTEpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlci5weQppbmRleCBjYzJmMGY5YjlhMGY4ZmViMjE3
YWIzNjI2MzE4NTY2MGFkMzJjMWRlLi40ZjA4M2ZlZDdjZGE5NmJjODM3ZDM3ZmRiOWRmMTkxNzdh
ZTY3NzQ2IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9j
b250cm9sbGVycy9tYW5hZ2VyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXIucHkKQEAgLTU1LDYgKzU1LDcgQEAgZnJvbSB3ZWJr
aXRweS5sYXlvdXRfdGVzdHMubW9kZWxzIGltcG9ydCB0ZXN0X2ZhaWx1cmVzCiBmcm9tIHdlYmtp
dHB5LmxheW91dF90ZXN0cy5tb2RlbHMgaW1wb3J0IHRlc3RfcmVzdWx0cwogZnJvbSB3ZWJraXRw
eS5sYXlvdXRfdGVzdHMubW9kZWxzLnRlc3RfaW5wdXQgaW1wb3J0IFRlc3RJbnB1dAogZnJvbSB3
ZWJraXRweS5sYXlvdXRfdGVzdHMubW9kZWxzLnJlc3VsdF9zdW1tYXJ5IGltcG9ydCBSZXN1bHRT
dW1tYXJ5Citmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBQb3J0CiBmcm9t
IHdlYmtpdHB5LmxheW91dF90ZXN0cy52aWV3cyBpbXBvcnQgcHJpbnRpbmcKIAogZnJvbSB3ZWJr
aXRweS50b29sIGltcG9ydCBncmFtbWFyCkBAIC0zMDUsMTQgKzMwNiwxNCBAQCBjbGFzcyBNYW5h
Z2VyKG9iamVjdCk6CiAKICAgICBkZWYgX3ByZXBhcmVfbGlzdHMoc2VsZik6CiAgICAgICAgIHRl
c3RzX3RvX3NraXAgPSBzZWxmLl9maW5kZXIuc2tpcF90ZXN0cyhzZWxmLl9wYXRocywgc2VsZi5f
dGVzdF9uYW1lcywgc2VsZi5fZXhwZWN0YXRpb25zLCBzZWxmLl9odHRwX3Rlc3RzKCkpCi0gICAg
ICAgIHNlbGYuX3Rlc3RfbmFtZXMgPSBsaXN0KHNldChzZWxmLl90ZXN0X25hbWVzKSAtIHRlc3Rz
X3RvX3NraXApCisgICAgICAgIHNlbGYuX3Rlc3RfbmFtZXMgPSBbdGVzdCBmb3IgdGVzdCBpbiBz
ZWxmLl90ZXN0X25hbWVzIGlmIHRlc3Qgbm90IGluIHRlc3RzX3RvX3NraXBdCiAKICAgICAgICAg
IyBDcmVhdGUgYSBzb3J0ZWQgbGlzdCBvZiB0ZXN0IGZpbGVzIHNvIHRoZSBzdWJzZXQgY2h1bmss
CiAgICAgICAgICMgaWYgdXNlZCwgY29udGFpbnMgYWxwaGFiZXRpY2FsbHkgY29uc2VjdXRpdmUg
dGVzdHMuCi0gICAgICAgIGlmIHNlbGYuX29wdGlvbnMucmFuZG9taXplX29yZGVyOgorICAgICAg
ICBpZiBzZWxmLl9vcHRpb25zLm9yZGVyID09ICduYXR1cmFsJzoKKyAgICAgICAgICAgIHNlbGYu
X3Rlc3RfbmFtZXMuc29ydChrZXk9UG9ydC50ZXN0X2tleSkKKyAgICAgICAgZWxpZiBzZWxmLl9v
cHRpb25zLm9yZGVyID09ICdyYW5kb20nOgogICAgICAgICAgICAgcmFuZG9tLnNodWZmbGUoc2Vs
Zi5fdGVzdF9uYW1lcykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuX3Rlc3RfbmFt
ZXMuc29ydChrZXk9c2VsZi5fcnVubmVyLnRlc3Rfa2V5KQogCiAgICAgICAgIHNlbGYuX3Rlc3Rf
bmFtZXMsIHRlc3RzX2luX290aGVyX2NodW5rcyA9IHNlbGYuX2ZpbmRlci5zcGxpdF9pbnRvX2No
dW5rcyhzZWxmLl90ZXN0X25hbWVzKQogICAgICAgICBzZWxmLl9leHBlY3RhdGlvbnMuYWRkX3Nr
aXBwZWRfdGVzdHModGVzdHNfaW5fb3RoZXJfY2h1bmtzKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5IGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CmluZGV4IGExOWFmMDk0Y2Y3NGU1YjVl
ODEwZjY2MzBlYWE1MWNjMzcwNWM3N2QuLjg3ODBiOTFhOWZjYzJkYzk0MmE4YmE0MzkyOTkzMTE3
YjVkOTU4MmYgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvYmFzZS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L2Jhc2UucHkKQEAgLTU3OCw3ICs1NzgsOSBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAg
ZGVmIHRlc3RzKHNlbGYsIHBhdGhzKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSBsaXN0IG9mIHRl
c3RzIGZvdW5kLiBCb3RoIGdlbmVyaWMgYW5kIHBsYXRmb3JtLXNwZWNpZmljIHRlc3RzIG1hdGNo
aW5nIHBhdGhzIHNob3VsZCBiZSByZXR1cm5lZC4iIiIKICAgICAgICAgZXhwYW5kZWRfcGF0aHMg
PSBzZWxmLl9leHBhbmRlZF9wYXRocyhwYXRocykKLSAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWxf
dGVzdHMoZXhwYW5kZWRfcGF0aHMpLnVuaW9uKHNlbGYuX3ZpcnR1YWxfdGVzdHMoZXhwYW5kZWRf
cGF0aHMsIHNlbGYucG9wdWxhdGVkX3ZpcnR1YWxfdGVzdF9zdWl0ZXMoKSkpCisgICAgICAgIHRl
c3RzID0gc2VsZi5fcmVhbF90ZXN0cyhleHBhbmRlZF9wYXRocykKKyAgICAgICAgdGVzdHMuZXh0
ZW5kKHNlbGYuX3ZpcnR1YWxfdGVzdHMoZXhwYW5kZWRfcGF0aHMsIHNlbGYucG9wdWxhdGVkX3Zp
cnR1YWxfdGVzdF9zdWl0ZXMoKSkpCisgICAgICAgIHJldHVybiB0ZXN0cwogCiAgICAgZGVmIF9l
eHBhbmRlZF9wYXRocyhzZWxmLCBwYXRocyk6CiAgICAgICAgIGV4cGFuZGVkX3BhdGhzID0gW10K
QEAgLTU5Niw4ICs1OTgsOCBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgZGVmIF9yZWFsX3Rl
c3RzKHNlbGYsIHBhdGhzKToKICAgICAgICAgIyBXaGVuIGNvbGxlY3RpbmcgdGVzdCBjYXNlcywg
c2tpcCB0aGVzZSBkaXJlY3RvcmllcwogICAgICAgICBza2lwcGVkX2RpcmVjdG9yaWVzID0gc2V0
KFsnLnN2bicsICdfc3ZuJywgJ3Jlc291cmNlcycsICdzY3JpcHQtdGVzdHMnLCAncmVmZXJlbmNl
JywgJ3JlZnRlc3QnXSkKLSAgICAgICAgZmlsZXMgPSBmaW5kX2ZpbGVzLmZpbmQoc2VsZi5fZmls
ZXN5c3RlbSwgc2VsZi5sYXlvdXRfdGVzdHNfZGlyKCksIHBhdGhzLCBza2lwcGVkX2RpcmVjdG9y
aWVzLCBQb3J0Ll9pc190ZXN0X2ZpbGUpCi0gICAgICAgIHJldHVybiBzZXQoW3NlbGYucmVsYXRp
dmVfdGVzdF9maWxlbmFtZShmKSBmb3IgZiBpbiBmaWxlc10pCisgICAgICAgIGZpbGVzID0gZmlu
ZF9maWxlcy5maW5kKHNlbGYuX2ZpbGVzeXN0ZW0sIHNlbGYubGF5b3V0X3Rlc3RzX2RpcigpLCBw
YXRocywgc2tpcHBlZF9kaXJlY3RvcmllcywgUG9ydC5faXNfdGVzdF9maWxlLCBQb3J0LnRlc3Rf
a2V5KQorICAgICAgICByZXR1cm4gW3NlbGYucmVsYXRpdmVfdGVzdF9maWxlbmFtZShmKSBmb3Ig
ZiBpbiBmaWxlc10KIAogICAgICMgV2hlbiBjb2xsZWN0aW5nIHRlc3QgY2FzZXMsIHdlIGluY2x1
ZGUgYW55IGZpbGUgd2l0aCB0aGVzZSBleHRlbnNpb25zLgogICAgIF9zdXBwb3J0ZWRfZmlsZV9l
eHRlbnNpb25zID0gc2V0KFsnLmh0bWwnLCAnLnNodG1sJywgJy54bWwnLCAnLnhodG1sJywgJy5w
bCcsCkBAIC02MjMsNiArNjI1LDMzIEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICBkZWYgX2lz
X3Rlc3RfZmlsZShmaWxlc3lzdGVtLCBkaXJuYW1lLCBmaWxlbmFtZSk6CiAgICAgICAgIHJldHVy
biBQb3J0Ll9oYXNfc3VwcG9ydGVkX2V4dGVuc2lvbihmaWxlc3lzdGVtLCBmaWxlbmFtZSkgYW5k
IG5vdCBQb3J0LmlzX3JlZmVyZW5jZV9odG1sX2ZpbGUoZmlsZXN5c3RlbSwgZGlybmFtZSwgZmls
ZW5hbWUpCiAKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHRlc3Rfa2V5KHRlc3RfbmFtZSk6
CisgICAgICAgICIiIlR1cm5zIGEgdGVzdCBuYW1lIGludG8gYSBsaXN0IHdpdGggdHdvIHN1Ymxp
c3RzLCB0aGUgbmF0dXJhbCBrZXkgb2YgdGhlCisgICAgICAgIGRpcm5hbWUsIGFuZCB0aGUgbmF0
dXJhbCBrZXkgb2YgdGhlIGJhc2VuYW1lLgorCisgICAgICAgIFRoaXMgY2FuIGJlIHVzZWQgd2hl
biBzb3J0aW5nIHBhdGhzIHNvIHRoYXQgZmlsZXMgaW4gYSBkaXJlY3RvcnkuCisgICAgICAgIGRp
cmVjdG9yeSBhcmUga2VwdCB0b2dldGhlciByYXRoZXIgdGhhbiBiZWluZyBtaXhlZCBpbiB3aXRo
IGZpbGVzIGluCisgICAgICAgIHN1YmRpcmVjdG9yaWVzLiIiIgorICAgICAgICBkaXJuYW1lLCBi
YXNlbmFtZSA9IFBvcnQuc3BsaXRfdGVzdCh0ZXN0X25hbWUpCisgICAgICAgIHJldHVybiAoUG9y
dC5fbmF0dXJhbF9zb3J0X2tleShkaXJuYW1lICsgUG9ydC5URVNUX1BBVEhfU0VQQVJBVE9SKSwg
UG9ydC5fbmF0dXJhbF9zb3J0X2tleShiYXNlbmFtZSkpCisKKyAgICBAc3RhdGljbWV0aG9kCisg
ICAgZGVmIF9uYXR1cmFsX3NvcnRfa2V5KHN0cmluZ190b19zcGxpdCk6CisgICAgICAgICIiIiBU
dXJucyBhIHN0cmluZyBpbnRvIGEgbGlzdCBvZiBzdHJpbmcgYW5kIG51bWJlciBjaHVua3MsIGku
ZS4gInoyM2EiIC0+IFsieiIsIDIzLCAiYSJdCisKKyAgICAgICAgVGhpcyBjYW4gYmUgdXNlZCB0
byBpbXBsZW1lbnQgIm5hdHVyYWwgc29ydCIgb3JkZXIuIFNlZToKKyAgICAgICAgaHR0cDovL3d3
dy5jb2Rpbmdob3Jyb3IuY29tL2Jsb2cvMjAwNy8xMi9zb3J0aW5nLWZvci1odW1hbnMtbmF0dXJh
bC1zb3J0LW9yZGVyLmh0bWwKKyAgICAgICAgaHR0cDovL25lZGJhdGNoZWxkZXIuY29tL2Jsb2cv
MjAwNzEyLmh0bWwjZTIwMDcxMjExVDA1NDk1NgorICAgICAgICAiIiIKKyAgICAgICAgZGVmIHRy
eWludCh2YWwpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiBpbnQo
dmFsKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgcmV0
dXJuIHZhbAorCisgICAgICAgIHJldHVybiBbdHJ5aW50KGNodW5rKSBmb3IgY2h1bmsgaW4gcmUu
c3BsaXQoJyhcZCspJywgc3RyaW5nX3RvX3NwbGl0KV0KKwogICAgIGRlZiB0ZXN0X2RpcnMoc2Vs
Zik6CiAgICAgICAgICIiIlJldHVybnMgdGhlIGxpc3Qgb2YgdG9wLWxldmVsIHRlc3QgZGlyZWN0
b3JpZXMuIiIiCiAgICAgICAgIGxheW91dF90ZXN0c19kaXIgPSBzZWxmLmxheW91dF90ZXN0c19k
aXIoKQpAQCAtNjU0LDkgKzY4MywxMCBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgICAgICMg
dmFsaWQgdGVzdCBhbmQgYnkgcHJpbnRpbmcucHkgdG8gZGV0ZXJtaW5lIGlmIGJhc2VsaW5lcyBl
eGlzdC4KICAgICAgICAgcmV0dXJuIHNlbGYudGVzdF9pc2ZpbGUodGVzdF9uYW1lKSBvciBzZWxm
LnRlc3RfaXNkaXIodGVzdF9uYW1lKQogCi0gICAgZGVmIHNwbGl0X3Rlc3Qoc2VsZiwgdGVzdF9u
YW1lKToKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHNwbGl0X3Rlc3QodGVzdF9uYW1lKToK
ICAgICAgICAgIiIiU3BsaXRzIGEgdGVzdCBuYW1lIGludG8gdGhlICdkaXJlY3RvcnknIHBhcnQg
YW5kIHRoZSAnYmFzZW5hbWUnIHBhcnQuIiIiCi0gICAgICAgIGluZGV4ID0gdGVzdF9uYW1lLnJm
aW5kKHNlbGYuVEVTVF9QQVRIX1NFUEFSQVRPUikKKyAgICAgICAgaW5kZXggPSB0ZXN0X25hbWUu
cmZpbmQoUG9ydC5URVNUX1BBVEhfU0VQQVJBVE9SKQogICAgICAgICBpZiBpbmRleCA8IDE6CiAg
ICAgICAgICAgICByZXR1cm4gKCcnLCB0ZXN0X25hbWUpCiAgICAgICAgIHJldHVybiAodGVzdF9u
YW1lWzA6aW5kZXhdLCB0ZXN0X25hbWVbaW5kZXg6XSkKQEAgLTEzMjEsMTQgKzEzNTEsMTQgQEAg
Y2xhc3MgUG9ydChvYmplY3QpOgogICAgICAgICByZXR1cm4gc3VpdGVzCiAKICAgICBkZWYgX3Zp
cnR1YWxfdGVzdHMoc2VsZiwgcGF0aHMsIHN1aXRlcyk6Ci0gICAgICAgIHZpcnR1YWxfdGVzdHMg
PSBzZXQoKQorICAgICAgICB2aXJ0dWFsX3Rlc3RzID0gbGlzdCgpCiAgICAgICAgIGZvciBzdWl0
ZSBpbiBzdWl0ZXM6CiAgICAgICAgICAgICBpZiBwYXRoczoKICAgICAgICAgICAgICAgICBmb3Ig
dGVzdCBpbiBzdWl0ZS50ZXN0czoKICAgICAgICAgICAgICAgICAgICAgaWYgYW55KHRlc3Quc3Rh
cnRzd2l0aChwKSBmb3IgcCBpbiBwYXRocyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICB2aXJ0
dWFsX3Rlc3RzLmFkZCh0ZXN0KQorICAgICAgICAgICAgICAgICAgICAgICAgdmlydHVhbF90ZXN0
cy5hcHBlbmQodGVzdCkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgdmlydHVh
bF90ZXN0cy51cGRhdGUoc2V0KHN1aXRlLnRlc3RzLmtleXMoKSkpCisgICAgICAgICAgICAgICAg
dmlydHVhbF90ZXN0cy5leHRlbmQoc3VpdGUudGVzdHMua2V5cygpKQogICAgICAgICByZXR1cm4g
dmlydHVhbF90ZXN0cwogCiAgICAgZGVmIGxvb2t1cF92aXJ0dWFsX3Rlc3RfYmFzZShzZWxmLCB0
ZXN0X25hbWUpOgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9iYXNlX3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC9iYXNlX3VuaXR0ZXN0LnB5CmluZGV4IDc3ZWYwNGEwNGQ2M2I0YzJkZmI1YTlj
NDE2OTg3MDllZGEwMDE5NzkuLmNkODhiYTI4MjA2MjFiMGM1ZDI1Y2E3YjA5ZmZkNmVmZmEyNjVi
ZDUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
YmFzZV91bml0dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L2Jhc2VfdW5pdHRlc3QucHkKQEAgLTMyNSw3ICszMjUsNyBAQCBjbGFzcyBQb3J0VGVz
dCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfZmluZF93aXRoX3NraXBwZWRfZGly
ZWN0b3JpZXNfMihzZWxmKToKICAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KHdpdGhfdGVz
dHM9VHJ1ZSkKICAgICAgICAgdGVzdHMgPSBwb3J0LnRlc3RzKFsndXNlcnNjcmlwdHMvcmVzb3Vy
Y2VzJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdHMsIHNldChbXSkpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwodGVzdHMsIFtdKQogCiAgICAgZGVmIHRlc3RfaXNfdGVzdF9maWxl
KHNlbGYpOgogICAgICAgICBmaWxlc3lzdGVtID0gTW9ja0ZpbGVTeXN0ZW0oKQpAQCAtNDU1LDUg
KzQ1NSw0MyBAQCBjbGFzcyBQb3J0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHBv
cnQgPSBzZWxmLm1ha2VfcG9ydCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydC5yZXF1
aXJlc19odHRwX3NlcnZlcigpLCBGYWxzZSkKIAorCitjbGFzcyBOYXR1cmFsQ29tcGFyZVRlc3Qo
dW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBhc3NlcnRfY21wKHNlbGYsIHgsIHksIHJlc3Vs
dCk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKFBvcnQuX25hdHVyYWxfc29ydF9rZXko
eCksIFBvcnQuX25hdHVyYWxfc29ydF9rZXkoeSkpLCByZXN1bHQpCisKKyAgICBkZWYgdGVzdF9u
YXR1cmFsX2NvbXBhcmUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0X2NtcCgnYScsICdhJywg
MCkKKyAgICAgICAgc2VsZi5hc3NlcnRfY21wKCdhYicsICdhJywgMSkKKyAgICAgICAgc2VsZi5h
c3NlcnRfY21wKCdhJywgJ2FiJywgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0X2NtcCgnJywgJycs
IDApCisgICAgICAgIHNlbGYuYXNzZXJ0X2NtcCgnJywgJ2FiJywgLTEpCisgICAgICAgIHNlbGYu
YXNzZXJ0X2NtcCgnMScsICcyJywgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0X2NtcCgnMicsICcx
JywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRfY21wKCcxJywgJzEwJywgLTEpCisgICAgICAgIHNl
bGYuYXNzZXJ0X2NtcCgnMicsICcxMCcsIC0xKQorICAgICAgICBzZWxmLmFzc2VydF9jbXAoJ2Zv
b18xLmh0bWwnLCAnZm9vXzIuaHRtbCcsIC0xKQorICAgICAgICBzZWxmLmFzc2VydF9jbXAoJ2Zv
b18xLjEuaHRtbCcsICdmb29fMi5odG1sJywgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0X2NtcCgn
Zm9vXzEuaHRtbCcsICdmb29fMTAuaHRtbCcsIC0xKQorICAgICAgICBzZWxmLmFzc2VydF9jbXAo
J2Zvb18yLmh0bWwnLCAnZm9vXzEwLmh0bWwnLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRfY21w
KCdmb29fMjMuaHRtbCcsICdmb29fMTAuaHRtbCcsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0X2Nt
cCgnZm9vXzIzLmh0bWwnLCAnZm9vXzEwMC5odG1sJywgLTEpCisKKworY2xhc3MgS2V5Q29tcGFy
ZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBhc3NlcnRfY21wKHNlbGYsIHgsIHks
IHJlc3VsdCk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKFBvcnQudGVzdF9rZXkoeCks
IFBvcnQudGVzdF9rZXkoeSkpLCByZXN1bHQpCisKKyAgICBkZWYgdGVzdF90ZXN0X2tleShzZWxm
KToKKyAgICAgICAgc2VsZi5hc3NlcnRfY21wKCcvYScsICcvYScsIDApCisgICAgICAgIHNlbGYu
YXNzZXJ0X2NtcCgnL2EnLCAnL2InLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRfY21wKCcvYTIn
LCAnL2ExMCcsIC0xKQorICAgICAgICBzZWxmLmFzc2VydF9jbXAoJy9hMi9mb28nLCAnL2ExMC9m
b28nLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRfY21wKCcvYS9mb28xMScsICcvYS9mb28yJywg
MSkKKyAgICAgICAgc2VsZi5hc3NlcnRfY21wKCcvYWInLCAnL2EvYS9iJywgLTEpCisgICAgICAg
IHNlbGYuYXNzZXJ0X2NtcCgnL2EvYS9iJywgJy9hYicsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0
X2NtcCgnL2Zvby1iYXIvYmF6JywgJy9mb28vYmF6JywgLTEpCisKKwogaWYgX19uYW1lX18gPT0g
J19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbW9ja19kcnQucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21vY2tfZHJ0LnB5CmluZGV4IGEyMTA2ZmRkOTU5
YWFjOGE3YTZjZjcwY2Q1MTI0ZDdkMzg5MjA2MzQuLjkxMzhiYmQ5NmM2NzhjNDcxNWNhNDUwYWFk
ZGEzOThjZDlkYmI0ODAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvbW9ja19kcnQucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9tb2NrX2RydC5weQpAQCAtNTAsNiArNTAsNyBAQCBpZiBzY3JpcHRfZGly
IG5vdCBpbiBzeXMucGF0aDoKICAgICBzeXMucGF0aC5hcHBlbmQoc2NyaXB0X2RpcikKIAogZnJv
bSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnN5c3RlbWhvc3QgaW1wb3J0IFN5c3RlbUhvc3QKK2Zy
b20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IFBvcnQKIGZyb20gd2Via2l0cHku
bGF5b3V0X3Rlc3RzLnBvcnQuZHJpdmVyIGltcG9ydCBEcml2ZXJJbnB1dCwgRHJpdmVyT3V0cHV0
LCBEcml2ZXJQcm94eQogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC5mYWN0b3J5IGlt
cG9ydCBQb3J0RmFjdG9yeQogCkBAIC0xODQsNyArMTg1LDcgQEAgY2xhc3MgTW9ja0RSVChvYmpl
Y3QpOgogICAgICAgICAgICAgaWYgbm90IGxpbmU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIDAK
ICAgICAgICAgICAgIGRyaXZlcl9pbnB1dCA9IHNlbGYuaW5wdXRfZnJvbV9saW5lKGxpbmUpCi0g
ICAgICAgICAgICBkaXJuYW1lLCBiYXNlbmFtZSA9IHNlbGYuX3BvcnQuc3BsaXRfdGVzdChkcml2
ZXJfaW5wdXQudGVzdF9uYW1lKQorICAgICAgICAgICAgZGlybmFtZSwgYmFzZW5hbWUgPSBQb3J0
LnNwbGl0X3Rlc3QoZHJpdmVyX2lucHV0LnRlc3RfbmFtZSkKICAgICAgICAgICAgIGlzX3JlZnRl
c3QgPSAoc2VsZi5fcG9ydC5yZWZlcmVuY2VfZmlsZXMoZHJpdmVyX2lucHV0LnRlc3RfbmFtZSkg
b3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5pc19yZWZlcmVuY2VfaHRt
bF9maWxlKHNlbGYuX3BvcnQuX2ZpbGVzeXN0ZW0sIGRpcm5hbWUsIGJhc2VuYW1lKSkKICAgICAg
ICAgICAgIG91dHB1dCA9IHNlbGYub3V0cHV0X2Zvcl90ZXN0KGRyaXZlcl9pbnB1dCwgaXNfcmVm
dGVzdCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1
bl93ZWJraXRfdGVzdHMucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9y
dW5fd2Via2l0X3Rlc3RzLnB5CmluZGV4IDJkZjU3Y2Y2ZjI3YmFkNThmNTQyZDNhNGVlNmZmOTZm
ODRhZTIzYzIuLmM1MDVjZDM5OWNhNzc1YmZlZTM4YTZlMDc2NmExODVjN2E5MTJkZWUgMTAwNzU1
Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVz
dHMucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtp
dF90ZXN0cy5weQpAQCAtMzUzLDkgKzM1MywxMSBAQCBkZWYgcGFyc2VfYXJncyhhcmdzPU5vbmUp
OgogICAgICAgICAgICAgaGVscD0iUnVuIGFsbCB0ZXN0cywgZXZlbiB0aG9zZSBtYXJrZWQgU0tJ
UCBpbiB0aGUgdGVzdCBsaXN0IChzYW1lIGFzIC0tc2tpcHBlZD1pZ25vcmUpIiksCiAgICAgICAg
IG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXRpbWUtb3V0LW1zIiwKICAgICAgICAgICAgIGhlbHA9
IlNldCB0aGUgdGltZW91dCBmb3IgZWFjaCB0ZXN0IiksCi0gICAgICAgIG9wdHBhcnNlLm1ha2Vf
b3B0aW9uKCItLXJhbmRvbWl6ZS1vcmRlciIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCi0gICAgICAg
ICAgICBkZWZhdWx0PUZhbHNlLCBoZWxwPSgiUnVuIHRlc3RzIGluIHJhbmRvbSBvcmRlciAodXNl
ZnVsICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvciB0cmFja2luZyBkb3du
IGNvcnJ1cHRpb24pIikpLAorICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1vcmRlciIs
IGFjdGlvbj0ic3RvcmUiLCBkZWZhdWx0PSJuYXR1cmFsIiwKKyAgICAgICAgICAgIGhlbHA9KCJk
ZXRlcm1pbmUgdGhlIG9yZGVyIGluIHdoaWNoIHRoZSB0ZXN0IGNhc2VzIHdpbGwgYmUgcnVuLiAi
CisgICAgICAgICAgICAgICAgICAiJ25vbmUnID09IHVzZSB0aGUgb3JkZXIgaW4gd2hpY2ggdGhl
IHRlc3RzIHdlcmUgbGlzdGVkIGVpdGhlciBpbiBhcmd1bWVudHMgb3IgdGVzdCBsaXN0LCAiCisg
ICAgICAgICAgICAgICAgICAiJ25hdHVyYWwnID09IHVzZSB0aGUgbmF0dXJhbCBvcmRlciAoZGVm
YXVsdCksICIKKyAgICAgICAgICAgICAgICAgICIncmFuZG9tJyA9PSByYW5kb21pemUgdGhlIHRl
c3Qgb3JkZXIuIikpLAogICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1ydW4tY2h1bmsi
LAogICAgICAgICAgICAgaGVscD0oIlJ1biBhIHNwZWNpZmllZCBjaHVuayAobjpsKSwgdGhlIG50
aCBvZiBsZW4gbCwgIgogICAgICAgICAgICAgICAgICAib2YgdGhlIGxheW91dCB0ZXN0cyIpKSwK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJr
aXRfdGVzdHNfaW50ZWdyYXRpb250ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c19pbnRlZ3JhdGlvbnRlc3QucHkKaW5kZXggZGUxYTIx
Y2M1Mjc0ZjZhYjk1NjIxOGU5ZDczYjY4Y2RkMmJiOTI5OS4uMmJmZTkwNGQ1YjI0YjIzZWUyMDIy
NDU1Nzk0YjYxMTVlMWRhYjcwYiAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c19pbnRlZ3JhdGlvbnRlc3QucHkKKysrIGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c19pbnRlZ3Jh
dGlvbnRlc3QucHkKQEAgLTM4OSw5ICszODksNDEgQEAgY2xhc3MgTWFpblRlc3QodW5pdHRlc3Qu
VGVzdENhc2UsIFN0cmVhbVRlc3RpbmdNaXhpbik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RW1wdHko
b3V0KQogICAgICAgICBzZWxmLmFzc2VydENvbnRhaW5zKGVyciwgJ05vIHRlc3RzIHRvIHJ1bi5c
bicpCiAKLSAgICBkZWYgdGVzdF9yYW5kb21pemVfb3JkZXIoc2VsZik6Ci0gICAgICAgICMgRklY
TUU6IHZlcmlmeSBvcmRlciB3YXMgc2h1ZmZsZWQKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBh
c3NpbmdfcnVuKFsnLS1yYW5kb21pemUtb3JkZXInXSkpCisgICAgZGVmIHRlc3RfbmF0dXJhbF9v
cmRlcihzZWxmKToKKyAgICAgICAgdGVzdHNfdG9fcnVuID0gWydwYXNzZXMvYXVkaW8uaHRtbCcs
ICdmYWlsdXJlcy9leHBlY3RlZC90ZXh0Lmh0bWwnLCAnZmFpbHVyZXMvZXhwZWN0ZWQvbWlzc2lu
Z190ZXh0Lmh0bWwnLCAncGFzc2VzL2FyZ3MuaHRtbCddCisgICAgICAgIHRlc3RzX3J1biA9IGdl
dF90ZXN0c19ydW4oWyctLW9yZGVyPW5hdHVyYWwnXSArIHRlc3RzX3RvX3J1biwgdGVzdHNfaW5j
bHVkZWQ9VHJ1ZSwgZmxhdHRlbl9iYXRjaGVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoWydmYWlsdXJlcy9leHBlY3RlZC9taXNzaW5nX3RleHQuaHRtbCcsICdmYWlsdXJlcy9leHBl
Y3RlZC90ZXh0Lmh0bWwnLCAncGFzc2VzL2FyZ3MuaHRtbCcsICdwYXNzZXMvYXVkaW8uaHRtbCdd
LCB0ZXN0c19ydW4pCisKKyAgICBkZWYgdGVzdF9uYXR1cmFsX29yZGVyX3Rlc3Rfc3BlY2lmaWVk
X211bHRpcGxlX3RpbWVzKHNlbGYpOgorICAgICAgICB0ZXN0c190b19ydW4gPSBbJ3Bhc3Nlcy9h
cmdzLmh0bWwnLCAncGFzc2VzL2F1ZGlvLmh0bWwnLCAncGFzc2VzL2F1ZGlvLmh0bWwnLCAncGFz
c2VzL2FyZ3MuaHRtbCddCisgICAgICAgIHRlc3RzX3J1biA9IGdldF90ZXN0c19ydW4oWyctLW9y
ZGVyPW5hdHVyYWwnXSArIHRlc3RzX3RvX3J1biwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgZmxhdHRl
bl9iYXRjaGVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWydwYXNzZXMvYXJncy5o
dG1sJywgJ3Bhc3Nlcy9hcmdzLmh0bWwnLCAncGFzc2VzL2F1ZGlvLmh0bWwnLCAncGFzc2VzL2F1
ZGlvLmh0bWwnXSwgdGVzdHNfcnVuKQorCisgICAgZGVmIHRlc3RfcmFuZG9tX29yZGVyKHNlbGYp
OgorICAgICAgICB0ZXN0c190b19ydW4gPSBbJ3Bhc3Nlcy9hdWRpby5odG1sJywgJ2ZhaWx1cmVz
L2V4cGVjdGVkL3RleHQuaHRtbCcsICdmYWlsdXJlcy9leHBlY3RlZC9taXNzaW5nX3RleHQuaHRt
bCcsICdwYXNzZXMvYXJncy5odG1sJ10KKyAgICAgICAgdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1
bihbJy0tb3JkZXI9cmFuZG9tJ10gKyB0ZXN0c190b19ydW4sIHRlc3RzX2luY2x1ZGVkPVRydWUs
IGZsYXR0ZW5fYmF0Y2hlcz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZCh0
ZXN0c190b19ydW4pLCBzb3J0ZWQodGVzdHNfcnVuKSkKKworICAgIGRlZiB0ZXN0X3JhbmRvbV9v
cmRlcl90ZXN0X3NwZWNpZmllZF9tdWx0aXBsZV90aW1lcyhzZWxmKToKKyAgICAgICAgdGVzdHNf
dG9fcnVuID0gWydwYXNzZXMvYXJncy5odG1sJywgJ3Bhc3Nlcy9hdWRpby5odG1sJywgJ3Bhc3Nl
cy9hdWRpby5odG1sJywgJ3Bhc3Nlcy9hcmdzLmh0bWwnXQorICAgICAgICB0ZXN0c19ydW4gPSBn
ZXRfdGVzdHNfcnVuKFsnLS1vcmRlcj1yYW5kb20nXSArIHRlc3RzX3RvX3J1biwgdGVzdHNfaW5j
bHVkZWQ9VHJ1ZSwgZmxhdHRlbl9iYXRjaGVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwodGVzdHNfcnVuLmNvdW50KCdwYXNzZXMvYXVkaW8uaHRtbCcpLCAyKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKHRlc3RzX3J1bi5jb3VudCgncGFzc2VzL2FyZ3MuaHRtbCcpLCAyKQorCisg
ICAgZGVmIHRlc3Rfbm9fb3JkZXIoc2VsZik6CisgICAgICAgIHRlc3RzX3RvX3J1biA9IFsncGFz
c2VzL2F1ZGlvLmh0bWwnLCAnZmFpbHVyZXMvZXhwZWN0ZWQvdGV4dC5odG1sJywgJ2ZhaWx1cmVz
L2V4cGVjdGVkL21pc3NpbmdfdGV4dC5odG1sJywgJ3Bhc3Nlcy9hcmdzLmh0bWwnXQorICAgICAg
ICB0ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsnLS1vcmRlcj1ub25lJ10gKyB0ZXN0c190b19y
dW4sIHRlc3RzX2luY2x1ZGVkPVRydWUsIGZsYXR0ZW5fYmF0Y2hlcz1UcnVlKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHRlc3RzX3RvX3J1biwgdGVzdHNfcnVuKQorCisgICAgZGVmIHRlc3Rf
bm9fb3JkZXJfdGVzdF9zcGVjaWZpZWRfbXVsdGlwbGVfdGltZXMoc2VsZik6CisgICAgICAgIHRl
c3RzX3RvX3J1biA9IFsncGFzc2VzL2FyZ3MuaHRtbCcsICdwYXNzZXMvYXVkaW8uaHRtbCcsICdw
YXNzZXMvYXVkaW8uaHRtbCcsICdwYXNzZXMvYXJncy5odG1sJ10KKyAgICAgICAgdGVzdHNfcnVu
ID0gZ2V0X3Rlc3RzX3J1bihbJy0tb3JkZXI9bm9uZSddICsgdGVzdHNfdG9fcnVuLCB0ZXN0c19p
bmNsdWRlZD1UcnVlLCBmbGF0dGVuX2JhdGNoZXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCh0ZXN0c190b19ydW4sIHRlc3RzX3J1bikKKworICAgIGRlZiB0ZXN0X25vX29yZGVyX3dp
dGhfZGlyZWN0b3J5X2VudHJpZXNfaW5fbmF0dXJhbF9vcmRlcihzZWxmKToKKyAgICAgICAgdGVz
dHNfdG9fcnVuID0gWydodHRwL3Rlc3RzL3NzbCcsICdwZXJmL2ZvbycsICdodHRwL3Rlc3RzL3Bh
c3NlcyddCisgICAgICAgIHRlc3RzX3J1biA9IGdldF90ZXN0c19ydW4oWyctLW9yZGVyPW5vbmUn
XSArIHRlc3RzX3RvX3J1biwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgZmxhdHRlbl9iYXRjaGVzPVRy
dWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdHNfcnVuLCBbJ2h0dHAvdGVzdHMvc3Ns
L3RleHQuaHRtbCcsICdwZXJmL2Zvby90ZXN0Lmh0bWwnLCAnaHR0cC90ZXN0cy9wYXNzZXMvaW1h
Z2UuaHRtbCcsICdodHRwL3Rlc3RzL3Bhc3Nlcy90ZXh0Lmh0bWwnXSkKIAogICAgIGRlZiB0ZXN0
X2djX2JldHdlZW5fdGVzdHMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5n
X3J1bihbJy0tZ2MtYmV0d2Vlbi10ZXN0cyddKSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWVyaWVzLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS90b29sL2NvbW1hbmRzL3F1ZXJpZXMucHkKaW5kZXggOTNlMGRmM2QzNjFjODVmODIwYWRjMzQ3
ODRiNDYxNDE1YzFkNTgzZS4uY2JkYjkwM2VlNWVlNDg3ZDYzZDU5MzM4YTQ2YmVkMzA4MDY0MzAy
YSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXJp
ZXMucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXJpZXMu
cHkKQEAgLTQ3Niw3ICs0NzYsNyBAQCBjbGFzcyBQcmludEV4cGVjdGF0aW9ucyhBYnN0cmFjdERl
Y2xhcmF0aXZlQ29tbWFuZCk6CiAgICAgICAgICAgICAgICAgcHJpbnQgZmlsZQogICAgICAgICAg
ICAgcmV0dXJuCiAKLSAgICAgICAgdGVzdHMgPSBkZWZhdWx0X3BvcnQudGVzdHMoYXJncykKKyAg
ICAgICAgdGVzdHMgPSBzZXQoZGVmYXVsdF9wb3J0LnRlc3RzKGFyZ3MpKQogICAgICAgICBmb3Ig
cG9ydF9uYW1lIGluIHBvcnRfbmFtZXM6CiAgICAgICAgICAgICBtb2RlbCA9IHNlbGYuX21vZGVs
KG9wdGlvbnMsIHBvcnRfbmFtZSwgdGVzdHMpCiAgICAgICAgICAgICB0ZXN0c190b19wcmludCA9
IHNlbGYuX2ZpbHRlcl90ZXN0cyhvcHRpb25zLCBtb2RlbCwgdGVzdHMpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>175817</attachid>
            <date>2012-11-23 09:20:39 -0800</date>
            <delta_ts>2012-11-24 09:15:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102229-20121123181822.patch</filename>
            <type>text/plain</type>
            <size>30111</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1NjE0CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNDliMTQ0MTNmYjU0MzI2OTcwM2IwYmI3NjBjNjBmNjkz
OTYzZmZiMy4uM2U1Y2JmMTNmYTc0YTE4MzQ1YmI0YmQ4ODUwYTJiODNjMzQ5NWQ1MSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkw
IEBACisyMDEyLTExLTIzICBaYW4gRG9iZXJzZWsgIDx6YW5kb2JlcnNla0BnbWFpbC5jb20+CisK
KyAgICAgICAgQWRkIHRoZSAtLW9yZGVyIG9wdGlvbiB0byBOUldUCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDIyMjkKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgLS1vcmRlciBvcHRpb24gY29udHJv
bHMgaW4gd2hhdCBvcmRlciB0aGUgZ2F0aGVyZWQgdGVzdHMgd2lsbCBiZSBydW4uCisgICAgICAg
IFRoZXJlIGFyZSAzIG9wdGlvbnM6CisgICAgICAgIC0gbmF0dXJhbCwgdGhlIHRlc3RzIGFyZSBz
b3J0ZWQgaW4gbmF0dXJhbCBvcmRlciwKKyAgICAgICAgLSByYW5kb20sIHRoZSB0ZXN0cyBhcmUg
c29ydGVkIGluIHJhbmRvbSBvcmRlciwKKyAgICAgICAgLSBub25lLCB0aGUgdGVzdHMgYXJlIGtl
cHQgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgd2VyZSBzcGVjaWZpZWQgdGhyb3VnaAorICAg
ICAgICBhcmd1bWVudHMgb3IgdGhlIHRlc3QgbGlzdC4KKworICAgICAgICBUaGUgbmF0dXJhbCBv
cHRpb24gaXMgdGhlIGRlZmF1bHQgb25lIGFuZCBtYWludGFpbnMgdGhlIGN1cnJlbnQgYmVoYXZp
b3IuCisKKyAgICAgICAgVGhlIG5vbmUgb3B0aW9uIGlzIHByaW1hcmlseSBpbnRlbmRlZCB0byBi
ZSB1c2VkIHdpdGggdGhlIC0tdGVzdC1saXN0IG9wdGlvbiwKKyAgICAgICAgd2l0aCB0aGUgdGVz
dCBsaXN0IGZpbGUgZXhwZWN0ZWQgdG8gbGlzdCBzcGVjaWZpYyB0ZXN0IG5hbWVzLgorICAgICAg
ICBXaGVuIGEgZGlyZWN0b3J5IGlzIHNwZWNpZmllZCBhcyBvbmUgb2YgdGhlIHBhdGhzIGZyb20g
dW5kZXIgd2hpY2ggdGVzdHMgc2hvdWxkCisgICAgICAgIGJlIGdhdGhlcmVkIGFuZCB0aGUgbm9u
ZSBvcHRpb24gaXMgdXNlZCwgdGhhdCBwYXRoIHdpbGwgZXhwYW5kIHRvIGFsbCB0aGUgdGVzdHMK
KyAgICAgICAgdW5kZXIgaXQsIHdpdGggdGhlc2UgdGVzdHMgc29ydGVkIGluIHRoZSBuYXR1cmFs
IG9yZGVyLgorCisgICAgICAgIFVzaW5nIC0tb3JkZXI9cmFuZG9tIGR1cGxpY2F0ZWQgdGhlIGJl
aGF2aW9yIG9mIHRoZSAtLXJhbmRvbWl6ZS1vcmRlciBvcHRpb24sIHNvCisgICAgICAgIHRoZSBs
YXR0ZXIgaXMgcmVtb3ZlZC4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gaW5jb3Jwb3JhdGVz
IHRoZSBjaGFuZ2Ugd2l0aCB3aGljaCBtYWtlcyBpdCBpcyBwb3NzaWJsZSB0byBzcGVjaWZ5Cisg
ICAgICAgIGEgdGVzdCB2aWEgYXJndW1lbnRzIG9yIHRoZSB0ZXN0IGxpc3QgbXVsdGlwbGUgdGVz
dHMgYW5kIHRoZW4gaGF2ZSB0aGUgdGVzdCBydW4KKyAgICAgICAgdGhhdCBtYW55IHRpbWVzLgor
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vZmluZF9maWxlcy5weToKKyAgICAg
ICAgKGZpbmQpOiBBY2NlcHQgYW4gb3B0aW9uYWwgc29ydGluZyBrZXkgdGhhdCBpcyB1c2VkIHRv
IHNvcnQgZmlsZXMgZm91bmQgaW4gdGhlIGRpcmVjdG9yaWVzCisgICAgICAgIHRoYXQgdGhlIGdp
dmVuIHBhdGhzIHNwZWNpZnkuCisgICAgICAgIChfbm9ybWFsaXplZF9maW5kKTogQm90aCBwYXRo
cyB0aGF0IGFyZSB0aGVuIHNlYXJjaGVkIGZvciB0aGUgdGVzdHMgYW5kIHRoZSB0ZXN0cyB0aGF0
CisgICAgICAgIHdlcmUgZm91bmQgYXJlIG5vdyBrZXB0IGluIGxpc3RzLiBUaGlzIG1ha2VzIGl0
IHBvc3NpYmxlIHRvIHJ1biBhIHRlc3QgbXVsdGlwbGUgdGltZXMKKyAgICAgICAgYnkgc3BlY2lm
eWluZyBpdCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGFyZ3VtZW50cyBvciB0aGUgdGVzdCBsaXN0
IGZpbGUuCisgICAgICAgIChfbm9ybWFsaXplZF9maW5kLnNvcnRfYnlfZGlyZWN0b3J5X2tleSk6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5
b3V0X3Rlc3RfZmluZGVyLnB5OgorICAgICAgICAoTGF5b3V0VGVzdEZpbmRlci5maW5kX3Rlc3Rz
KTogS2VlcCB0aGUgcGF0aHMgd2hlcmUgd2Ugc2hvdWxkIHNlYXJjaCBmb3IgdGVzdHMgaW4gYSBs
aXN0LgorICAgICAgICAoTGF5b3V0VGVzdEZpbmRlci5za2lwX3Rlc3RzKTogU3VidHJhY3Rpbmcg
ZnJvbSBhIHNldCBvZiBwYXRocyBpcyBuZWNlc3NhcnkuCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVubmVyLnB5OgorICAg
ICAgICAoTGF5b3V0VGVzdFJ1bm5lci5fX2luaXRfXyk6IFRoZSBTaGFyZGVyIGNsYXNzIG5vIGxv
bmdlciBuZWVkcyBhIHRlc3QgcGF0aCBzZXBhcmF0b3IuCisgICAgICAgIChTaGFyZGVyLl9faW5p
dF9fKTogRGl0dG8uCisgICAgICAgIChTaGFyZGVyLl9yZXNpemVfc2hhcmRzKToKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVzdF9y
dW5uZXJfdW5pdHRlc3QucHk6CisgICAgICAgIChTaGFyZGVyVGVzdHMuZ2V0X3NoYXJkcyk6IE1v
ZGlmeSB0aGUgU2hhZGVyIGluaXRpYWxpemluZyBhcyByZXF1aXJlZC4KKyAgICAgICAgKFNoYXJk
ZXJUZXN0cy50ZXN0X211bHRpcGxlX2xvY2tlZF9zaGFyZHMpOiBUaGUgbmF0dXJhbCBzb3J0aW5n
IGFuZCB0ZXN0IG5hbWUga2V5IHVuaXQgdGVzdHMKKyAgICAgICAgYXJlIG5vdyBtb3ZlZCB0byB0
aGUgYmFzZSBQb3J0IHVuaXQgdGVzdHMuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlci5weToKKyAgICAgICAgKE1hbmFnZXIuX3ByZXBh
cmVfbGlzdHMpOiBLZWVwIHRoZSB0ZXN0IG5hbWVzIGluIGEgbGlzdC4gT3JkZXIgdGhhdCBsaXN0
IGFzIHNwZWNpZmllZCBieQorICAgICAgICB0aGUgbmV3IC0tb3JkZXIgb3B0aW9uLgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weToKKyAgICAgICAg
KFBvcnQudGVzdHMpOiBUaGlzIG1ldGhvZCBzaG91bGQgbm93IHJldHVybiBhIGxpc3Qgb2YgYWxs
IHRoZSB0ZXN0cyBmb3VuZCBpbiB0aGUgc3BlY2lmaWVkCisgICAgICAgIHBhdGhzLgorICAgICAg
ICAoUG9ydC5fcmVhbF90ZXN0cyk6IEEgbGlzdCBpcyByZXF1aXJlZCwgc28gbm8gY29udmVyc2lv
biB0byBhIHNldCBpcyBtYWRlLgorICAgICAgICAoUG9ydCk6CisgICAgICAgIChQb3J0LnRlc3Rf
a2V5KTogUGxhY2UgdGhpcyBtZXRob2QgaGVyZSBmb3Igbm93LCBidXQgaXQgc2hvdWxkIHJlYWxs
eSBtb3ZlIGludG8gYSBzZXBhcmF0ZQorICAgICAgICBtb2R1bGUuCisgICAgICAgIChQb3J0Ll9u
YXR1cmFsX3NvcnRfa2V5KTogRGl0dG8uCisgICAgICAgIChQb3J0Ll9uYXR1cmFsX3NvcnRfa2V5
LnRyeWludCk6CisgICAgICAgIChQb3J0Ll92aXJ0dWFsX3Rlc3RzKTogQSBsaXN0IGlzIHJlcXVp
cmVkLCBzbyB0aGUgZnVuY3Rpb24gbm93IG9wZXJhdGVzIG9uIHRoYXQgcmF0aGVyIHRoYW4KKyAg
ICAgICAgb24gYSBzZXQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9iYXNlX3VuaXR0ZXN0LnB5OgorICAgICAgICAoUG9ydFRlc3QudGVzdF9maW5kX3dpdGhf
c2tpcHBlZF9kaXJlY3Rvcmllc18yKTogQWRqdXN0IHRoZSB0ZXN0IGNhc2UgdG8gY2hlY2sgZm9y
IGFuIGVtcHR5CisgICAgICAgIGxpc3QgcmF0aGVyIHRoYW4gYW4gZW1wdHkgc2V0LgorICAgICAg
ICAoUG9ydFRlc3QudGVzdF9kb250X3JlcXVpcmVfaHR0cF9zZXJ2ZXIpOgorICAgICAgICAoTmF0
dXJhbENvbXBhcmVUZXN0KTogVGhlIG5hdHVyYWwgc29ydGluZyB1bml0IHRlc3RzIGFyZSBwbGFj
ZWQgaGVyZSBmb3Igbm93LgorICAgICAgICAoTmF0dXJhbENvbXBhcmVUZXN0LmFzc2VydF9jbXAp
OgorICAgICAgICAoTmF0dXJhbENvbXBhcmVUZXN0LnRlc3RfbmF0dXJhbF9jb21wYXJlKToKKyAg
ICAgICAgKEtleUNvbXBhcmVUZXN0KTogVGhlIHRlc3QgbmFtZSBrZXkgdW5pdCB0ZXN0cyBhcmUg
cGxhY2VkIGhlcmUgZm9yIG5vdy4KKyAgICAgICAgKEtleUNvbXBhcmVUZXN0LmFzc2VydF9jbXAp
OgorICAgICAgICAoS2V5Q29tcGFyZVRlc3QudGVzdF90ZXN0X2tleSk6CisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weToKKyAgICAgICAg
KHBhcnNlX2FyZ3MpOiBSZW1vdmUgdGhlIC0tcmFuZG9taXplLW9yZGVyIG9wdGlvbiwgaXQncyBu
b3cgcG9zc2libGUgdG8gcmVwbGljYXRlIGl0cyBiZWhhdmlvcgorICAgICAgICBieSB1c2luZyAt
LW9yZGVyPXJhbmRvbS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9y
dW5fd2Via2l0X3Rlc3RzX2ludGVncmF0aW9udGVzdC5weTogQWRkIHVuaXQgdGVzdHMgY292ZXJp
bmcKKyAgICAgICAgdmFyaW91cyBhc3BlY3RzIG9mIHRoaXMgY2hhbmdlLgorICAgICAgICAoTWFp
blRlc3QudGVzdF9uYXR1cmFsX29yZGVyKToKKyAgICAgICAgKE1haW5UZXN0KToKKyAgICAgICAg
KE1haW5UZXN0LnRlc3RfbmF0dXJhbF9vcmRlcl90ZXN0X3NwZWNpZmllZF9tdWx0aXBsZV90aW1l
cyk6CisgICAgICAgIChNYWluVGVzdC50ZXN0X3JhbmRvbV9vcmRlcik6CisgICAgICAgIChNYWlu
VGVzdC50ZXN0X3JhbmRvbV9vcmRlcl90ZXN0X3NwZWNpZmllZF9tdWx0aXBsZV90aW1lcyk6Cisg
ICAgICAgIChNYWluVGVzdC50ZXN0X25vX29yZGVyKToKKyAgICAgICAgKE1haW5UZXN0LnRlc3Rf
bm9fb3JkZXJfdGVzdF9zcGVjaWZpZWRfbXVsdGlwbGVfdGltZXMpOgorICAgICAgICAoTWFpblRl
c3QudGVzdF9ub19vcmRlcl93aXRoX2RpcmVjdG9yeV9lbnRyaWVzX2luX25hdHVyYWxfb3JkZXIp
OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWVyaWVzLnB5Ogor
ICAgICAgICAoUHJpbnRFeHBlY3RhdGlvbnMuZXhlY3V0ZSk6IE9wZXJhdGUgb24gYSBzZXQgb2Yg
dGVzdHMgd2hlbiBwcmludGluZyBvdXQgZXhwZWN0YXRpb25zLgorCiAyMDEyLTExLTE2ICBZdXJ5
IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIE1lbW9yeSBpbnN0
cnVtZW50YXRpb246IGV4dHJhY3QgTWVtb3J5T2JqZWN0SW5mbyBkZWNsYXJhdGlvbiBpbnRvIGEg
c2VwYXJhdGUgZmlsZQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24v
ZmluZF9maWxlcy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2ZpbmRfZmlsZXMu
cHkKaW5kZXggMzJjZTRkMTA1OWZhNTc0YTdlY2Q5Yjk3YTY1YTc1NDViYjM1NjY4OC4uYjY1ZTc3
ZjlmZWZlYzcyMTlmN2I1MDI1NmMyNGYyZWExMTBlZmNjYyAxMDA2NDQKLS0tIGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vZmluZF9maWxlcy5weQorKysgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9maW5kX2ZpbGVzLnB5CkBAIC00NCw4ICs0NCwxMCBAQCBJZiBhIGNhbGxi
YWNrIGlzIHBhc3NlZCBpbiwgaXQgd2lsbCBiZSBjYWxsZWQgZm9yIHRoZSBlYWNoIGZpbGUgYW5k
IHRoZSBmaWxlCiB3aWxsIGJlIGluY2x1ZGVkIGludG8gdGhlIHJlc3VsdCBpZiB0aGUgY2FsbGJh
Y2sgcmV0dXJucyBUcnVlLgogVGhlIGNhbGxiYWNrIGhhcyB0byB0YWtlIHRocmVlIGFyZ3VtZW50
czogZmlsZXN5c3RlbSwgZGlybmFtZSBhbmQgZmlsZW5hbWUuIiIiCiAKK2ltcG9ydCBpdGVydG9v
bHMKIAotZGVmIGZpbmQoZmlsZXN5c3RlbSwgYmFzZV9kaXIsIHBhdGhzPU5vbmUsIHNraXBwZWRf
ZGlyZWN0b3JpZXM9Tm9uZSwgZmlsZV9maWx0ZXI9Tm9uZSk6CisKK2RlZiBmaW5kKGZpbGVzeXN0
ZW0sIGJhc2VfZGlyLCBwYXRocz1Ob25lLCBza2lwcGVkX2RpcmVjdG9yaWVzPU5vbmUsIGZpbGVf
ZmlsdGVyPU5vbmUsIGRpcmVjdG9yeV9zb3J0X2tleT1Ob25lKToKICAgICAiIiJGaW5kcyB0aGUg
c2V0IG9mIHRlc3RzIHVuZGVyIGEgZ2l2ZW4gbGlzdCBvZiBzdWItcGF0aHMuCiAKICAgICBBcmdz
OgpAQCAtNTcsMzQgKzU5LDI3IEBAIGRlZiBmaW5kKGZpbGVzeXN0ZW0sIGJhc2VfZGlyLCBwYXRo
cz1Ob25lLCBza2lwcGVkX2RpcmVjdG9yaWVzPU5vbmUsIGZpbGVfZmlsdGVyCiAKICAgICBwYXRo
cyA9IHBhdGhzIG9yIFsnKiddCiAgICAgc2tpcHBlZF9kaXJlY3RvcmllcyA9IHNraXBwZWRfZGly
ZWN0b3JpZXMgb3Igc2V0KFsnLnN2bicsICdfc3ZuJ10pCi0gICAgcmV0dXJuIF9ub3JtYWxpemVk
X2ZpbmQoZmlsZXN5c3RlbSwgX25vcm1hbGl6ZShmaWxlc3lzdGVtLCBiYXNlX2RpciwgcGF0aHMp
LCBza2lwcGVkX2RpcmVjdG9yaWVzLCBmaWxlX2ZpbHRlcikKKyAgICByZXR1cm4gX25vcm1hbGl6
ZWRfZmluZChmaWxlc3lzdGVtLCBfbm9ybWFsaXplKGZpbGVzeXN0ZW0sIGJhc2VfZGlyLCBwYXRo
cyksIHNraXBwZWRfZGlyZWN0b3JpZXMsIGZpbGVfZmlsdGVyLCBkaXJlY3Rvcnlfc29ydF9rZXkp
CiAKIAogZGVmIF9ub3JtYWxpemUoZmlsZXN5c3RlbSwgYmFzZV9kaXIsIHBhdGhzKToKICAgICBy
ZXR1cm4gW2ZpbGVzeXN0ZW0ubm9ybXBhdGgoZmlsZXN5c3RlbS5qb2luKGJhc2VfZGlyLCBwYXRo
KSkgZm9yIHBhdGggaW4gcGF0aHNdCiAKIAotZGVmIF9ub3JtYWxpemVkX2ZpbmQoZmlsZXN5c3Rl
bSwgcGF0aHMsIHNraXBwZWRfZGlyZWN0b3JpZXMsIGZpbGVfZmlsdGVyKToKK2RlZiBfbm9ybWFs
aXplZF9maW5kKGZpbGVzeXN0ZW0sIHBhdGhzLCBza2lwcGVkX2RpcmVjdG9yaWVzLCBmaWxlX2Zp
bHRlciwgZGlyZWN0b3J5X3NvcnRfa2V5KToKICAgICAiIiJGaW5kcyB0aGUgc2V0IG9mIHRlc3Rz
IHVuZGVyIHRoZSBsaXN0IG9mIHBhdGhzLgogCiAgICAgQXJnczoKICAgICAgIHBhdGhzOiBhIGxp
c3Qgb2YgYWJzb2x1dGUgcGF0aCBleHByZXNzaW9ucyB0byBzZWFyY2guCiAgICAgICAgICAgR2xv
YiBwYXR0ZXJucyBhcmUgb2suCiAgICAgIiIiCi0gICAgcGF0aHNfdG9fd2FsayA9IHNldCgpCi0K
LSAgICBmb3IgcGF0aCBpbiBwYXRoczoKLSAgICAgICAgIyBJZiB0aGVyZSdzIGFuICogaW4gdGhl
IG5hbWUsIGFzc3VtZSBpdCdzIGEgZ2xvYiBwYXR0ZXJuLgotICAgICAgICBpZiBwYXRoLmZpbmQo
JyonKSA+IC0xOgotICAgICAgICAgICAgZmlsZW5hbWVzID0gZmlsZXN5c3RlbS5nbG9iKHBhdGgp
Ci0gICAgICAgICAgICBwYXRoc190b193YWxrLnVwZGF0ZShmaWxlbmFtZXMpCi0gICAgICAgIGVs
c2U6Ci0gICAgICAgICAgICBwYXRoc190b193YWxrLmFkZChwYXRoKQotCi0gICAgIyBGSVhNRTog
SSdtIG5vdCBzdXJlIHRoZXJlJ3MgbXVjaCBwb2ludCBpbiB0aGlzIGJlaW5nIGEgc2V0LiBBIGxp
c3Qgd291bGQgcHJvYmFibHkgYmUgZmFzdGVyLgotICAgIGFsbF9maWxlcyA9IHNldCgpCi0gICAg
Zm9yIHBhdGggaW4gcGF0aHNfdG9fd2FsazoKLSAgICAgICAgZmlsZXMgPSBmaWxlc3lzdGVtLmZp
bGVzX3VuZGVyKHBhdGgsIHNraXBwZWRfZGlyZWN0b3JpZXMsIGZpbGVfZmlsdGVyKQotICAgICAg
ICBhbGxfZmlsZXMudXBkYXRlKHNldChmaWxlcykpCiAKKyAgICBwYXRoc190b193YWxrID0gaXRl
cnRvb2xzLmNoYWluKCooZmlsZXN5c3RlbS5nbG9iKHBhdGgpIGZvciBwYXRoIGluIHBhdGhzKSkK
KworICAgIGRlZiBzb3J0X2J5X2RpcmVjdG9yeV9rZXkoZmlsZXNfbGlzdCk6CisgICAgICAgIGlm
IGRpcmVjdG9yeV9zb3J0X2tleToKKyAgICAgICAgICAgIGZpbGVzX2xpc3Quc29ydChrZXk9ZGly
ZWN0b3J5X3NvcnRfa2V5KQorICAgICAgICByZXR1cm4gZmlsZXNfbGlzdAorCisgICAgYWxsX2Zp
bGVzID0gaXRlcnRvb2xzLmNoYWluKCooc29ydF9ieV9kaXJlY3Rvcnlfa2V5KGZpbGVzeXN0ZW0u
ZmlsZXNfdW5kZXIocGF0aCwgc2tpcHBlZF9kaXJlY3RvcmllcywgZmlsZV9maWx0ZXIpKSBmb3Ig
cGF0aCBpbiBwYXRoc190b193YWxrKSkKICAgICByZXR1cm4gYWxsX2ZpbGVzCmRpZmYgLS1naXQg
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9sYXlvdXRf
dGVzdF9maW5kZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250
cm9sbGVycy9sYXlvdXRfdGVzdF9maW5kZXIucHkKaW5kZXggNjQ0N2M4ZmI0ODlhMTRlYmZmYTY1
ODljYzQ3N2JlY2RkOWY0YWU5Zi4uNDI5YWVkZGZkODM5ZmFkODllM2MwODkzODg1YTEyZjRjNTg5
MDQ0MCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29u
dHJvbGxlcnMvbGF5b3V0X3Rlc3RfZmluZGVyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X2ZpbmRlci5weQpAQCAtNDcs
NyArNDcsNiBAQCBjbGFzcyBMYXlvdXRUZXN0RmluZGVyKG9iamVjdCk6CiAgICAgICAgIHBhdGhz
ID0gc2VsZi5fc3RyaXBfdGVzdF9kaXJfcHJlZml4ZXMoYXJncykKICAgICAgICAgaWYgb3B0aW9u
cy50ZXN0X2xpc3Q6CiAgICAgICAgICAgICBwYXRocyArPSBzZWxmLl9zdHJpcF90ZXN0X2Rpcl9w
cmVmaXhlcyhzZWxmLl9yZWFkX3Rlc3RfbmFtZXNfZnJvbV9maWxlKG9wdGlvbnMudGVzdF9saXN0
LCBzZWxmLl9wb3J0LlRFU1RfUEFUSF9TRVBBUkFUT1IpKQotICAgICAgICBwYXRocyA9IHNldChw
YXRocykKICAgICAgICAgdGVzdF9maWxlcyA9IHNlbGYuX3BvcnQudGVzdHMocGF0aHMpCiAgICAg
ICAgIHJldHVybiAocGF0aHMsIHRlc3RfZmlsZXMpCiAKQEAgLTEwOCw3ICsxMDcsNyBAQCBjbGFz
cyBMYXlvdXRUZXN0RmluZGVyKG9iamVjdCk6CiAgICAgICAgICAgICB0ZXN0c190b19za2lwID0g
c2V0KCkKICAgICAgICAgZWxpZiBzZWxmLl9vcHRpb25zLnNraXBwZWQgIT0gJ2Fsd2F5cyc6CiAg
ICAgICAgICAgICAjIG1ha2Ugc3VyZSB3ZSdyZSBleHBsaWNpdGx5IHJ1bm5pbmcgYW55IHRlc3Rz
IHBhc3NlZCBvbiB0aGUgY29tbWFuZCBsaW5lOyBlcXVpdmFsZW50IHRvICdkZWZhdWx0Jy4KLSAg
ICAgICAgICAgIHRlc3RzX3RvX3NraXAgLT0gcGF0aHMKKyAgICAgICAgICAgIHRlc3RzX3RvX3Nr
aXAgLT0gc2V0KHBhdGhzKQogCiAgICAgICAgICMgdW5sZXNzIG9mIGNvdXJzZSB3ZSBkb24ndCB3
YW50IHRvIHJ1biB0aGUgSFRUUCB0ZXN0cyA6KQogICAgICAgICBpZiBub3Qgc2VsZi5fb3B0aW9u
cy5odHRwOgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
Y29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVubmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVubmVyLnB5CmluZGV4IDE3
Y2JlMzEyNWJkMTI5MzcwZGIxMDkzYTIyZjNjM2YxZTBmMmRhNmIuLjU0Y2U1ZTZmZTExOTg2YmY3
NDI1ZDVjZDg0ZjljMTE1YjA2YWUwNjcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X3J1bm5lci5weQorKysgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVz
dF9ydW5uZXIucHkKQEAgLTY4LDcgKzY4LDcgQEAgY2xhc3MgTGF5b3V0VGVzdFJ1bm5lcihvYmpl
Y3QpOgogICAgICAgICBzZWxmLl9yZXN1bHRzX2RpcmVjdG9yeSA9IHJlc3VsdHNfZGlyZWN0b3J5
CiAgICAgICAgIHNlbGYuX2V4cGVjdGF0aW9ucyA9IE5vbmUKICAgICAgICAgc2VsZi5fdGVzdF9p
c19zbG93ID0gdGVzdF9pc19zbG93X2ZuCi0gICAgICAgIHNlbGYuX3NoYXJkZXIgPSBTaGFyZGVy
KHNlbGYuX3BvcnQuc3BsaXRfdGVzdCwgc2VsZi5fcG9ydC5URVNUX1BBVEhfU0VQQVJBVE9SLCBz
ZWxmLl9vcHRpb25zLm1heF9sb2NrZWRfc2hhcmRzKQorICAgICAgICBzZWxmLl9zaGFyZGVyID0g
U2hhcmRlcihzZWxmLl9wb3J0LnNwbGl0X3Rlc3QsIHNlbGYuX29wdGlvbnMubWF4X2xvY2tlZF9z
aGFyZHMpCiAKICAgICAgICAgc2VsZi5fY3VycmVudF9yZXN1bHRfc3VtbWFyeSA9IE5vbmUKICAg
ICAgICAgc2VsZi5fbmVlZHNfaHR0cCA9IE5vbmUKQEAgLTgwLDkgKzgwLDYgQEAgY2xhc3MgTGF5
b3V0VGVzdFJ1bm5lcihvYmplY3QpOgogICAgICAgICBzZWxmLl93b3JrZXJfc3RhdHMgPSB7fQog
ICAgICAgICBzZWxmLl9maWxlc3lzdGVtID0gc2VsZi5fcG9ydC5ob3N0LmZpbGVzeXN0ZW0KIAot
ICAgIGRlZiB0ZXN0X2tleShzZWxmLCB0ZXN0X25hbWUpOgotICAgICAgICByZXR1cm4gc2VsZi5f
c2hhcmRlci50ZXN0X2tleSh0ZXN0X25hbWUpCi0KICAgICBkZWYgcnVuX3Rlc3RzKHNlbGYsIHRl
c3RfaW5wdXRzLCBleHBlY3RhdGlvbnMsIHJlc3VsdF9zdW1tYXJ5LCBudW1fd29ya2VycywgbmVl
ZHNfaHR0cCwgbmVlZHNfd2Vic29ja2V0cywgcmV0cnlpbmcpOgogICAgICAgICAiIiJSZXR1cm5z
IGEgdHVwbGUgb2YgKGludGVycnVwdGVkLCBrZXlib2FyZF9pbnRlcnJ1cHRlZCwgdGhyZWFkX3Rp
bWluZ3MsIHRlc3RfdGltaW5ncywgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpOgogICAgICAgICAg
ICAgaW50ZXJydXB0ZWQgaXMgd2hldGhlciB0aGUgcnVuIHdhcyBpbnRlcnJ1cHRlZApAQCAtNDc0
LDkgKzQ3MSw4IEBAIGNsYXNzIFRlc3RTaGFyZChvYmplY3QpOgogCiAKIGNsYXNzIFNoYXJkZXIo
b2JqZWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdF9zcGxpdF9mbiwgdGVzdF9wYXRo
X3NlcGFyYXRvciwgbWF4X2xvY2tlZF9zaGFyZHMpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0
ZXN0X3NwbGl0X2ZuLCBtYXhfbG9ja2VkX3NoYXJkcyk6CiAgICAgICAgIHNlbGYuX3NwbGl0ID0g
dGVzdF9zcGxpdF9mbgotICAgICAgICBzZWxmLl9zZXAgPSB0ZXN0X3BhdGhfc2VwYXJhdG9yCiAg
ICAgICAgIHNlbGYuX21heF9sb2NrZWRfc2hhcmRzID0gbWF4X2xvY2tlZF9zaGFyZHMKIAogICAg
IGRlZiBzaGFyZF90ZXN0cyhzZWxmLCB0ZXN0X2lucHV0cywgbnVtX3dvcmtlcnMsIGZ1bGx5X3Bh
cmFsbGVsKToKQEAgLTYwMywyOSArNTk5LDMgQEAgY2xhc3MgU2hhcmRlcihvYmplY3QpOgogICAg
ICAgICAgICAgc29tZV9zaGFyZHMsIHJlbWFpbmluZ19zaGFyZHMgPSBzcGxpdF9hdChyZW1haW5p
bmdfc2hhcmRzLCBudW1fb2xkX3Blcl9uZXcpCiAgICAgICAgICAgICBuZXdfc2hhcmRzLmFwcGVu
ZChUZXN0U2hhcmQoJyVzXyVkJyAlIChzaGFyZF9uYW1lX3ByZWZpeCwgbGVuKG5ld19zaGFyZHMp
ICsgMSksIGV4dHJhY3RfYW5kX2ZsYXR0ZW4oc29tZV9zaGFyZHMpKSkKICAgICAgICAgcmV0dXJu
IG5ld19zaGFyZHMKLQotICAgIGRlZiB0ZXN0X2tleShzZWxmLCB0ZXN0X25hbWUpOgotICAgICAg
ICAiIiJUdXJucyBhIHRlc3QgbmFtZSBpbnRvIGEgbGlzdCB3aXRoIHR3byBzdWJsaXN0cywgdGhl
IG5hdHVyYWwga2V5IG9mIHRoZQotICAgICAgICBkaXJuYW1lLCBhbmQgdGhlIG5hdHVyYWwga2V5
IG9mIHRoZSBiYXNlbmFtZS4KLQotICAgICAgICBUaGlzIGNhbiBiZSB1c2VkIHdoZW4gc29ydGlu
ZyBwYXRocyBzbyB0aGF0IGZpbGVzIGluIGEgZGlyZWN0b3J5LgotICAgICAgICBkaXJlY3Rvcnkg
YXJlIGtlcHQgdG9nZXRoZXIgcmF0aGVyIHRoYW4gYmVpbmcgbWl4ZWQgaW4gd2l0aCBmaWxlcyBp
bgotICAgICAgICBzdWJkaXJlY3Rvcmllcy4iIiIKLSAgICAgICAgZGlybmFtZSwgYmFzZW5hbWUg
PSBzZWxmLl9zcGxpdCh0ZXN0X25hbWUpCi0gICAgICAgIHJldHVybiAoc2VsZi5uYXR1cmFsX3Nv
cnRfa2V5KGRpcm5hbWUgKyBzZWxmLl9zZXApLCBzZWxmLm5hdHVyYWxfc29ydF9rZXkoYmFzZW5h
bWUpKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBuYXR1cmFsX3NvcnRfa2V5KHN0cmlu
Z190b19zcGxpdCk6Ci0gICAgICAgICIiIiBUdXJucyBhIHN0cmluZyBpbnRvIGEgbGlzdCBvZiBz
dHJpbmcgYW5kIG51bWJlciBjaHVua3MsIGkuZS4gInoyM2EiIC0+IFsieiIsIDIzLCAiYSJdCi0K
LSAgICAgICAgVGhpcyBjYW4gYmUgdXNlZCB0byBpbXBsZW1lbnQgIm5hdHVyYWwgc29ydCIgb3Jk
ZXIuIFNlZToKLSAgICAgICAgaHR0cDovL3d3dy5jb2Rpbmdob3Jyb3IuY29tL2Jsb2cvMjAwNy8x
Mi9zb3J0aW5nLWZvci1odW1hbnMtbmF0dXJhbC1zb3J0LW9yZGVyLmh0bWwKLSAgICAgICAgaHR0
cDovL25lZGJhdGNoZWxkZXIuY29tL2Jsb2cvMjAwNzEyLmh0bWwjZTIwMDcxMjExVDA1NDk1Ngot
ICAgICAgICAiIiIKLSAgICAgICAgZGVmIHRyeWludCh2YWwpOgotICAgICAgICAgICAgdHJ5Ogot
ICAgICAgICAgICAgICAgIHJldHVybiBpbnQodmFsKQotICAgICAgICAgICAgZXhjZXB0IFZhbHVl
RXJyb3I6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZhbAotCi0gICAgICAgIHJldHVybiBbdHJ5
aW50KGNodW5rKSBmb3IgY2h1bmsgaW4gcmUuc3BsaXQoJyhcZCspJywgc3RyaW5nX3RvX3NwbGl0
KV0KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRy
b2xsZXJzL2xheW91dF90ZXN0X3J1bm5lcl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X3J1bm5lcl91bml0dGVz
dC5weQppbmRleCA1MDFmYjQzMjY0ZDc1NDM4Y2I5M2I0YWMxNjY5NWIwOTBiYTExZjRmLi4xMzg0
MWMxZTI3ZTM5MTk4OTU2YjlmNGRhOTAxNGY4ZWI0OGM3ZWYzIDEwMDY0NAotLS0gYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVzdF9ydW5u
ZXJfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
Y29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVubmVyX3VuaXR0ZXN0LnB5CkBAIC0zMSwxMyArMzEs
MTUgQEAKIGltcG9ydCB1bml0dGVzdAogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5ob3N0X21vY2sg
aW1wb3J0IE1vY2tIb3N0Citmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uc3lzdGVtaG9zdF9t
b2NrIGltcG9ydCBNb2NrU3lzdGVtSG9zdAogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMgaW1w
b3J0IHJ1bl93ZWJraXRfdGVzdHMKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmNvbnRyb2xs
ZXJzLmxheW91dF90ZXN0X3J1bm5lciBpbXBvcnQgTGF5b3V0VGVzdFJ1bm5lciwgU2hhcmRlciwg
VGVzdFJ1bkludGVycnVwdGVkRXhjZXB0aW9uCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5t
b2RlbHMgaW1wb3J0IHRlc3RfZXhwZWN0YXRpb25zCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0
cy5tb2RlbHMgaW1wb3J0IHRlc3RfZmFpbHVyZXMKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3Rz
Lm1vZGVscy5yZXN1bHRfc3VtbWFyeSBpbXBvcnQgUmVzdWx0U3VtbWFyeQogZnJvbSB3ZWJraXRw
eS5sYXlvdXRfdGVzdHMubW9kZWxzLnRlc3RfaW5wdXQgaW1wb3J0IFRlc3RJbnB1dAogZnJvbSB3
ZWJraXRweS5sYXlvdXRfdGVzdHMubW9kZWxzLnRlc3RfcmVzdWx0cyBpbXBvcnQgVGVzdFJlc3Vs
dAotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMuY29udHJvbGxlcnMubGF5b3V0X3Rlc3RfcnVu
bmVyIGltcG9ydCBMYXlvdXRUZXN0UnVubmVyLCBTaGFyZGVyLCBUZXN0UnVuSW50ZXJydXB0ZWRF
eGNlcHRpb24KK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQudGVzdCBpbXBvcnQgVGVz
dFBvcnQKIAogCiBUZXN0RXhwZWN0YXRpb25zID0gdGVzdF9leHBlY3RhdGlvbnMuVGVzdEV4cGVj
dGF0aW9ucwpAQCAtMjM1LDEyICsyMzcsOCBAQCBjbGFzcyBTaGFyZGVyVGVzdHModW5pdHRlc3Qu
VGVzdENhc2UpOgogICAgICAgICByZXR1cm4gVGVzdElucHV0KHRlc3RfZmlsZSwgcmVxdWlyZXNf
bG9jaz0odGVzdF9maWxlLnN0YXJ0c3dpdGgoJ2h0dHAnKSBvciB0ZXN0X2ZpbGUuc3RhcnRzd2l0
aCgncGVyZicpKSkKIAogICAgIGRlZiBnZXRfc2hhcmRzKHNlbGYsIG51bV93b3JrZXJzLCBmdWxs
eV9wYXJhbGxlbCwgdGVzdF9saXN0PU5vbmUsIG1heF9sb2NrZWRfc2hhcmRzPTEpOgotICAgICAg
ICBkZWYgc3BsaXQodGVzdF9uYW1lKToKLSAgICAgICAgICAgIGlkeCA9IHRlc3RfbmFtZS5yZmlu
ZCgnLycpCi0gICAgICAgICAgICBpZiBpZHggIT0gLTE6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
ICh0ZXN0X25hbWVbMDppZHhdLCB0ZXN0X25hbWVbaWR4ICsgMTpdKQotCi0gICAgICAgIHNlbGYu
c2hhcmRlciA9IFNoYXJkZXIoc3BsaXQsICcvJywgbWF4X2xvY2tlZF9zaGFyZHMpCisgICAgICAg
IHBvcnQgPSBUZXN0UG9ydChNb2NrU3lzdGVtSG9zdCgpKQorICAgICAgICBzZWxmLnNoYXJkZXIg
PSBTaGFyZGVyKHBvcnQuc3BsaXRfdGVzdCwgbWF4X2xvY2tlZF9zaGFyZHMpCiAgICAgICAgIHRl
c3RfbGlzdCA9IHRlc3RfbGlzdCBvciBzZWxmLnRlc3RfbGlzdAogICAgICAgICByZXR1cm4gc2Vs
Zi5zaGFyZGVyLnNoYXJkX3Rlc3RzKFtzZWxmLmdldF90ZXN0X2lucHV0KHRlc3QpIGZvciB0ZXN0
IGluIHRlc3RfbGlzdF0sIG51bV93b3JrZXJzLCBmdWxseV9wYXJhbGxlbCkKIApAQCAtMzM1LDQ4
ICszMzMsMyBAQCBjbGFzcyBTaGFyZGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAg
ICAgICAgICAgJ2h0dHAvdGVzdHMvd2Vic29ja2V0L3Rlc3RzL3dlYnNvY2tldC1wcm90b2NvbC1p
Z25vcmVkLmh0bWwnLAogICAgICAgICAgICAgICAgJ2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qv
c3VwcG9ydGVkLXhtbC1jb250ZW50LXR5cGVzLmh0bWwnLAogICAgICAgICAgICAgICAgJ3BlcmYv
b2JqZWN0LWtleXMuaHRtbCddKV0pCi0KLQotY2xhc3MgTmF0dXJhbENvbXBhcmVUZXN0KHVuaXR0
ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgYXNzZXJ0X2NtcChzZWxmLCB4LCB5LCByZXN1bHQpOgot
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtcChTaGFyZGVyLm5hdHVyYWxfc29ydF9rZXkoeCks
IFNoYXJkZXIubmF0dXJhbF9zb3J0X2tleSh5KSksIHJlc3VsdCkKLQotICAgIGRlZiB0ZXN0X25h
dHVyYWxfY29tcGFyZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRfY21wKCdhJywgJ2EnLCAw
KQotICAgICAgICBzZWxmLmFzc2VydF9jbXAoJ2FiJywgJ2EnLCAxKQotICAgICAgICBzZWxmLmFz
c2VydF9jbXAoJ2EnLCAnYWInLCAtMSkKLSAgICAgICAgc2VsZi5hc3NlcnRfY21wKCcnLCAnJywg
MCkKLSAgICAgICAgc2VsZi5hc3NlcnRfY21wKCcnLCAnYWInLCAtMSkKLSAgICAgICAgc2VsZi5h
c3NlcnRfY21wKCcxJywgJzInLCAtMSkKLSAgICAgICAgc2VsZi5hc3NlcnRfY21wKCcyJywgJzEn
LCAxKQotICAgICAgICBzZWxmLmFzc2VydF9jbXAoJzEnLCAnMTAnLCAtMSkKLSAgICAgICAgc2Vs
Zi5hc3NlcnRfY21wKCcyJywgJzEwJywgLTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2NtcCgnZm9v
XzEuaHRtbCcsICdmb29fMi5odG1sJywgLTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2NtcCgnZm9v
XzEuMS5odG1sJywgJ2Zvb18yLmh0bWwnLCAtMSkKLSAgICAgICAgc2VsZi5hc3NlcnRfY21wKCdm
b29fMS5odG1sJywgJ2Zvb18xMC5odG1sJywgLTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2NtcCgn
Zm9vXzIuaHRtbCcsICdmb29fMTAuaHRtbCcsIC0xKQotICAgICAgICBzZWxmLmFzc2VydF9jbXAo
J2Zvb18yMy5odG1sJywgJ2Zvb18xMC5odG1sJywgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRfY21w
KCdmb29fMjMuaHRtbCcsICdmb29fMTAwLmh0bWwnLCAtMSkKLQotCi1jbGFzcyBLZXlDb21wYXJl
VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBk
ZWYgc3BsaXQodGVzdF9uYW1lKToKLSAgICAgICAgICAgIGlkeCA9IHRlc3RfbmFtZS5yZmluZCgn
LycpCi0gICAgICAgICAgICBpZiBpZHggIT0gLTE6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICh0
ZXN0X25hbWVbMDppZHhdLCB0ZXN0X25hbWVbaWR4ICsgMTpdKQotCi0gICAgICAgIHNlbGYuc2hh
cmRlciA9IFNoYXJkZXIoc3BsaXQsICcvJywgMSkKLQotICAgIGRlZiBhc3NlcnRfY21wKHNlbGYs
IHgsIHksIHJlc3VsdCk6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21wKHNlbGYuc2hhcmRl
ci50ZXN0X2tleSh4KSwgc2VsZi5zaGFyZGVyLnRlc3Rfa2V5KHkpKSwgcmVzdWx0KQotCi0gICAg
ZGVmIHRlc3RfdGVzdF9rZXkoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0X2NtcCgnL2EnLCAn
L2EnLCAwKQotICAgICAgICBzZWxmLmFzc2VydF9jbXAoJy9hJywgJy9iJywgLTEpCi0gICAgICAg
IHNlbGYuYXNzZXJ0X2NtcCgnL2EyJywgJy9hMTAnLCAtMSkKLSAgICAgICAgc2VsZi5hc3NlcnRf
Y21wKCcvYTIvZm9vJywgJy9hMTAvZm9vJywgLTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2NtcCgn
L2EvZm9vMTEnLCAnL2EvZm9vMicsIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0X2NtcCgnL2FiJywg
Jy9hL2EvYicsIC0xKQotICAgICAgICBzZWxmLmFzc2VydF9jbXAoJy9hL2EvYicsICcvYWInLCAx
KQotICAgICAgICBzZWxmLmFzc2VydF9jbXAoJy9mb28tYmFyL2JheicsICcvZm9vL2JheicsIC0x
KQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJv
bGxlcnMvbWFuYWdlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2Nv
bnRyb2xsZXJzL21hbmFnZXIucHkKaW5kZXggY2MyZjBmOWI5YTBmOGZlYjIxN2FiMzYyNjMxODU2
NjBhZDMyYzFkZS4uNTk4NmQ1Mzk2MzIxMWMzNGJlMzEzZDRlMmZkNDZhNTQ5MzQzNTczYSAxMDA2
NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMv
bWFuYWdlci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250
cm9sbGVycy9tYW5hZ2VyLnB5CkBAIC0zMDUsMTQgKzMwNSwxNCBAQCBjbGFzcyBNYW5hZ2VyKG9i
amVjdCk6CiAKICAgICBkZWYgX3ByZXBhcmVfbGlzdHMoc2VsZik6CiAgICAgICAgIHRlc3RzX3Rv
X3NraXAgPSBzZWxmLl9maW5kZXIuc2tpcF90ZXN0cyhzZWxmLl9wYXRocywgc2VsZi5fdGVzdF9u
YW1lcywgc2VsZi5fZXhwZWN0YXRpb25zLCBzZWxmLl9odHRwX3Rlc3RzKCkpCi0gICAgICAgIHNl
bGYuX3Rlc3RfbmFtZXMgPSBsaXN0KHNldChzZWxmLl90ZXN0X25hbWVzKSAtIHRlc3RzX3RvX3Nr
aXApCisgICAgICAgIHNlbGYuX3Rlc3RfbmFtZXMgPSBbdGVzdCBmb3IgdGVzdCBpbiBzZWxmLl90
ZXN0X25hbWVzIGlmIHRlc3Qgbm90IGluIHRlc3RzX3RvX3NraXBdCiAKICAgICAgICAgIyBDcmVh
dGUgYSBzb3J0ZWQgbGlzdCBvZiB0ZXN0IGZpbGVzIHNvIHRoZSBzdWJzZXQgY2h1bmssCiAgICAg
ICAgICMgaWYgdXNlZCwgY29udGFpbnMgYWxwaGFiZXRpY2FsbHkgY29uc2VjdXRpdmUgdGVzdHMu
Ci0gICAgICAgIGlmIHNlbGYuX29wdGlvbnMucmFuZG9taXplX29yZGVyOgorICAgICAgICBpZiBz
ZWxmLl9vcHRpb25zLm9yZGVyID09ICduYXR1cmFsJzoKKyAgICAgICAgICAgIHNlbGYuX3Rlc3Rf
bmFtZXMuc29ydChrZXk9c2VsZi5fcG9ydC50ZXN0X2tleSkKKyAgICAgICAgZWxpZiBzZWxmLl9v
cHRpb25zLm9yZGVyID09ICdyYW5kb20nOgogICAgICAgICAgICAgcmFuZG9tLnNodWZmbGUoc2Vs
Zi5fdGVzdF9uYW1lcykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuX3Rlc3RfbmFt
ZXMuc29ydChrZXk9c2VsZi5fcnVubmVyLnRlc3Rfa2V5KQogCiAgICAgICAgIHNlbGYuX3Rlc3Rf
bmFtZXMsIHRlc3RzX2luX290aGVyX2NodW5rcyA9IHNlbGYuX2ZpbmRlci5zcGxpdF9pbnRvX2No
dW5rcyhzZWxmLl90ZXN0X25hbWVzKQogICAgICAgICBzZWxmLl9leHBlY3RhdGlvbnMuYWRkX3Nr
aXBwZWRfdGVzdHModGVzdHNfaW5fb3RoZXJfY2h1bmtzKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5IGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CmluZGV4IGExOWFmMDk0Y2Y3NGU1YjVl
ODEwZjY2MzBlYWE1MWNjMzcwNWM3N2QuLjhjNDU3OGRiZmE3YzM4MzJiZjViNzk3ODA0MDExNDU5
MmRhMmRiYTkgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvYmFzZS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L2Jhc2UucHkKQEAgLTU3OCw3ICs1NzgsOSBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAg
ZGVmIHRlc3RzKHNlbGYsIHBhdGhzKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSBsaXN0IG9mIHRl
c3RzIGZvdW5kLiBCb3RoIGdlbmVyaWMgYW5kIHBsYXRmb3JtLXNwZWNpZmljIHRlc3RzIG1hdGNo
aW5nIHBhdGhzIHNob3VsZCBiZSByZXR1cm5lZC4iIiIKICAgICAgICAgZXhwYW5kZWRfcGF0aHMg
PSBzZWxmLl9leHBhbmRlZF9wYXRocyhwYXRocykKLSAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWxf
dGVzdHMoZXhwYW5kZWRfcGF0aHMpLnVuaW9uKHNlbGYuX3ZpcnR1YWxfdGVzdHMoZXhwYW5kZWRf
cGF0aHMsIHNlbGYucG9wdWxhdGVkX3ZpcnR1YWxfdGVzdF9zdWl0ZXMoKSkpCisgICAgICAgIHRl
c3RzID0gc2VsZi5fcmVhbF90ZXN0cyhleHBhbmRlZF9wYXRocykKKyAgICAgICAgdGVzdHMuZXh0
ZW5kKHNlbGYuX3ZpcnR1YWxfdGVzdHMoZXhwYW5kZWRfcGF0aHMsIHNlbGYucG9wdWxhdGVkX3Zp
cnR1YWxfdGVzdF9zdWl0ZXMoKSkpCisgICAgICAgIHJldHVybiB0ZXN0cwogCiAgICAgZGVmIF9l
eHBhbmRlZF9wYXRocyhzZWxmLCBwYXRocyk6CiAgICAgICAgIGV4cGFuZGVkX3BhdGhzID0gW10K
QEAgLTU5Niw4ICs1OTgsOCBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgZGVmIF9yZWFsX3Rl
c3RzKHNlbGYsIHBhdGhzKToKICAgICAgICAgIyBXaGVuIGNvbGxlY3RpbmcgdGVzdCBjYXNlcywg
c2tpcCB0aGVzZSBkaXJlY3RvcmllcwogICAgICAgICBza2lwcGVkX2RpcmVjdG9yaWVzID0gc2V0
KFsnLnN2bicsICdfc3ZuJywgJ3Jlc291cmNlcycsICdzY3JpcHQtdGVzdHMnLCAncmVmZXJlbmNl
JywgJ3JlZnRlc3QnXSkKLSAgICAgICAgZmlsZXMgPSBmaW5kX2ZpbGVzLmZpbmQoc2VsZi5fZmls
ZXN5c3RlbSwgc2VsZi5sYXlvdXRfdGVzdHNfZGlyKCksIHBhdGhzLCBza2lwcGVkX2RpcmVjdG9y
aWVzLCBQb3J0Ll9pc190ZXN0X2ZpbGUpCi0gICAgICAgIHJldHVybiBzZXQoW3NlbGYucmVsYXRp
dmVfdGVzdF9maWxlbmFtZShmKSBmb3IgZiBpbiBmaWxlc10pCisgICAgICAgIGZpbGVzID0gZmlu
ZF9maWxlcy5maW5kKHNlbGYuX2ZpbGVzeXN0ZW0sIHNlbGYubGF5b3V0X3Rlc3RzX2RpcigpLCBw
YXRocywgc2tpcHBlZF9kaXJlY3RvcmllcywgUG9ydC5faXNfdGVzdF9maWxlLCBzZWxmLnRlc3Rf
a2V5KQorICAgICAgICByZXR1cm4gW3NlbGYucmVsYXRpdmVfdGVzdF9maWxlbmFtZShmKSBmb3Ig
ZiBpbiBmaWxlc10KIAogICAgICMgV2hlbiBjb2xsZWN0aW5nIHRlc3QgY2FzZXMsIHdlIGluY2x1
ZGUgYW55IGZpbGUgd2l0aCB0aGVzZSBleHRlbnNpb25zLgogICAgIF9zdXBwb3J0ZWRfZmlsZV9l
eHRlbnNpb25zID0gc2V0KFsnLmh0bWwnLCAnLnNodG1sJywgJy54bWwnLCAnLnhodG1sJywgJy5w
bCcsCkBAIC02MjMsNiArNjI1LDMxIEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICBkZWYgX2lz
X3Rlc3RfZmlsZShmaWxlc3lzdGVtLCBkaXJuYW1lLCBmaWxlbmFtZSk6CiAgICAgICAgIHJldHVy
biBQb3J0Ll9oYXNfc3VwcG9ydGVkX2V4dGVuc2lvbihmaWxlc3lzdGVtLCBmaWxlbmFtZSkgYW5k
IG5vdCBQb3J0LmlzX3JlZmVyZW5jZV9odG1sX2ZpbGUoZmlsZXN5c3RlbSwgZGlybmFtZSwgZmls
ZW5hbWUpCiAKKyAgICBkZWYgdGVzdF9rZXkoc2VsZiwgdGVzdF9uYW1lKToKKyAgICAgICAgIiIi
VHVybnMgYSB0ZXN0IG5hbWUgaW50byBhIGxpc3Qgd2l0aCB0d28gc3VibGlzdHMsIHRoZSBuYXR1
cmFsIGtleSBvZiB0aGUKKyAgICAgICAgZGlybmFtZSwgYW5kIHRoZSBuYXR1cmFsIGtleSBvZiB0
aGUgYmFzZW5hbWUuCisKKyAgICAgICAgVGhpcyBjYW4gYmUgdXNlZCB3aGVuIHNvcnRpbmcgcGF0
aHMgc28gdGhhdCBmaWxlcyBpbiBhIGRpcmVjdG9yeS4KKyAgICAgICAgZGlyZWN0b3J5IGFyZSBr
ZXB0IHRvZ2V0aGVyIHJhdGhlciB0aGFuIGJlaW5nIG1peGVkIGluIHdpdGggZmlsZXMgaW4KKyAg
ICAgICAgc3ViZGlyZWN0b3JpZXMuIiIiCisgICAgICAgIGRpcm5hbWUsIGJhc2VuYW1lID0gc2Vs
Zi5zcGxpdF90ZXN0KHRlc3RfbmFtZSkKKyAgICAgICAgcmV0dXJuIChzZWxmLl9uYXR1cmFsX3Nv
cnRfa2V5KGRpcm5hbWUgKyBzZWxmLlRFU1RfUEFUSF9TRVBBUkFUT1IpLCBzZWxmLl9uYXR1cmFs
X3NvcnRfa2V5KGJhc2VuYW1lKSkKKworICAgIGRlZiBfbmF0dXJhbF9zb3J0X2tleShzZWxmLCBz
dHJpbmdfdG9fc3BsaXQpOgorICAgICAgICAiIiIgVHVybnMgYSBzdHJpbmcgaW50byBhIGxpc3Qg
b2Ygc3RyaW5nIGFuZCBudW1iZXIgY2h1bmtzLCBpLmUuICJ6MjNhIiAtPiBbInoiLCAyMywgImEi
XQorCisgICAgICAgIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50ICJuYXR1cmFsIHNvcnQi
IG9yZGVyLiBTZWU6CisgICAgICAgIGh0dHA6Ly93d3cuY29kaW5naG9ycm9yLmNvbS9ibG9nLzIw
MDcvMTIvc29ydGluZy1mb3ItaHVtYW5zLW5hdHVyYWwtc29ydC1vcmRlci5odG1sCisgICAgICAg
IGh0dHA6Ly9uZWRiYXRjaGVsZGVyLmNvbS9ibG9nLzIwMDcxMi5odG1sI2UyMDA3MTIxMVQwNTQ5
NTYKKyAgICAgICAgIiIiCisgICAgICAgIGRlZiB0cnlpbnQodmFsKToKKyAgICAgICAgICAgIHRy
eToKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50KHZhbCkKKyAgICAgICAgICAgIGV4Y2VwdCBW
YWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHJldHVybiB2YWwKKworICAgICAgICByZXR1cm4g
W3RyeWludChjaHVuaykgZm9yIGNodW5rIGluIHJlLnNwbGl0KCcoXGQrKScsIHN0cmluZ190b19z
cGxpdCldCisKICAgICBkZWYgdGVzdF9kaXJzKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm5zIHRo
ZSBsaXN0IG9mIHRvcC1sZXZlbCB0ZXN0IGRpcmVjdG9yaWVzLiIiIgogICAgICAgICBsYXlvdXRf
dGVzdHNfZGlyID0gc2VsZi5sYXlvdXRfdGVzdHNfZGlyKCkKQEAgLTEzMjEsMTQgKzEzNDgsMTQg
QEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAgICAgICByZXR1cm4gc3VpdGVzCiAKICAgICBkZWYg
X3ZpcnR1YWxfdGVzdHMoc2VsZiwgcGF0aHMsIHN1aXRlcyk6Ci0gICAgICAgIHZpcnR1YWxfdGVz
dHMgPSBzZXQoKQorICAgICAgICB2aXJ0dWFsX3Rlc3RzID0gbGlzdCgpCiAgICAgICAgIGZvciBz
dWl0ZSBpbiBzdWl0ZXM6CiAgICAgICAgICAgICBpZiBwYXRoczoKICAgICAgICAgICAgICAgICBm
b3IgdGVzdCBpbiBzdWl0ZS50ZXN0czoKICAgICAgICAgICAgICAgICAgICAgaWYgYW55KHRlc3Qu
c3RhcnRzd2l0aChwKSBmb3IgcCBpbiBwYXRocyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICB2
aXJ0dWFsX3Rlc3RzLmFkZCh0ZXN0KQorICAgICAgICAgICAgICAgICAgICAgICAgdmlydHVhbF90
ZXN0cy5hcHBlbmQodGVzdCkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgdmly
dHVhbF90ZXN0cy51cGRhdGUoc2V0KHN1aXRlLnRlc3RzLmtleXMoKSkpCisgICAgICAgICAgICAg
ICAgdmlydHVhbF90ZXN0cy5leHRlbmQoc3VpdGUudGVzdHMua2V5cygpKQogICAgICAgICByZXR1
cm4gdmlydHVhbF90ZXN0cwogCiAgICAgZGVmIGxvb2t1cF92aXJ0dWFsX3Rlc3RfYmFzZShzZWxm
LCB0ZXN0X25hbWUpOgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC9iYXNlX3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9iYXNlX3VuaXR0ZXN0LnB5CmluZGV4IDc3ZWYwNGEwNGQ2M2I0YzJkZmI1
YTljNDE2OTg3MDllZGEwMDE5NzkuLmJjYzY0YjYwMTQ4NmYyNzVlYjcwMzk5MTRhMDRmMzY1ODM5
YjZlZmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvYmFzZV91bml0dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2Jhc2VfdW5pdHRlc3QucHkKQEAgLTMyNSw3ICszMjUsNyBAQCBjbGFzcyBQb3J0
VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfZmluZF93aXRoX3NraXBwZWRf
ZGlyZWN0b3JpZXNfMihzZWxmKToKICAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KHdpdGhf
dGVzdHM9VHJ1ZSkKICAgICAgICAgdGVzdHMgPSBwb3J0LnRlc3RzKFsndXNlcnNjcmlwdHMvcmVz
b3VyY2VzJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdHMsIHNldChbXSkpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdHMsIFtdKQogCiAgICAgZGVmIHRlc3RfaXNfdGVzdF9m
aWxlKHNlbGYpOgogICAgICAgICBmaWxlc3lzdGVtID0gTW9ja0ZpbGVTeXN0ZW0oKQpAQCAtNDU1
LDUgKzQ1NSw0OSBAQCBjbGFzcyBQb3J0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAg
IHBvcnQgPSBzZWxmLm1ha2VfcG9ydCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydC5y
ZXF1aXJlc19odHRwX3NlcnZlcigpLCBGYWxzZSkKIAorCitjbGFzcyBOYXR1cmFsQ29tcGFyZVRl
c3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2Vs
Zi5fcG9ydCA9IFRlc3RQb3J0KE1vY2tTeXN0ZW1Ib3N0KCkpCisKKyAgICBkZWYgYXNzZXJ0X2Nt
cChzZWxmLCB4LCB5LCByZXN1bHQpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtcChzZWxm
Ll9wb3J0Ll9uYXR1cmFsX3NvcnRfa2V5KHgpLCBzZWxmLl9wb3J0Ll9uYXR1cmFsX3NvcnRfa2V5
KHkpKSwgcmVzdWx0KQorCisgICAgZGVmIHRlc3RfbmF0dXJhbF9jb21wYXJlKHNlbGYpOgorICAg
ICAgICBzZWxmLmFzc2VydF9jbXAoJ2EnLCAnYScsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0X2Nt
cCgnYWInLCAnYScsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0X2NtcCgnYScsICdhYicsIC0xKQor
ICAgICAgICBzZWxmLmFzc2VydF9jbXAoJycsICcnLCAwKQorICAgICAgICBzZWxmLmFzc2VydF9j
bXAoJycsICdhYicsIC0xKQorICAgICAgICBzZWxmLmFzc2VydF9jbXAoJzEnLCAnMicsIC0xKQor
ICAgICAgICBzZWxmLmFzc2VydF9jbXAoJzInLCAnMScsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0
X2NtcCgnMScsICcxMCcsIC0xKQorICAgICAgICBzZWxmLmFzc2VydF9jbXAoJzInLCAnMTAnLCAt
MSkKKyAgICAgICAgc2VsZi5hc3NlcnRfY21wKCdmb29fMS5odG1sJywgJ2Zvb18yLmh0bWwnLCAt
MSkKKyAgICAgICAgc2VsZi5hc3NlcnRfY21wKCdmb29fMS4xLmh0bWwnLCAnZm9vXzIuaHRtbCcs
IC0xKQorICAgICAgICBzZWxmLmFzc2VydF9jbXAoJ2Zvb18xLmh0bWwnLCAnZm9vXzEwLmh0bWwn
LCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRfY21wKCdmb29fMi5odG1sJywgJ2Zvb18xMC5odG1s
JywgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0X2NtcCgnZm9vXzIzLmh0bWwnLCAnZm9vXzEwLmh0
bWwnLCAxKQorICAgICAgICBzZWxmLmFzc2VydF9jbXAoJ2Zvb18yMy5odG1sJywgJ2Zvb18xMDAu
aHRtbCcsIC0xKQorCisKK2NsYXNzIEtleUNvbXBhcmVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToK
KyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuX3BvcnQgPSBUZXN0UG9ydChNb2Nr
U3lzdGVtSG9zdCgpKQorCisgICAgZGVmIGFzc2VydF9jbXAoc2VsZiwgeCwgeSwgcmVzdWx0KToK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbXAoc2VsZi5fcG9ydC50ZXN0X2tleSh4KSwgc2Vs
Zi5fcG9ydC50ZXN0X2tleSh5KSksIHJlc3VsdCkKKworICAgIGRlZiB0ZXN0X3Rlc3Rfa2V5KHNl
bGYpOgorICAgICAgICBzZWxmLmFzc2VydF9jbXAoJy9hJywgJy9hJywgMCkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRfY21wKCcvYScsICcvYicsIC0xKQorICAgICAgICBzZWxmLmFzc2VydF9jbXAoJy9h
MicsICcvYTEwJywgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0X2NtcCgnL2EyL2ZvbycsICcvYTEw
L2ZvbycsIC0xKQorICAgICAgICBzZWxmLmFzc2VydF9jbXAoJy9hL2ZvbzExJywgJy9hL2ZvbzIn
LCAxKQorICAgICAgICBzZWxmLmFzc2VydF9jbXAoJy9hYicsICcvYS9hL2InLCAtMSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRfY21wKCcvYS9hL2InLCAnL2FiJywgMSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRfY21wKCcvZm9vLWJhci9iYXonLCAnL2Zvby9iYXonLCAtMSkKKworCiBpZiBfX25hbWVfXyA9
PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weSBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKaW5kZXggMmRm
NTdjZjZmMjdiYWQ1OGY1NDJkM2E0ZWU2ZmY5NmY4NGFlMjNjMi4uYzUwNWNkMzk5Y2E3NzViZmVl
MzhhNmUwNzY2YTE4NWM3YTkxMmRlZSAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQorKysgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CkBAIC0zNTMsOSArMzUzLDEx
IEBAIGRlZiBwYXJzZV9hcmdzKGFyZ3M9Tm9uZSk6CiAgICAgICAgICAgICBoZWxwPSJSdW4gYWxs
IHRlc3RzLCBldmVuIHRob3NlIG1hcmtlZCBTS0lQIGluIHRoZSB0ZXN0IGxpc3QgKHNhbWUgYXMg
LS1za2lwcGVkPWlnbm9yZSkiKSwKICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tdGlt
ZS1vdXQtbXMiLAogICAgICAgICAgICAgaGVscD0iU2V0IHRoZSB0aW1lb3V0IGZvciBlYWNoIHRl
c3QiKSwKLSAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tcmFuZG9taXplLW9yZGVyIiwg
YWN0aW9uPSJzdG9yZV90cnVlIiwKLSAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsIGhlbHA9KCJS
dW4gdGVzdHMgaW4gcmFuZG9tIG9yZGVyICh1c2VmdWwgIgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiZm9yIHRyYWNraW5nIGRvd24gY29ycnVwdGlvbikiKSksCisgICAgICAgIG9w
dHBhcnNlLm1ha2Vfb3B0aW9uKCItLW9yZGVyIiwgYWN0aW9uPSJzdG9yZSIsIGRlZmF1bHQ9Im5h
dHVyYWwiLAorICAgICAgICAgICAgaGVscD0oImRldGVybWluZSB0aGUgb3JkZXIgaW4gd2hpY2gg
dGhlIHRlc3QgY2FzZXMgd2lsbCBiZSBydW4uICIKKyAgICAgICAgICAgICAgICAgICInbm9uZScg
PT0gdXNlIHRoZSBvcmRlciBpbiB3aGljaCB0aGUgdGVzdHMgd2VyZSBsaXN0ZWQgZWl0aGVyIGlu
IGFyZ3VtZW50cyBvciB0ZXN0IGxpc3QsICIKKyAgICAgICAgICAgICAgICAgICInbmF0dXJhbCcg
PT0gdXNlIHRoZSBuYXR1cmFsIG9yZGVyIChkZWZhdWx0KSwgIgorICAgICAgICAgICAgICAgICAg
IidyYW5kb20nID09IHJhbmRvbWl6ZSB0aGUgdGVzdCBvcmRlci4iKSksCiAgICAgICAgIG9wdHBh
cnNlLm1ha2Vfb3B0aW9uKCItLXJ1bi1jaHVuayIsCiAgICAgICAgICAgICBoZWxwPSgiUnVuIGEg
c3BlY2lmaWVkIGNodW5rIChuOmwpLCB0aGUgbnRoIG9mIGxlbiBsLCAiCiAgICAgICAgICAgICAg
ICAgICJvZiB0aGUgbGF5b3V0IHRlc3RzIikpLApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c19pbnRlZ3JhdGlvbnRlc3QucHkg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX2lu
dGVncmF0aW9udGVzdC5weQppbmRleCBkZTFhMjFjYzUyNzRmNmFiOTU2MjE4ZTlkNzNiNjhjZGQy
YmI5Mjk5Li4yYmZlOTA0ZDViMjRiMjNlZTIwMjI0NTU3OTRiNjExNWUxZGFiNzBiIDEwMDc1NQot
LS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3Rz
X2ludGVncmF0aW9udGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX2ludGVncmF0aW9udGVzdC5weQpAQCAtMzg5LDkgKzM4OSw0
MSBAQCBjbGFzcyBNYWluVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSwgU3RyZWFtVGVzdGluZ01peGlu
KToKICAgICAgICAgc2VsZi5hc3NlcnRFbXB0eShvdXQpCiAgICAgICAgIHNlbGYuYXNzZXJ0Q29u
dGFpbnMoZXJyLCAnTm8gdGVzdHMgdG8gcnVuLlxuJykKIAotICAgIGRlZiB0ZXN0X3JhbmRvbWl6
ZV9vcmRlcihzZWxmKToKLSAgICAgICAgIyBGSVhNRTogdmVyaWZ5IG9yZGVyIHdhcyBzaHVmZmxl
ZAotICAgICAgICBzZWxmLmFzc2VydFRydWUocGFzc2luZ19ydW4oWyctLXJhbmRvbWl6ZS1vcmRl
ciddKSkKKyAgICBkZWYgdGVzdF9uYXR1cmFsX29yZGVyKHNlbGYpOgorICAgICAgICB0ZXN0c190
b19ydW4gPSBbJ3Bhc3Nlcy9hdWRpby5odG1sJywgJ2ZhaWx1cmVzL2V4cGVjdGVkL3RleHQuaHRt
bCcsICdmYWlsdXJlcy9leHBlY3RlZC9taXNzaW5nX3RleHQuaHRtbCcsICdwYXNzZXMvYXJncy5o
dG1sJ10KKyAgICAgICAgdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbJy0tb3JkZXI9bmF0dXJh
bCddICsgdGVzdHNfdG9fcnVuLCB0ZXN0c19pbmNsdWRlZD1UcnVlLCBmbGF0dGVuX2JhdGNoZXM9
VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbJ2ZhaWx1cmVzL2V4cGVjdGVkL21pc3Np
bmdfdGV4dC5odG1sJywgJ2ZhaWx1cmVzL2V4cGVjdGVkL3RleHQuaHRtbCcsICdwYXNzZXMvYXJn
cy5odG1sJywgJ3Bhc3Nlcy9hdWRpby5odG1sJ10sIHRlc3RzX3J1bikKKworICAgIGRlZiB0ZXN0
X25hdHVyYWxfb3JkZXJfdGVzdF9zcGVjaWZpZWRfbXVsdGlwbGVfdGltZXMoc2VsZik6CisgICAg
ICAgIHRlc3RzX3RvX3J1biA9IFsncGFzc2VzL2FyZ3MuaHRtbCcsICdwYXNzZXMvYXVkaW8uaHRt
bCcsICdwYXNzZXMvYXVkaW8uaHRtbCcsICdwYXNzZXMvYXJncy5odG1sJ10KKyAgICAgICAgdGVz
dHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbJy0tb3JkZXI9bmF0dXJhbCddICsgdGVzdHNfdG9fcnVu
LCB0ZXN0c19pbmNsdWRlZD1UcnVlLCBmbGF0dGVuX2JhdGNoZXM9VHJ1ZSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChbJ3Bhc3Nlcy9hcmdzLmh0bWwnLCAncGFzc2VzL2FyZ3MuaHRtbCcsICdw
YXNzZXMvYXVkaW8uaHRtbCcsICdwYXNzZXMvYXVkaW8uaHRtbCddLCB0ZXN0c19ydW4pCisKKyAg
ICBkZWYgdGVzdF9yYW5kb21fb3JkZXIoc2VsZik6CisgICAgICAgIHRlc3RzX3RvX3J1biA9IFsn
cGFzc2VzL2F1ZGlvLmh0bWwnLCAnZmFpbHVyZXMvZXhwZWN0ZWQvdGV4dC5odG1sJywgJ2ZhaWx1
cmVzL2V4cGVjdGVkL21pc3NpbmdfdGV4dC5odG1sJywgJ3Bhc3Nlcy9hcmdzLmh0bWwnXQorICAg
ICAgICB0ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsnLS1vcmRlcj1yYW5kb20nXSArIHRlc3Rz
X3RvX3J1biwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgZmxhdHRlbl9iYXRjaGVzPVRydWUpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKHRlc3RzX3RvX3J1biksIHNvcnRlZCh0ZXN0c19y
dW4pKQorCisgICAgZGVmIHRlc3RfcmFuZG9tX29yZGVyX3Rlc3Rfc3BlY2lmaWVkX211bHRpcGxl
X3RpbWVzKHNlbGYpOgorICAgICAgICB0ZXN0c190b19ydW4gPSBbJ3Bhc3Nlcy9hcmdzLmh0bWwn
LCAncGFzc2VzL2F1ZGlvLmh0bWwnLCAncGFzc2VzL2F1ZGlvLmh0bWwnLCAncGFzc2VzL2FyZ3Mu
aHRtbCddCisgICAgICAgIHRlc3RzX3J1biA9IGdldF90ZXN0c19ydW4oWyctLW9yZGVyPXJhbmRv
bSddICsgdGVzdHNfdG9fcnVuLCB0ZXN0c19pbmNsdWRlZD1UcnVlLCBmbGF0dGVuX2JhdGNoZXM9
VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0c19ydW4uY291bnQoJ3Bhc3Nlcy9h
dWRpby5odG1sJyksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdHNfcnVuLmNvdW50
KCdwYXNzZXMvYXJncy5odG1sJyksIDIpCisKKyAgICBkZWYgdGVzdF9ub19vcmRlcihzZWxmKToK
KyAgICAgICAgdGVzdHNfdG9fcnVuID0gWydwYXNzZXMvYXVkaW8uaHRtbCcsICdmYWlsdXJlcy9l
eHBlY3RlZC90ZXh0Lmh0bWwnLCAnZmFpbHVyZXMvZXhwZWN0ZWQvbWlzc2luZ190ZXh0Lmh0bWwn
LCAncGFzc2VzL2FyZ3MuaHRtbCddCisgICAgICAgIHRlc3RzX3J1biA9IGdldF90ZXN0c19ydW4o
WyctLW9yZGVyPW5vbmUnXSArIHRlc3RzX3RvX3J1biwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgZmxh
dHRlbl9iYXRjaGVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdHNfdG9fcnVu
LCB0ZXN0c19ydW4pCisKKyAgICBkZWYgdGVzdF9ub19vcmRlcl90ZXN0X3NwZWNpZmllZF9tdWx0
aXBsZV90aW1lcyhzZWxmKToKKyAgICAgICAgdGVzdHNfdG9fcnVuID0gWydwYXNzZXMvYXJncy5o
dG1sJywgJ3Bhc3Nlcy9hdWRpby5odG1sJywgJ3Bhc3Nlcy9hdWRpby5odG1sJywgJ3Bhc3Nlcy9h
cmdzLmh0bWwnXQorICAgICAgICB0ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsnLS1vcmRlcj1u
b25lJ10gKyB0ZXN0c190b19ydW4sIHRlc3RzX2luY2x1ZGVkPVRydWUsIGZsYXR0ZW5fYmF0Y2hl
cz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3RzX3RvX3J1biwgdGVzdHNfcnVu
KQorCisgICAgZGVmIHRlc3Rfbm9fb3JkZXJfd2l0aF9kaXJlY3RvcnlfZW50cmllc19pbl9uYXR1
cmFsX29yZGVyKHNlbGYpOgorICAgICAgICB0ZXN0c190b19ydW4gPSBbJ2h0dHAvdGVzdHMvc3Ns
JywgJ3BlcmYvZm9vJywgJ2h0dHAvdGVzdHMvcGFzc2VzJ10KKyAgICAgICAgdGVzdHNfcnVuID0g
Z2V0X3Rlc3RzX3J1bihbJy0tb3JkZXI9bm9uZSddICsgdGVzdHNfdG9fcnVuLCB0ZXN0c19pbmNs
dWRlZD1UcnVlLCBmbGF0dGVuX2JhdGNoZXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCh0ZXN0c19ydW4sIFsnaHR0cC90ZXN0cy9zc2wvdGV4dC5odG1sJywgJ3BlcmYvZm9vL3Rlc3Qu
aHRtbCcsICdodHRwL3Rlc3RzL3Bhc3Nlcy9pbWFnZS5odG1sJywgJ2h0dHAvdGVzdHMvcGFzc2Vz
L3RleHQuaHRtbCddKQogCiAgICAgZGVmIHRlc3RfZ2NfYmV0d2Vlbl90ZXN0cyhzZWxmKToKICAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVuKFsnLS1nYy1iZXR3ZWVuLXRlc3RzJ10p
KQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXJp
ZXMucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVlcmllcy5weQpp
bmRleCA5M2UwZGYzZDM2MWM4NWY4MjBhZGMzNDc4NGI0NjE0MTVjMWQ1ODNlLi5jYmRiOTAzZWU1
ZWU0ODdkNjNkNTkzMzhhNDZiZWQzMDgwNjQzMDJhIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVlcmllcy5weQorKysgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVlcmllcy5weQpAQCAtNDc2LDcgKzQ3Niw3IEBAIGNsYXNz
IFByaW50RXhwZWN0YXRpb25zKEFic3RyYWN0RGVjbGFyYXRpdmVDb21tYW5kKToKICAgICAgICAg
ICAgICAgICBwcmludCBmaWxlCiAgICAgICAgICAgICByZXR1cm4KIAotICAgICAgICB0ZXN0cyA9
IGRlZmF1bHRfcG9ydC50ZXN0cyhhcmdzKQorICAgICAgICB0ZXN0cyA9IHNldChkZWZhdWx0X3Bv
cnQudGVzdHMoYXJncykpCiAgICAgICAgIGZvciBwb3J0X25hbWUgaW4gcG9ydF9uYW1lczoKICAg
ICAgICAgICAgIG1vZGVsID0gc2VsZi5fbW9kZWwob3B0aW9ucywgcG9ydF9uYW1lLCB0ZXN0cykK
ICAgICAgICAgICAgIHRlc3RzX3RvX3ByaW50ID0gc2VsZi5fZmlsdGVyX3Rlc3RzKG9wdGlvbnMs
IG1vZGVsLCB0ZXN0cykK
</data>

          </attachment>
      

    </bug>

</bugzilla>