<?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>87451</bug_id>
          
          <creation_ts>2012-05-24 19:30:32 -0700</creation_ts>
          <short_desc>garden-o-matic should rebaseline baselines in parallel</short_desc>
          <delta_ts>2012-05-29 14:30:54 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>87528</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Pranke">dpranke</reporter>
          <assigned_to name="Dirk Pranke">dpranke</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>epoger</cc>
    
    <cc>eric</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>633477</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-05-24 19:30:32 -0700</bug_when>
    <thetext>garden-o-matic should rebaseline baselines in parallel</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633478</commentid>
    <comment_count>1</comment_count>
      <attachid>143951</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-05-24 19:31:00 -0700</bug_when>
    <thetext>Created attachment 143951
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633480</commentid>
    <comment_count>2</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-05-24 19:42:13 -0700</bug_when>
    <thetext>copying from the email thread ...

now that I&apos;ve added a &quot;rebaselineall&quot; entry point to garden-o-matic, the next obvious step to speed things up on the back end is to fetch baselines in parallel.

Using a test case of fetching 1 file that needs baselines on all 8 chromium configurations, over my fast network connection to the bots and my beefy mac pro, it takes about 20 seconds to rebaseline the test. This breaks down to about 12 seconds to fetch the baselines, 4 to add them to repo (git add), and 4 to optimize the baselines.

Fetching the baselines in parallel scales more or less linearly, so that drops to 1.5s, and changing git add to accept a batch seems to give an O(n) -&gt; O(1) speedup, at least for small n, so there&apos;s lots of room for improvement. 

I haven&apos;t looked at speeding up optimize yet.

I&apos;ve posted my work-in-progress for review.

I had to modify rebaseline-test to not add the file to git, because it turns out git doesn&apos;t support concurrent adds (the add command will fail if there&apos;s another add running).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633481</commentid>
    <comment_count>3</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-05-24 19:43:33 -0700</bug_when>
    <thetext>another option in the design would be to add a webkit-patch rebaseline-batch command and push the logic lower; this would potentially be useful if we wanted some other front end or tool to be able to rebaseline a bunch of tests at once other than garden-o-matic. We should think about rebaselining from results.html here, for example ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633485</commentid>
    <comment_count>4</comment_count>
      <attachid>143951</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-05-24 19:57:50 -0700</bug_when>
    <thetext>Comment on attachment 143951
Patch

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

This looks much cleaner than I expected it to. Tests + cleaning up the patch (e.g. removing prints) is all this needs.

&gt; Tools/Scripts/webkitpy/common/checkout/scm/git.py:163
&gt; +    def add(self, path=None, return_exit_code=False, paths=None):

This change is fine, but you&apos;ll need to modify svn.py as well.

Instead of adding a new parameter you could change paths to path and have it take a string or a list of string. I&apos;m on the fence as to whether that&apos;s better though.

&gt; Tools/Scripts/webkitpy/tool/servers/gardeningserver.py:201
&gt; +        # optimizing baselines is fast and involves only local file operations, so we don&apos;t bother running this in parallel.

I expect this command could benefit from the same optimization as above, i.e. splitting SCM commands from file-system commands and then running all the adds/deletes as a single operation for each. Totally a separate patch though. Just commenting that this could be a FIXME instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633486</commentid>
    <comment_count>5</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-05-24 19:58:22 -0700</bug_when>
    <thetext>Or adding --verbose logging for the times instead of the prints would be fine too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634143</commentid>
    <comment_count>6</comment_count>
      <attachid>143951</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-05-25 11:56:35 -0700</bug_when>
    <thetext>Comment on attachment 143951
Patch

Sure, I will clean up everything, this was just to demonstrate the approach.

It&apos;s a bit unfortunate that we have to jump through some hoops on the back end to re-implement the dataflow we had in garden-o-matic through the async command chaining.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634162</commentid>
    <comment_count>7</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-05-25 12:19:11 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 143951 [details])
&gt; Sure, I will clean up everything, this was just to demonstrate the approach.
&gt; 
&gt; It&apos;s a bit unfortunate that we have to jump through some hoops on the back end to re-implement the dataflow we had in garden-o-matic through the async command chaining.

From a purist perspective, I think it&apos;d be better for everything to be behind a single webkit-patch command that just did the right thing. It&apos;d be more future-proof as the tools change. But we can always make that change later. This is a good incremental step in that direction either way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634172</commentid>
    <comment_count>8</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-05-25 12:26:01 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; From a purist perspective, I think it&apos;d be better for everything to be behind a single webkit-patch command that just did the right thing. It&apos;d be more future-proof as the tools change. But we can always make that change later. This is a good incremental step in that direction either way.

Yeah, I&apos;ve thought that, too ... adding a webkit-patch rebaseline-all or something that takes a json description of what to do. That would be a simple cut&amp;paste at some point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634303</commentid>
    <comment_count>9</comment_count>
      <attachid>144152</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-05-25 14:49:06 -0700</bug_when>
    <thetext>Created attachment 144152
clean up, add tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634310</commentid>
    <comment_count>10</comment_count>
      <attachid>144152</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-05-25 14:55:13 -0700</bug_when>
    <thetext>Comment on attachment 144152
clean up, add tests

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

Nice test.

&gt; Tools/Scripts/webkitpy/tool/servers/gardeningserver.py:209
&gt; +def run_command(cmd_line_and_cwd):
&gt; +    (cmd_line, cwd) = cmd_line_and_cwd
&gt; +    host = Host()
&gt; +    output = host.executive.run_command(cmd_line, cwd=cwd)

dead code?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634315</commentid>
    <comment_count>11</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-05-25 15:02:21 -0700</bug_when>
    <thetext>REview comments: https://bugs.webkit.org/show_bug.cgi?id=87528#c8</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634317</commentid>
    <comment_count>12</comment_count>
      <attachid>144152</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-05-25 15:03:22 -0700</bug_when>
    <thetext>Comment on attachment 144152
clean up, add tests

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

Please see my other review comments, linked above.

&gt; Tools/Scripts/webkitpy/tool/servers/gardeningserver.py:175
&gt;      def rebaselineall(self):

I would encourage you to split this function into helpers for code readability.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634323</commentid>
    <comment_count>13</comment_count>
      <attachid>144152</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-05-25 15:07:23 -0700</bug_when>
    <thetext>Comment on attachment 144152
clean up, add tests

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

&gt;&gt; Tools/Scripts/webkitpy/tool/servers/gardeningserver.py:175
&gt;&gt;      def rebaselineall(self):
&gt; 
&gt; I would encourage you to split this function into helpers for code readability.

Will do.

&gt;&gt; Tools/Scripts/webkitpy/tool/servers/gardeningserver.py:209
&gt;&gt; +    output = host.executive.run_command(cmd_line, cwd=cwd)
&gt; 
&gt; dead code?

Yeah, will remove.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634327</commentid>
    <comment_count>14</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-05-25 15:15:31 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; REview comments: https://bugs.webkit.org/show_bug.cgi?id=87528#c8

Thanks for the review! Responding here.

&gt;&gt; Tools/Scripts/webkitpy/common/system/executive.py:464
&gt;&gt; +def _run_command_thunk(cmd_line_and_cwd):
&gt;&gt; +    (cmd_line, cwd) = cmd_line_and_cwd
&gt;&gt; +    proc = subprocess.Popen(cmd_line, cwd=cwd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
&gt;&gt; +    stdout, stderr = proc.communicate()
&gt;&gt; +    return (proc.returncode, stdout, stderr)

&gt; This could easily have been a class method instead of a module method.

Unfortunately, no, it couldn&apos;t. In order for it to work properly with the multiprocessing module, it needs to be a module method. I will add a comment to that end.

&gt;&gt; Tools/Scripts/webkitpy/tool/commands/rebaseline.py:67
&gt;&gt; +        self._defer_scm_adds = False

&gt; It doesn&apos;t feel like it&apos;s really &quot;defer&quot;ing anything.  It&apos;s just printing instead of doing.

Fair point; it&apos;s deferred in the larger workflow, but that doesn&apos;t make much sense here. I&apos;ll change the name to something better.

&gt;&gt; Tools/Scripts/webkitpy/tool/commands/rebaseline.py:126
&gt;&gt; +            print &quot;scm-add:%s&quot; % path

&gt; Do you have any testing of this printing and parsing of the resulting values?  Spaces in file names unicode?

No. Will add some.

&gt;&gt; Tools/Scripts/webkitpy/tool/servers/gardeningserver.py:194
&gt;&gt; +        files_to_add = set()
&gt;&gt; +        for output in [result[1] for result in command_results]:
&gt;&gt; +            files_to_add.update(line.replace(&apos;scm-add:&apos;, &apos;&apos;) for line in output.splitlines() if line.startswith(&apos;scm-add:&apos;))
&gt;&gt; +        scm.add_list(list(files_to_add))

&gt; Yeah, this should be tested.  You&apos;ll likely have to make it a separate function.  The whole idea of serliazing/deserializing the add list is split across two classes currently.

Well, it is tested as part of the existing unit tests, but I take your point. I&apos;ll add some more tests.


&gt;&gt; Tools/Scripts/webkitpy/tool/servers/gardeningserver.py:209
&gt;&gt; +def run_command(cmd_line_and_cwd):
&gt;&gt; +    (cmd_line, cwd) = cmd_line_and_cwd
&gt;&gt; +    host = Host()
&gt;&gt; +    output = host.executive.run_command(cmd_line, cwd=cwd)

&gt; :(  You really don&apos;t want to instantiate a new host per command.

Yeah, this was a proof of concept. In the latest patch, this is all pushed into Executive and is very lightweight.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634329</commentid>
    <comment_count>15</comment_count>
      <attachid>144152</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-05-25 15:20:15 -0700</bug_when>
    <thetext>Comment on attachment 144152
clean up, add tests

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

&gt; Tools/ChangeLog:5
&gt; +

Also, this could use a short, high-level description of what the patch is doing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634332</commentid>
    <comment_count>16</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-05-25 15:21:10 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 144150 [details] [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=144150&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/common/system/executive.py:464
&gt; &gt; +def _run_command_thunk(cmd_line_and_cwd):
&gt; &gt; +    (cmd_line, cwd) = cmd_line_and_cwd
&gt; &gt; +    proc = subprocess.Popen(cmd_line, cwd=cwd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
&gt; &gt; +    stdout, stderr = proc.communicate()
&gt; &gt; +    return (proc.returncode, stdout, stderr)
&gt; 
&gt; This could easily have been a class method instead of a module method.

Sorry, I should have said &quot;static&quot;.

@staticmethod
def _run_command_thunk(command_line_and_cwd):
    pass

MyClass._run_command_thunk
should then do exactly what you want, no?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634364</commentid>
    <comment_count>17</comment_count>
      <attachid>144160</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-05-25 15:45:08 -0700</bug_when>
    <thetext>Created attachment 144160
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634367</commentid>
    <comment_count>18</comment_count>
      <attachid>144160</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-05-25 15:49:05 -0700</bug_when>
    <thetext>Comment on attachment 144160
Patch

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

I&apos;ll leave the r+ for eseidel since he had more substantive review comments.

&gt; Tools/Scripts/webkitpy/tool/servers/gardeningserver.py:217
&gt; +def run_command(cmd_line_and_cwd):
&gt; +    (cmd_line, cwd) = cmd_line_and_cwd
&gt; +    host = Host()
&gt; +    output = host.executive.run_command(cmd_line, cwd=cwd)

?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634376</commentid>
    <comment_count>19</comment_count>
      <attachid>144160</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-05-25 15:54:16 -0700</bug_when>
    <thetext>Comment on attachment 144160
Patch

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

&gt; Tools/Scripts/webkitpy/common/system/executive_unittest.py:220
&gt; +    def test_run_in_parallel(self):

Doesn&apos;t this require a multi-processor machine to pass? :)  Do we need to skip it if the machine has fewer than 2 processors?

I&apos;m not sure this is the betst way to test this.  Another way might be to have 2 process, the first of which required the second to complete before it could complete?  That has the risk of hanging on failure, but wouln&apos;t have risk of being flaky?

&gt; Tools/Scripts/webkitpy/tool/commands/rebaseline.py:77
&gt; +            optparse.make_option(&quot;--print-scm-changes&quot;, action=&quot;store_true&quot;, help=&quot;Print modifcations to the scm (as a json dict) rather than actually modifying the scm&quot;),

Nice.

&gt; Tools/Scripts/webkitpy/tool/servers/gardeningserver.py:214
&gt; +def run_command(cmd_line_and_cwd):

I think you said this was dead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634389</commentid>
    <comment_count>20</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-05-25 16:00:00 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (From update of attachment 144160 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=144160&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/common/system/executive_unittest.py:220
&gt; &gt; +    def test_run_in_parallel(self):
&gt; 
&gt; Doesn&apos;t this require a multi-processor machine to pass? :)  Do we need to skip it if the machine has fewer than 2 processors?

Confused. Multiple processes still run in parallel on a single-core, no?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634426</commentid>
    <comment_count>21</comment_count>
      <attachid>144160</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-05-25 16:32:07 -0700</bug_when>
    <thetext>Comment on attachment 144160
Patch

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

&gt;&gt;&gt; Tools/Scripts/webkitpy/common/system/executive_unittest.py:220
&gt;&gt;&gt; +    def test_run_in_parallel(self):
&gt;&gt; 
&gt;&gt; Doesn&apos;t this require a multi-processor machine to pass? :)  Do we need to skip it if the machine has fewer than 2 processors?
&gt;&gt; 
&gt;&gt; I&apos;m not sure this is the betst way to test this.  Another way might be to have 2 process, the first of which required the second to complete before it could complete?  That has the risk of hanging on failure, but wouln&apos;t have risk of being flaky?
&gt; 
&gt; Confused. Multiple processes still run in parallel on a single-core, no?

Yes, sorry.  Sleep will of course yield, so this seems safe enough.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634429</commentid>
    <comment_count>22</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-05-25 16:35:01 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (From update of attachment 144160 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=144160&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/common/system/executive_unittest.py:220
&gt; &gt; +    def test_run_in_parallel(self):
&gt; 
&gt; Doesn&apos;t this require a multi-processor machine to pass? :)  Do we need to skip it if the machine has fewer than 2 processors?
&gt; 
&gt; I&apos;m not sure this is the betst way to test this.  Another way might be to have 2 process, the first of which required the second to complete before it could complete?  That has the risk of hanging on failure, but wouln&apos;t have risk of being flaky?
&gt; 

multiprocess.Poll() defaults to one task per CPU, but you can override it with the processes= keyword, as I&apos;m doing. Thus this should work fine even on a single-proc CPU, since the tasks are just sleeping and waking up.

&gt; &gt; Tools/Scripts/webkitpy/tool/servers/gardeningserver.py:214
&gt; &gt; +def run_command(cmd_line_and_cwd):
&gt; 
&gt; I think you said this was dead?

Haven&apos;t removed it yet :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634553</commentid>
    <comment_count>23</comment_count>
      <attachid>144185</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-05-25 20:11:02 -0700</bug_when>
    <thetext>Created attachment 144185
more review feedback, more tests, more cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634556</commentid>
    <comment_count>24</comment_count>
      <attachid>144187</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-05-25 20:13:57 -0700</bug_when>
    <thetext>Created attachment 144187
minor cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634557</commentid>
    <comment_count>25</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-05-25 20:14:50 -0700</bug_when>
    <thetext>Okay, this should cover all of the review feedback. The testing is still pretty light, but given that we&apos;re now using stock marshalling of json data to pass information between the commands, I&apos;m not sure how much more is merited. Thoughts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634560</commentid>
    <comment_count>26</comment_count>
      <attachid>144187</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-05-25 20:21:33 -0700</bug_when>
    <thetext>Comment on attachment 144187
minor cleanup

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

&gt; Tools/Scripts/webkitpy/tool/commands/rebaseline.py:181
&gt; +        self._scm_changes = {&apos;add&apos;: [], &apos;rm&apos;: []}

Nit: s/rm/delete/ since that&apos;s what SCM calls these.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>636440</commentid>
    <comment_count>27</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-05-29 14:30:54 -0700</bug_when>
    <thetext>Committed r118836: &lt;http://trac.webkit.org/changeset/118836&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>143951</attachid>
            <date>2012-05-24 19:31:00 -0700</date>
            <delta_ts>2012-05-25 14:49:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87451-20120524193059.patch</filename>
            <type>text/plain</type>
            <size>7760</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4NDQ3CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMGI5ZDcxYjQyNmYwNDUzMDBkZmUxZWYzOTlhYjk3Mjkw
NmFhNjgxMC4uZjU4Y2Q0NjcyNzhmMDA2ZGIxNDQyYzBlOTJlMzMwNzRlZjNhNDBhNCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI1
IEBACiAyMDEyLTA1LTI0ICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgogCisg
ICAgICAgIGdhcmRlbi1vLW1hdGljIHNob3VsZCByZWJhc2VsaW5lIGJhc2VsaW5lcyBpbiBwYXJh
bGxlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODc0
NTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9naXQucHk6CisgICAgICAgIChHaXQu
YWRkKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcmViYXNlbGlu
ZS5weToKKyAgICAgICAgKEFic3RyYWN0UmViYXNlbGluaW5nQ29tbWFuZC5fX2luaXRfXyk6Cisg
ICAgICAgIChSZWJhc2VsaW5lVGVzdC5fY29weV9leGlzdGluZ19iYXNlbGluZSk6CisgICAgICAg
IChSZWJhc2VsaW5lVGVzdC5fc2F2ZV9iYXNlbGluZSk6CisgICAgICAgIChSZWJhc2VsaW5lVGVz
dCk6CisgICAgICAgIChSZWJhc2VsaW5lVGVzdC5fYWRkX3RvX3NjbSk6CisgICAgICAgIChSZWJh
c2VsaW5lVGVzdC5leGVjdXRlKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2Vy
dmVycy9nYXJkZW5pbmdzZXJ2ZXIucHk6CisgICAgICAgIChHYXJkZW5pbmdIVFRQUmVxdWVzdEhh
bmRsZXIucmViYXNlbGluZWFsbCk6CisgICAgICAgIChydW5fY29tbWFuZCk6CisKKzIwMTItMDUt
MjQgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKICAgICAgICAgZ2FyZGVu
LW8tbWF0aWMgc2hvdWxkIG5vdCBmZXRjaCBmcm9tIGRlYnVnIGJvdHMgaWYgaXQgYWxzbyBrbm93
cyBhYm91dCB0aGUgcmVsZWFzZSBib3RzCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD04NjkxNgogCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9jaGVja291dC9zY20vZ2l0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9j
b21tb24vY2hlY2tvdXQvc2NtL2dpdC5weQppbmRleCBjN2RiZDdjYTEzYzg1ZjI1NjhiNzJhN2U3
YzM3YTBmZDNjZTgzNGZlLi44YTA2NzY3YzllMGZiYTYzYjdlZDk0Y2EwM2U2ZWVjMzJlZWZmYjRm
IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9jaGVja291dC9zY20v
Z2l0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbS9n
aXQucHkKQEAgLTE2MCw3ICsxNjAsOSBAQCBjbGFzcyBHaXQoU0NNLCBTVk5SZXBvc2l0b3J5KToK
ICAgICBkZWYgX3N0YXR1c19yZWdleHAoc2VsZiwgZXhwZWN0ZWRfdHlwZXMpOgogICAgICAgICBy
ZXR1cm4gJ14oP1A8c3RhdHVzPlslc10pXHQoP1A8ZmlsZW5hbWU+LispJCcgJSBleHBlY3RlZF90
eXBlcwogCi0gICAgZGVmIGFkZChzZWxmLCBwYXRoLCByZXR1cm5fZXhpdF9jb2RlPUZhbHNlKToK
KyAgICBkZWYgYWRkKHNlbGYsIHBhdGg9Tm9uZSwgcmV0dXJuX2V4aXRfY29kZT1GYWxzZSwgcGF0
aHM9Tm9uZSk6CisgICAgICAgIGlmIHBhdGhzOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucnVu
KFsiZ2l0IiwgImFkZCJdICsgcGF0aHMsIHJldHVybl9leGl0X2NvZGU9cmV0dXJuX2V4aXRfY29k
ZSkKICAgICAgICAgcmV0dXJuIHNlbGYucnVuKFsiZ2l0IiwgImFkZCIsIHBhdGhdLCByZXR1cm5f
ZXhpdF9jb2RlPXJldHVybl9leGl0X2NvZGUpCiAKICAgICBkZWYgZGVsZXRlKHNlbGYsIHBhdGgp
OgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3JlYmFz
ZWxpbmUucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcmViYXNlbGlu
ZS5weQppbmRleCAzMDQwOTc4M2Y3ZjA0NjI3NWRkYmIwNjM5ZWRjODg2NDhkNzNhMWUxLi40MjA4
OTczYzRhZjg4MzI3ODVhOWNlZjJmMGI1NTQxZWZhMjdmZmY5IDEwMDY0NAotLS0gYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcmViYXNlbGluZS5weQorKysgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcmViYXNlbGluZS5weQpAQCAtNTksMTAgKzU5
LDEyIEBAIGRlZiBfYmFzZWxpbmVfbmFtZShmcywgdGVzdF9uYW1lLCBzdWZmaXgpOgogY2xhc3Mg
QWJzdHJhY3RSZWJhc2VsaW5pbmdDb21tYW5kKEFic3RyYWN0RGVjbGFyYXRpdmVDb21tYW5kKToK
ICAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgIG9wdGlvbnMgPSBbCisgICAgICAgICAg
ICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1kZWZlci1zY20tYWRkcyIsIGFjdGlvbj0ic3RvcmVf
dHJ1ZSIsIGhlbHA9Ik91dHB1dCBjb21tYW5kcyB0byBtb2RpZnkgdGhlIHNjbSByYXRoZXIgdGhh
biBhY3R1YWxseSBtb2RpZnlpbmcgdGhlIHNjbSIpLAogICAgICAgICAgICAgb3B0cGFyc2UubWFr
ZV9vcHRpb24oJy0tc3VmZml4ZXMnLCBkZWZhdWx0PScsJy5qb2luKF9iYXNlbGluZV9zdWZmaXhf
bGlzdCksIGFjdGlvbj0nc3RvcmUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aGVscD0nZmlsZSB0eXBlcyB0byByZWJhc2VsaW5lJyldCiAgICAgICAgIEFic3RyYWN0RGVjbGFy
YXRpdmVDb21tYW5kLl9faW5pdF9fKHNlbGYsIG9wdGlvbnM9b3B0aW9ucykKICAgICAgICAgc2Vs
Zi5fYmFzZWxpbmVfc3VmZml4X2xpc3QgPSBfYmFzZWxpbmVfc3VmZml4X2xpc3QKKyAgICAgICAg
c2VsZi5fZGVmZXJfc2NtX2FkZHMgPSBGYWxzZQogCiAKIGNsYXNzIFJlYmFzZWxpbmVUZXN0KEFi
c3RyYWN0UmViYXNlbGluaW5nQ29tbWFuZCk6CkBAIC0xMDgsNyArMTEwLDcgQEAgY2xhc3MgUmVi
YXNlbGluZVRlc3QoQWJzdHJhY3RSZWJhc2VsaW5pbmdDb21tYW5kKToKICAgICAgICAgICAgIHNl
bGYuX3Rvb2wuZmlsZXN5c3RlbS5tYXliZV9tYWtlX2RpcmVjdG9yeShzZWxmLl90b29sLmZpbGVz
eXN0ZW0uZGlybmFtZShuZXdfYmFzZWxpbmUpKQogICAgICAgICAgICAgc2VsZi5fdG9vbC5maWxl
c3lzdGVtLmNvcHlmaWxlKG9sZF9iYXNlbGluZSwgbmV3X2Jhc2VsaW5lKQogICAgICAgICAgICAg
aWYgbm90IHNlbGYuX3Rvb2wuc2NtKCkuZXhpc3RzKG5ld19iYXNlbGluZSk6Ci0gICAgICAgICAg
ICAgICAgc2VsZi5fdG9vbC5zY20oKS5hZGQobmV3X2Jhc2VsaW5lKQorICAgICAgICAgICAgICAg
IHNlbGYuX2FkZF90b19zY20obmV3X2Jhc2VsaW5lKQogCiAgICAgZGVmIF9zYXZlX2Jhc2VsaW5l
KHNlbGYsIGRhdGEsIHRhcmdldF9iYXNlbGluZSk6CiAgICAgICAgIGlmIG5vdCBkYXRhOgpAQCAt
MTE3LDcgKzExOSwxMyBAQCBjbGFzcyBSZWJhc2VsaW5lVGVzdChBYnN0cmFjdFJlYmFzZWxpbmlu
Z0NvbW1hbmQpOgogICAgICAgICBmaWxlc3lzdGVtLm1heWJlX21ha2VfZGlyZWN0b3J5KGZpbGVz
eXN0ZW0uZGlybmFtZSh0YXJnZXRfYmFzZWxpbmUpKQogICAgICAgICBmaWxlc3lzdGVtLndyaXRl
X2JpbmFyeV9maWxlKHRhcmdldF9iYXNlbGluZSwgZGF0YSkKICAgICAgICAgaWYgbm90IHNlbGYu
X3Rvb2wuc2NtKCkuZXhpc3RzKHRhcmdldF9iYXNlbGluZSk6Ci0gICAgICAgICAgICBzZWxmLl90
b29sLnNjbSgpLmFkZCh0YXJnZXRfYmFzZWxpbmUpCisgICAgICAgICAgICBzZWxmLl9hZGRfdG9f
c2NtKHRhcmdldF9iYXNlbGluZSkKKworICAgIGRlZiBfYWRkX3RvX3NjbShzZWxmLCBwYXRoKToK
KyAgICAgICAgaWYgc2VsZi5fZGVmZXJfc2NtX2FkZHM6CisgICAgICAgICAgICBwcmludCAic2Nt
LWFkZDolcyIgJSBwYXRoCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl90b29sLnNj
bSgpLmFkZChwYXRoKQogCiAgICAgZGVmIF91cGRhdGVfZXhwZWN0YXRpb25zX2ZpbGUoc2VsZiwg
YnVpbGRlcl9uYW1lLCB0ZXN0X25hbWUpOgogICAgICAgICBwb3J0ID0gc2VsZi5fdG9vbC5wb3J0
X2ZhY3RvcnkuZ2V0X2Zyb21fYnVpbGRlcl9uYW1lKGJ1aWxkZXJfbmFtZSkKQEAgLTE1OCw2ICsx
NjYsNyBAQCBjbGFzcyBSZWJhc2VsaW5lVGVzdChBYnN0cmFjdFJlYmFzZWxpbmluZ0NvbW1hbmQp
OgogCiAgICAgZGVmIGV4ZWN1dGUoc2VsZiwgb3B0aW9ucywgYXJncywgdG9vbCk6CiAgICAgICAg
IHNlbGYuX2Jhc2VsaW5lX3N1ZmZpeF9saXN0ID0gb3B0aW9ucy5zdWZmaXhlcy5zcGxpdCgnLCcp
CisgICAgICAgIHNlbGYuX2RlZmVyX3NjbV9hZGRzID0gb3B0aW9ucy5kZWZlcl9zY21fYWRkcwog
CiAgICAgICAgIGlmIGxlbihhcmdzKSA+IDI6CiAgICAgICAgICAgICBwbGF0Zm9ybXNfdG9fbW92
ZV9leGlzdGluZ19iYXNlbGluZXNfdG8gPSBhcmdzWzI6XQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMvZ2FyZGVuaW5nc2VydmVyLnB5IGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMvZ2FyZGVuaW5nc2VydmVyLnB5CmluZGV4IDA5NjYw
ZjYwOTc3YmM1ZTMyZmU5YTg2ZWNkNTEzNjg0ZTY0NGEzMGYuLjVjY2NhZTdlZDg4MmViMjNmZmY1
ZDA2OTRhM2RmZDA2NzEwOWUwZjggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
dG9vbC9zZXJ2ZXJzL2dhcmRlbmluZ3NlcnZlci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3Rvb2wvc2VydmVycy9nYXJkZW5pbmdzZXJ2ZXIucHkKQEAgLTIzLDkgKzIzLDEzIEBACiAj
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCiAKIGltcG9ydCBCYXNlSFRUUFNlcnZlcgoraW1wb3J0IGl0ZXJ0b29scwor
aW1wb3J0IG11bHRpcHJvY2Vzc2luZwogaW1wb3J0IG9zCitpbXBvcnQgdGltZQogCiBmcm9tIHdl
YmtpdHB5LmNvbW1vbi5tZW1vaXplZCBpbXBvcnQgbWVtb2l6ZWQKK2Zyb20gd2Via2l0cHkuY29t
bW9uLmhvc3QgaW1wb3J0IEhvc3QKIGZyb20gd2Via2l0cHkudG9vbC5zZXJ2ZXJzLnJlZmxlY3Rp
b25oYW5kbGVyIGltcG9ydCBSZWZsZWN0aW9uSGFuZGxlcgogZnJvbSB3ZWJraXRweS5sYXlvdXRf
dGVzdHMuY29udHJvbGxlcnMudGVzdF9leHBlY3RhdGlvbnNfZWRpdG9yIGltcG9ydCBCdWdNYW5h
Z2VyLCBUZXN0RXhwZWN0YXRpb25zRWRpdG9yCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5t
b2RlbHMudGVzdF9leHBlY3RhdGlvbnMgaW1wb3J0IFRlc3RFeHBlY3RhdGlvblBhcnNlciwgVGVz
dEV4cGVjdGF0aW9ucywgVGVzdEV4cGVjdGF0aW9uU2VyaWFsaXplcgpAQCAtMTc0LDEyICsxNzgs
MzcgQEAgY2xhc3MgR2FyZGVuaW5nSFRUUFJlcXVlc3RIYW5kbGVyKFJlZmxlY3Rpb25IYW5kbGVy
KToKICAgICBkZWYgcmViYXNlbGluZWFsbChzZWxmKToKICAgICAgICAgIyBGSVhNRTogT3B0aW1p
emUgdGhpcyB0byBydW4gaW4gcGFyYWxsZWwsIGNhY2hlIHppcHMsIGV0Yy4KICAgICAgICAgdGVz
dF9saXN0ID0gc2VsZi5fcmVhZF9lbnRpdHlfYm9keV9hc19qc29uKCkKKworICAgICAgICB0ZXN0
X2J1aWxkZXJfdHVwbGVzID0gW10KKyAgICAgICAgY29tbWFuZHMgPSBbXQorICAgICAgICBwYXRo
X3RvX3dlYmtpdF9wYXRjaCA9IHNlbGYuc2VydmVyLnRvb2wucGF0aCgpCisgICAgICAgIHNjbSA9
IHNlbGYuc2VydmVyLnRvb2wuc2NtKCkKKyAgICAgICAgY3dkID0gc2NtLmNoZWNrb3V0X3Jvb3QK
KyAgICAgICAgZm9yIHRlc3QgaW4gdGVzdF9saXN0OgorICAgICAgICAgICAgZm9yIGJ1aWxkZXIg
aW4gc2VsZi5fYnVpbGRlcnNfdG9fZmV0Y2hfZnJvbSh0ZXN0X2xpc3RbdGVzdF0pOgorICAgICAg
ICAgICAgICAgIHN1ZmZpeGVzID0gJywnLmpvaW4odGVzdF9saXN0W3Rlc3RdW2J1aWxkZXJdKQor
ICAgICAgICAgICAgICAgIGNtZF9saW5lID0gW3BhdGhfdG9fd2Via2l0X3BhdGNoLCAncmViYXNl
bGluZS10ZXN0JywgJy0tZGVmZXItc2NtLWFkZHMnLCAnLS1zdWZmaXhlcycsIHN1ZmZpeGVzLCBi
dWlsZGVyLCB0ZXN0XQorICAgICAgICAgICAgICAgIGNvbW1hbmRzLmFwcGVuZCh0dXBsZShbY21k
X2xpbmUsIGN3ZF0pKQorCisgICAgICAgIHJlYmFzZWxpbmVfc3RhcnQgPSB0aW1lLnRpbWUoKQor
ICAgICAgICBsaXN0c19vZl9maWxlc190b19hZGQgPSBtdWx0aXByb2Nlc3NpbmcuUG9vbCgpLm1h
cChydW5fY29tbWFuZCwgY29tbWFuZHMsIGNodW5rc2l6ZT0xKQorICAgICAgICBhZGRfc3RhcnQg
PSB0aW1lLnRpbWUoKQorICAgICAgICBwcmludCAncmViYXNlbGluaW5nIHRvb2sgJS4yZiBzZWNv
bmRzJyAlIChhZGRfc3RhcnQgLSByZWJhc2VsaW5lX3N0YXJ0KQorICAgICAgICBzY20uYWRkKHBh
dGhzPWxpc3QoaXRlcnRvb2xzLmNoYWluLmZyb21faXRlcmFibGUobGlzdHNfb2ZfZmlsZXNfdG9f
YWRkKSkpCisgICAgICAgIG9wdGltaXplX3N0YXJ0ID0gdGltZS50aW1lKCkKKyAgICAgICAgcHJp
bnQgJ2FkZCB0b29rICUuMmYgc2Vjb25kcycgJSAob3B0aW1pemVfc3RhcnQgLSBhZGRfc3RhcnQp
CisKKyAgICAgICAgIyBvcHRpbWl6aW5nIGJhc2VsaW5lcyBpcyBmYXN0IGFuZCBpbnZvbHZlcyBv
bmx5IGxvY2FsIGZpbGUgb3BlcmF0aW9ucywgc28gd2UgZG9uJ3QgYm90aGVyIHJ1bm5pbmcgdGhp
cyBpbiBwYXJhbGxlbC4KICAgICAgICAgZm9yIHRlc3QgaW4gdGVzdF9saXN0OgotICAgICAgICAg
ICAgYWxsX3N1ZmZpeGVzID0gc2V0KCkKLSAgICAgICAgICAgIGJ1aWxkZXJzID0gc2VsZi5fYnVp
bGRlcnNfdG9fZmV0Y2hfZnJvbSh0ZXN0X2xpc3RbdGVzdF0pCi0gICAgICAgICAgICBmb3IgYnVp
bGRlciBpbiBidWlsZGVyczoKLSAgICAgICAgICAgICAgICBzdWZmaXhlcyA9IHRlc3RfbGlzdFt0
ZXN0XVtidWlsZGVyXQotICAgICAgICAgICAgICAgIGFsbF9zdWZmaXhlcy51cGRhdGUoc3VmZml4
ZXMpCi0gICAgICAgICAgICAgICAgc2VsZi5fcnVuX3dlYmtpdF9wYXRjaChbJ3JlYmFzZWxpbmUt
dGVzdCcsICctLXN1ZmZpeGVzJywgJywnLmpvaW4oc3VmZml4ZXMpLCBidWlsZGVyLCB0ZXN0XSkK
KyAgICAgICAgICAgIGFsbF9zdWZmaXhlcyA9IHNldChpdGVydG9vbHMuY2hhaW4uZnJvbV9pdGVy
YWJsZSh0ZXN0X2xpc3RbdGVzdF0uaXRlcnZhbHVlcygpKSkKICAgICAgICAgICAgIHNlbGYuX3J1
bl93ZWJraXRfcGF0Y2goWydvcHRpbWl6ZS1iYXNlbGluZXMnLCAnLS1zdWZmaXhlcycsICcsJy5q
b2luKGFsbF9zdWZmaXhlcyksIHRlc3RdKQorICAgICAgICBwcmludCAnb3B0aW1pemUgdG9vayAl
LjJmIHNlY29uZHMnICUgKHRpbWUudGltZSgpIC0gb3B0aW1pemVfc3RhcnQpCisKICAgICAgICAg
c2VsZi5fc2VydmVfdGV4dCgnc3VjY2VzcycpCisKKworZGVmIHJ1bl9jb21tYW5kKGNtZF9saW5l
X2FuZF9jd2QpOgorICAgIChjbWRfbGluZSwgY3dkKSA9IGNtZF9saW5lX2FuZF9jd2QKKyAgICBo
b3N0ID0gSG9zdCgpCisgICAgb3V0cHV0ID0gaG9zdC5leGVjdXRpdmUucnVuX2NvbW1hbmQoY21k
X2xpbmUsIGN3ZD1jd2QpCisgICAgcmV0dXJuIFtsaW5lLnJlcGxhY2UoJ3NjbS1hZGQ6JywgJycp
IGZvciBsaW5lIGluIG91dHB1dC5zcGxpdGxpbmVzKCkgaWYgbGluZS5zdGFydHN3aXRoKCdzY20t
YWRkOicpXQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144152</attachid>
            <date>2012-05-25 14:49:06 -0700</date>
            <delta_ts>2012-05-25 15:45:04 -0700</delta_ts>
            <desc>clean up, add tests</desc>
            <filename>bug-87451-20120525144905.patch</filename>
            <type>text/plain</type>
            <size>11504</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4NTU3CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOTgwYzliYzk5MjEzNDhjYThmMTQwYWJjMzA1ZjQ2Yzc1
YWYyMDYxYS4uNTY3MTlhODI5YzYzZDgzY2RhNWU5ZmIwNDk4YjM0NDljZjZiYWU4ZSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4
IEBACisyMDEyLTA1LTI0ICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIGdhcmRlbi1vLW1hdGljIHNob3VsZCByZWJhc2VsaW5lIGJhc2VsaW5lcyBpbiBwYXJh
bGxlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODc0
NTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9yZWJhc2VsaW5lLnB5OgorICAgICAgICAoQWJz
dHJhY3RSZWJhc2VsaW5pbmdDb21tYW5kLl9faW5pdF9fKToKKyAgICAgICAgKFJlYmFzZWxpbmVU
ZXN0Ll9jb3B5X2V4aXN0aW5nX2Jhc2VsaW5lKToKKyAgICAgICAgKFJlYmFzZWxpbmVUZXN0Ll9z
YXZlX2Jhc2VsaW5lKToKKyAgICAgICAgKFJlYmFzZWxpbmVUZXN0KToKKyAgICAgICAgKFJlYmFz
ZWxpbmVUZXN0Ll9hZGRfdG9fc2NtKToKKyAgICAgICAgKFJlYmFzZWxpbmVUZXN0LmV4ZWN1dGUp
OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL2dhcmRlbmluZ3NlcnZl
ci5weToKKyAgICAgICAgKEdhcmRlbmluZ0hUVFBSZXF1ZXN0SGFuZGxlci5yZWJhc2VsaW5lYWxs
KToKKyAgICAgICAgKHJ1bl9jb21tYW5kKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9zeXN0ZW0vZXhlY3V0aXZlLnB5OgorICAgICAgICAoRXhlY3V0aXZlLnJ1bl9pbl9wYXJh
bGxlbCk6CisgICAgICAgIChfcnVuX2NvbW1hbmRfdGh1bmspOgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmVfbW9jay5weToKKyAgICAgICAgKE1vY2tF
eGVjdXRpdmUucnVuX2luX3BhcmFsbGVsKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9zeXN0ZW0vZXhlY3V0aXZlX3VuaXR0ZXN0LnB5OgorICAgICAgICAoRXhlY3V0aXZlVGVz
dC50ZXN0X3J1bl9pbl9wYXJhbGxlbCk6CisKIDIwMTItMDUtMjUgIERpcmsgUHJhbmtlICA8ZHBy
YW5rZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgd2Via2l0cHk6IGNoYW5nZSBzY20uYWRkKCks
IHNjbS5kZWxldGUoKSB0byBhY2NlcHQgbXVsdGlwbGUgcGF0aHMKZGlmZiAtLWdpdCBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmUucHkgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlLnB5CmluZGV4IDQzZGNiY2ExYjM4
Y2IyMTgyY2I3OTA1MWZkMWY1ZGNlZjYwNzVhMTcuLmVhMWI2ZGJiMDQ4OGE3ZGM0NDM5MWIxMGM3
MTMzY2RkMzI1MDkxY2QgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L3N5c3RlbS9leGVjdXRpdmUucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24v
c3lzdGVtL2V4ZWN1dGl2ZS5weQpAQCAtNDUxLDMgKzQ1MSwxNCBAQCBjbGFzcyBFeGVjdXRpdmUo
b2JqZWN0KToKIAogICAgIGRlZiBwb3BlbihzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAg
ICByZXR1cm4gc3VicHJvY2Vzcy5Qb3BlbigqYXJncywgKiprd2FyZ3MpCisKKyAgICBkZWYgcnVu
X2luX3BhcmFsbGVsKHNlbGYsIGNvbW1hbmRfbGluZXNfYW5kX2N3ZHMsIHByb2Nlc3Nlcz1Ob25l
KToKKyAgICAgICAgIiIiUnVucyBhIGxpc3Qgb2YgKGNtZF9saW5lIGxpc3QsIGN3ZCBzdHJpbmcp
IHR1cGxlcyBpbiBwYXJhbGxlbCBhbmQgcmV0dXJucyBhIGxpc3Qgb2YgKHJldGNvZGUsIHN0ZG91
dCwgc3RkZXJyKSB0dXBsZXMuIiIiCisgICAgICAgIHJldHVybiBtdWx0aXByb2Nlc3NpbmcuUG9v
bChwcm9jZXNzZXM9cHJvY2Vzc2VzKS5tYXAoX3J1bl9jb21tYW5kX3RodW5rLCBjb21tYW5kX2xp
bmVzX2FuZF9jd2RzKQorCisKK2RlZiBfcnVuX2NvbW1hbmRfdGh1bmsoY21kX2xpbmVfYW5kX2N3
ZCk6CisgICAgKGNtZF9saW5lLCBjd2QpID0gY21kX2xpbmVfYW5kX2N3ZAorICAgIHByb2MgPSBz
dWJwcm9jZXNzLlBvcGVuKGNtZF9saW5lLCBjd2Q9Y3dkLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBF
LCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgIHN0ZG91dCwgc3RkZXJyID0gcHJvYy5jb21t
dW5pY2F0ZSgpCisgICAgcmV0dXJuIChwcm9jLnJldHVybmNvZGUsIHN0ZG91dCwgc3RkZXJyKQpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2
ZV9tb2NrLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2
ZV9tb2NrLnB5CmluZGV4IGQ1N2E1YzQ4MDgwOTM4YmFhNWYxZWE1YmQwMjBlZTc0Y2YwNzJlZDMu
LmIwZGI0OGNhM2NhNDVhYWMxODM5NTUwY2I5M2Q1MDQ4NmQzYTFhZjQgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmVfbW9jay5weQorKysg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlX21vY2sucHkK
QEAgLTEwOCw2ICsxMDgsMTEgQEAgY2xhc3MgTW9ja0V4ZWN1dGl2ZShvYmplY3QpOgogICAgICAg
ICAgICAgc2VsZi5fcHJvYyA9IE1vY2tQcm9jZXNzKCkKICAgICAgICAgcmV0dXJuIHNlbGYuX3By
b2MKIAorICAgIGRlZiBydW5faW5fcGFyYWxsZWwoc2VsZiwgY29tbWFuZHMpOgorICAgICAgICBj
b21tYW5kX291dHB1dHMgPSBbXQorICAgICAgICBmb3IgY21kX2xpbmUsIGN3ZCBpbiBjb21tYW5k
czoKKyAgICAgICAgICAgIGNvbW1hbmRfb3V0cHV0cy5hcHBlbmQoWzAsIHNlbGYucnVuX2NvbW1h
bmQoY21kX2xpbmUsIGN3ZD1jd2QpLCAnJ10pCisgICAgICAgIHJldHVybiBjb21tYW5kX291dHB1
dHMKIAogY2xhc3MgTW9ja0V4ZWN1dGl2ZTIob2JqZWN0KToKICAgICBAc3RhdGljbWV0aG9kCmRp
ZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZl
X3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1
dGl2ZV91bml0dGVzdC5weQppbmRleCBjNjNmZjM1NTVhZTE4ZTcwMTMwMjE5MGI3YmFiN2U5ZGVl
N2E4N2FkLi40NjZlMmVjMDIwYjljODNmNDI5MjUzYTk5YzdmOWI0ZjdlN2U3Njc3IDEwMDY0NAot
LS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlX3VuaXR0
ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9leGVjdXRp
dmVfdW5pdHRlc3QucHkKQEAgLTMxLDYgKzMxLDcgQEAgaW1wb3J0IG9zCiBpbXBvcnQgc2lnbmFs
CiBpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHN5cworaW1wb3J0IHRpbWUKIGltcG9ydCB1bml0
dGVzdAogCiAjIFNpbmNlIHdlIGV4ZWN1dGUgdGhpcyBzY3JpcHQgZGlyZWN0bHkgYXMgcGFydCBv
ZiB0aGUgdW5pdCB0ZXN0cywgd2UgbmVlZCB0byBlbnN1cmUKQEAgLTIxNiw2ICsyMTcsMTggQEAg
Y2xhc3MgRXhlY3V0aXZlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHBpZHMgPSBl
eGVjdXRpdmUucnVubmluZ19waWRzKCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLmdldHBp
ZCgpIGluIHBpZHMpCiAKKyAgICBkZWYgdGVzdF9ydW5faW5fcGFyYWxsZWwoc2VsZik6CisgICAg
ICAgIE5VTV9QUk9DRVNTRVMgPSA0CisgICAgICAgIERFTEFZX1NFQ1MgPSAwLjI1CisgICAgICAg
IGNtZF9saW5lID0gW3N5cy5leGVjdXRhYmxlLCAnLWMnLCAnaW1wb3J0IHRpbWU7IHRpbWUuc2xl
ZXAoJWYpOyBwcmludCAiaGVsbG8iJyAlIERFTEFZX1NFQ1NdCisgICAgICAgIGN3ZCA9IG9zLmdl
dGN3ZCgpCisgICAgICAgIGNvbW1hbmRzID0gW3R1cGxlKFtjbWRfbGluZSwgY3dkXSldICogTlVN
X1BST0NFU1NFUworICAgICAgICBzdGFydCA9IHRpbWUudGltZSgpCisgICAgICAgIGNvbW1hbmRf
b3V0cHV0cyA9IEV4ZWN1dGl2ZSgpLnJ1bl9pbl9wYXJhbGxlbChjb21tYW5kcywgcHJvY2Vzc2Vz
PU5VTV9QUk9DRVNTRVMpCisgICAgICAgIGRvbmUgPSB0aW1lLnRpbWUoKQorICAgICAgICBzZWxm
LmFzc2VydFRydWUoZG9uZSAtIHN0YXJ0IDwgTlVNX1BST0NFU1NFUyAqIERFTEFZX1NFQ1MpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFtvdXRwdXRbMV0gZm9yIG91dHB1dCBpbiBjb21tYW5k
X291dHB1dHNdLCBbImhlbGxvXG4iXSAqIE5VTV9QUk9DRVNTRVMpCisKIAogZGVmIG1haW4ocGxh
dGZvcm0sIHN0ZGluLCBzdGRvdXQsIGNtZCwgYXJncyk6CiAgICAgaWYgcGxhdGZvcm0gPT0gJ3dp
bjMyJyBhbmQgaGFzYXR0cihzdGRvdXQsICdmaWxlbm8nKToKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9yZWJhc2VsaW5lLnB5IGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3JlYmFzZWxpbmUucHkKaW5kZXggMzA0MDk3ODNmN2Yw
NDYyNzVkZGJiMDYzOWVkYzg4NjQ4ZDczYTFlMS4uNDIwODk3M2M0YWY4ODMyNzg1YTljZWYyZjBi
NTU0MWVmYTI3ZmZmOSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2Nv
bW1hbmRzL3JlYmFzZWxpbmUucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2Nv
bW1hbmRzL3JlYmFzZWxpbmUucHkKQEAgLTU5LDEwICs1OSwxMiBAQCBkZWYgX2Jhc2VsaW5lX25h
bWUoZnMsIHRlc3RfbmFtZSwgc3VmZml4KToKIGNsYXNzIEFic3RyYWN0UmViYXNlbGluaW5nQ29t
bWFuZChBYnN0cmFjdERlY2xhcmF0aXZlQ29tbWFuZCk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYp
OgogICAgICAgICBvcHRpb25zID0gWworICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24o
Ii0tZGVmZXItc2NtLWFkZHMiLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSJPdXRwdXQgY29t
bWFuZHMgdG8gbW9kaWZ5IHRoZSBzY20gcmF0aGVyIHRoYW4gYWN0dWFsbHkgbW9kaWZ5aW5nIHRo
ZSBzY20iKSwKICAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCctLXN1ZmZpeGVzJywg
ZGVmYXVsdD0nLCcuam9pbihfYmFzZWxpbmVfc3VmZml4X2xpc3QpLCBhY3Rpb249J3N0b3JlJywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2ZpbGUgdHlwZXMgdG8gcmVi
YXNlbGluZScpXQogICAgICAgICBBYnN0cmFjdERlY2xhcmF0aXZlQ29tbWFuZC5fX2luaXRfXyhz
ZWxmLCBvcHRpb25zPW9wdGlvbnMpCiAgICAgICAgIHNlbGYuX2Jhc2VsaW5lX3N1ZmZpeF9saXN0
ID0gX2Jhc2VsaW5lX3N1ZmZpeF9saXN0CisgICAgICAgIHNlbGYuX2RlZmVyX3NjbV9hZGRzID0g
RmFsc2UKIAogCiBjbGFzcyBSZWJhc2VsaW5lVGVzdChBYnN0cmFjdFJlYmFzZWxpbmluZ0NvbW1h
bmQpOgpAQCAtMTA4LDcgKzExMCw3IEBAIGNsYXNzIFJlYmFzZWxpbmVUZXN0KEFic3RyYWN0UmVi
YXNlbGluaW5nQ29tbWFuZCk6CiAgICAgICAgICAgICBzZWxmLl90b29sLmZpbGVzeXN0ZW0ubWF5
YmVfbWFrZV9kaXJlY3Rvcnkoc2VsZi5fdG9vbC5maWxlc3lzdGVtLmRpcm5hbWUobmV3X2Jhc2Vs
aW5lKSkKICAgICAgICAgICAgIHNlbGYuX3Rvb2wuZmlsZXN5c3RlbS5jb3B5ZmlsZShvbGRfYmFz
ZWxpbmUsIG5ld19iYXNlbGluZSkKICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl90b29sLnNjbSgp
LmV4aXN0cyhuZXdfYmFzZWxpbmUpOgotICAgICAgICAgICAgICAgIHNlbGYuX3Rvb2wuc2NtKCku
YWRkKG5ld19iYXNlbGluZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9hZGRfdG9fc2NtKG5ld19i
YXNlbGluZSkKIAogICAgIGRlZiBfc2F2ZV9iYXNlbGluZShzZWxmLCBkYXRhLCB0YXJnZXRfYmFz
ZWxpbmUpOgogICAgICAgICBpZiBub3QgZGF0YToKQEAgLTExNyw3ICsxMTksMTMgQEAgY2xhc3Mg
UmViYXNlbGluZVRlc3QoQWJzdHJhY3RSZWJhc2VsaW5pbmdDb21tYW5kKToKICAgICAgICAgZmls
ZXN5c3RlbS5tYXliZV9tYWtlX2RpcmVjdG9yeShmaWxlc3lzdGVtLmRpcm5hbWUodGFyZ2V0X2Jh
c2VsaW5lKSkKICAgICAgICAgZmlsZXN5c3RlbS53cml0ZV9iaW5hcnlfZmlsZSh0YXJnZXRfYmFz
ZWxpbmUsIGRhdGEpCiAgICAgICAgIGlmIG5vdCBzZWxmLl90b29sLnNjbSgpLmV4aXN0cyh0YXJn
ZXRfYmFzZWxpbmUpOgotICAgICAgICAgICAgc2VsZi5fdG9vbC5zY20oKS5hZGQodGFyZ2V0X2Jh
c2VsaW5lKQorICAgICAgICAgICAgc2VsZi5fYWRkX3RvX3NjbSh0YXJnZXRfYmFzZWxpbmUpCisK
KyAgICBkZWYgX2FkZF90b19zY20oc2VsZiwgcGF0aCk6CisgICAgICAgIGlmIHNlbGYuX2RlZmVy
X3NjbV9hZGRzOgorICAgICAgICAgICAgcHJpbnQgInNjbS1hZGQ6JXMiICUgcGF0aAorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fdG9vbC5zY20oKS5hZGQocGF0aCkKIAogICAgIGRl
ZiBfdXBkYXRlX2V4cGVjdGF0aW9uc19maWxlKHNlbGYsIGJ1aWxkZXJfbmFtZSwgdGVzdF9uYW1l
KToKICAgICAgICAgcG9ydCA9IHNlbGYuX3Rvb2wucG9ydF9mYWN0b3J5LmdldF9mcm9tX2J1aWxk
ZXJfbmFtZShidWlsZGVyX25hbWUpCkBAIC0xNTgsNiArMTY2LDcgQEAgY2xhc3MgUmViYXNlbGlu
ZVRlc3QoQWJzdHJhY3RSZWJhc2VsaW5pbmdDb21tYW5kKToKIAogICAgIGRlZiBleGVjdXRlKHNl
bGYsIG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgogICAgICAgICBzZWxmLl9iYXNlbGluZV9zdWZmaXhf
bGlzdCA9IG9wdGlvbnMuc3VmZml4ZXMuc3BsaXQoJywnKQorICAgICAgICBzZWxmLl9kZWZlcl9z
Y21fYWRkcyA9IG9wdGlvbnMuZGVmZXJfc2NtX2FkZHMKIAogICAgICAgICBpZiBsZW4oYXJncykg
PiAyOgogICAgICAgICAgICAgcGxhdGZvcm1zX3RvX21vdmVfZXhpc3RpbmdfYmFzZWxpbmVzX3Rv
ID0gYXJnc1syOl0KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2
ZXJzL2dhcmRlbmluZ3NlcnZlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2
ZXJzL2dhcmRlbmluZ3NlcnZlci5weQppbmRleCAwOTY2MGY2MDk3N2JjNWUzMmZlOWE4NmVjZDUx
MzY4NGU2NDRhMzBmLi4yZTNjZGJiMmY0YTA2NThhMjY1YTU4MzNkMjQ5YmJjZmMzNjAyOTRmIDEw
MDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2VydmVycy9nYXJkZW5pbmdz
ZXJ2ZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMvZ2FyZGVu
aW5nc2VydmVyLnB5CkBAIC0yNiw2ICsyNiw3IEBAIGltcG9ydCBCYXNlSFRUUFNlcnZlcgogaW1w
b3J0IG9zCiAKIGZyb20gd2Via2l0cHkuY29tbW9uLm1lbW9pemVkIGltcG9ydCBtZW1vaXplZAor
ZnJvbSB3ZWJraXRweS5jb21tb24uaG9zdCBpbXBvcnQgSG9zdAogZnJvbSB3ZWJraXRweS50b29s
LnNlcnZlcnMucmVmbGVjdGlvbmhhbmRsZXIgaW1wb3J0IFJlZmxlY3Rpb25IYW5kbGVyCiBmcm9t
IHdlYmtpdHB5LmxheW91dF90ZXN0cy5jb250cm9sbGVycy50ZXN0X2V4cGVjdGF0aW9uc19lZGl0
b3IgaW1wb3J0IEJ1Z01hbmFnZXIsIFRlc3RFeHBlY3RhdGlvbnNFZGl0b3IKIGZyb20gd2Via2l0
cHkubGF5b3V0X3Rlc3RzLm1vZGVscy50ZXN0X2V4cGVjdGF0aW9ucyBpbXBvcnQgVGVzdEV4cGVj
dGF0aW9uUGFyc2VyLCBUZXN0RXhwZWN0YXRpb25zLCBUZXN0RXhwZWN0YXRpb25TZXJpYWxpemVy
CkBAIC0xNzIsMTQgKzE3MywzNyBAQCBjbGFzcyBHYXJkZW5pbmdIVFRQUmVxdWVzdEhhbmRsZXIo
UmVmbGVjdGlvbkhhbmRsZXIpOgogICAgICAgICByZXR1cm4gYnVpbGRlcnNfdG9fZmFsbGJhY2tf
cGF0aHMua2V5cygpCiAKICAgICBkZWYgcmViYXNlbGluZWFsbChzZWxmKToKLSAgICAgICAgIyBG
SVhNRTogT3B0aW1pemUgdGhpcyB0byBydW4gaW4gcGFyYWxsZWwsIGNhY2hlIHppcHMsIGV0Yy4K
ICAgICAgICAgdGVzdF9saXN0ID0gc2VsZi5fcmVhZF9lbnRpdHlfYm9keV9hc19qc29uKCkKKwor
ICAgICAgICB0ZXN0X2J1aWxkZXJfdHVwbGVzID0gW10KKyAgICAgICAgY29tbWFuZHMgPSBbXQor
ICAgICAgICBwYXRoX3RvX3dlYmtpdF9wYXRjaCA9IHNlbGYuc2VydmVyLnRvb2wucGF0aCgpCisg
ICAgICAgIHNjbSA9IHNlbGYuc2VydmVyLnRvb2wuc2NtKCkKKyAgICAgICAgY3dkID0gc2NtLmNo
ZWNrb3V0X3Jvb3QKKworICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0X2xpc3Q6CisgICAgICAgICAg
ICBmb3IgYnVpbGRlciBpbiBzZWxmLl9idWlsZGVyc190b19mZXRjaF9mcm9tKHRlc3RfbGlzdFt0
ZXN0XSk6CisgICAgICAgICAgICAgICAgc3VmZml4ZXMgPSAnLCcuam9pbih0ZXN0X2xpc3RbdGVz
dF1bYnVpbGRlcl0pCisgICAgICAgICAgICAgICAgY21kX2xpbmUgPSBbcGF0aF90b193ZWJraXRf
cGF0Y2gsICdyZWJhc2VsaW5lLXRlc3QnLCAnLS1kZWZlci1zY20tYWRkcycsICctLXN1ZmZpeGVz
Jywgc3VmZml4ZXMsIGJ1aWxkZXIsIHRlc3RdCisgICAgICAgICAgICAgICAgY29tbWFuZHMuYXBw
ZW5kKHR1cGxlKFtjbWRfbGluZSwgY3dkXSkpCisgICAgICAgIGNvbW1hbmRfcmVzdWx0cyA9IHNl
bGYuc2VydmVyLnRvb2wuZXhlY3V0aXZlLnJ1bl9pbl9wYXJhbGxlbChjb21tYW5kcykKKworICAg
ICAgICBmaWxlc190b19hZGQgPSBzZXQoKQorICAgICAgICBmb3Igb3V0cHV0IGluIFtyZXN1bHRb
MV0gZm9yIHJlc3VsdCBpbiBjb21tYW5kX3Jlc3VsdHNdOgorICAgICAgICAgICAgZmlsZXNfdG9f
YWRkLnVwZGF0ZShsaW5lLnJlcGxhY2UoJ3NjbS1hZGQ6JywgJycpIGZvciBsaW5lIGluIG91dHB1
dC5zcGxpdGxpbmVzKCkgaWYgbGluZS5zdGFydHN3aXRoKCdzY20tYWRkOicpKQorICAgICAgICBz
Y20uYWRkX2xpc3QobGlzdChmaWxlc190b19hZGQpKQorCisgICAgICAgICMgRklYTUU6IHNob3Vs
ZCB3ZSBydW4gdGhpcyBpbiBwYXJhbGxlbCBhcyB3ZWxsPwogICAgICAgICBmb3IgdGVzdCBpbiB0
ZXN0X2xpc3Q6CiAgICAgICAgICAgICBhbGxfc3VmZml4ZXMgPSBzZXQoKQotICAgICAgICAgICAg
YnVpbGRlcnMgPSBzZWxmLl9idWlsZGVyc190b19mZXRjaF9mcm9tKHRlc3RfbGlzdFt0ZXN0XSkK
LSAgICAgICAgICAgIGZvciBidWlsZGVyIGluIGJ1aWxkZXJzOgotICAgICAgICAgICAgICAgIHN1
ZmZpeGVzID0gdGVzdF9saXN0W3Rlc3RdW2J1aWxkZXJdCi0gICAgICAgICAgICAgICAgYWxsX3N1
ZmZpeGVzLnVwZGF0ZShzdWZmaXhlcykKLSAgICAgICAgICAgICAgICBzZWxmLl9ydW5fd2Via2l0
X3BhdGNoKFsncmViYXNlbGluZS10ZXN0JywgJy0tc3VmZml4ZXMnLCAnLCcuam9pbihzdWZmaXhl
cyksIGJ1aWxkZXIsIHRlc3RdKQorICAgICAgICAgICAgZm9yIGJ1aWxkZXIgaW4gc2VsZi5fYnVp
bGRlcnNfdG9fZmV0Y2hfZnJvbSh0ZXN0X2xpc3RbdGVzdF0pOgorICAgICAgICAgICAgICAgIGFs
bF9zdWZmaXhlcy51cGRhdGUodGVzdF9saXN0W3Rlc3RdW2J1aWxkZXJdKQogICAgICAgICAgICAg
c2VsZi5fcnVuX3dlYmtpdF9wYXRjaChbJ29wdGltaXplLWJhc2VsaW5lcycsICctLXN1ZmZpeGVz
JywgJywnLmpvaW4oYWxsX3N1ZmZpeGVzKSwgdGVzdF0pCisKICAgICAgICAgc2VsZi5fc2VydmVf
dGV4dCgnc3VjY2VzcycpCisKKworZGVmIHJ1bl9jb21tYW5kKGNtZF9saW5lX2FuZF9jd2QpOgor
ICAgIChjbWRfbGluZSwgY3dkKSA9IGNtZF9saW5lX2FuZF9jd2QKKyAgICBob3N0ID0gSG9zdCgp
CisgICAgb3V0cHV0ID0gaG9zdC5leGVjdXRpdmUucnVuX2NvbW1hbmQoY21kX2xpbmUsIGN3ZD1j
d2QpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2VydmVycy9nYXJk
ZW5pbmdzZXJ2ZXJfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2Vy
dmVycy9nYXJkZW5pbmdzZXJ2ZXJfdW5pdHRlc3QucHkKaW5kZXggZTE3OThmNjVlYmIyNjUwNGVk
N2Y2YmVmNjc2M2E3MTE5MzI2YTFlZC4uNjBlZTRjYzg1ZWU0YjQ3NGQ2YjE3NjQ4YTkwZTZkOWIx
MTg3YzYzMSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMv
Z2FyZGVuaW5nc2VydmVyX3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
dG9vbC9zZXJ2ZXJzL2dhcmRlbmluZ3NlcnZlcl91bml0dGVzdC5weQpAQCAtMTg2LDcgKzE4Niw3
IEBAIGNsYXNzIEdhcmRlbmluZ1NlcnZlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAg
ICAgICAgIk1PQ0sgYnVpbGRlciI6IHsicG9ydF9uYW1lIjogInRlc3QtbWFjLWxlb3BhcmQiLCAi
c3BlY2lmaWVycyI6IHNldChbIm1vY2stc3BlY2lmaWVyIl0pfSwKICAgICAgICAgICAgICJNT0NL
IGJ1aWxkZXIgKERlYnVnKSI6IHsicG9ydF9uYW1lIjogInRlc3QtbWFjLWxlb3BhcmQiLCAic3Bl
Y2lmaWVycyI6IHNldChbIm1vY2stc3BlY2lmaWVyIiwgImRlYnVnIl0pfSwKICAgICAgICAgfQot
ICAgICAgICBleHBlY3RlZF9zdGRlcnIgPSAiTU9DSyBydW5fY29tbWFuZDogWydlY2hvJywgJ3Jl
YmFzZWxpbmUtdGVzdCcsICctLXN1ZmZpeGVzJywgdSclcycsIHUnJXMnLCB1J3VzZXItc2NyaXB0
cy9hbm90aGVyLXRlc3QuaHRtbCddLCBjd2Q9L21vY2stY2hlY2tvdXRcbk1PQ0sgcnVuX2NvbW1h
bmQ6IFsnZWNobycsICdvcHRpbWl6ZS1iYXNlbGluZXMnLCAnLS1zdWZmaXhlcycsIHUnJXMnLCB1
J3VzZXItc2NyaXB0cy9hbm90aGVyLXRlc3QuaHRtbCddLCBjd2Q9L21vY2stY2hlY2tvdXRcbiIK
KyAgICAgICAgZXhwZWN0ZWRfc3RkZXJyID0gIk1PQ0sgcnVuX2NvbW1hbmQ6IFsnZWNobycsICdy
ZWJhc2VsaW5lLXRlc3QnLCAnLS1kZWZlci1zY20tYWRkcycsICctLXN1ZmZpeGVzJywgdSclcycs
IHUnJXMnLCB1J3VzZXItc2NyaXB0cy9hbm90aGVyLXRlc3QuaHRtbCddLCBjd2Q9L21vY2stY2hl
Y2tvdXRcbk1PQ0sgcnVuX2NvbW1hbmQ6IFsnZWNobycsICdvcHRpbWl6ZS1iYXNlbGluZXMnLCAn
LS1zdWZmaXhlcycsIHUnJXMnLCB1J3VzZXItc2NyaXB0cy9hbm90aGVyLXRlc3QuaHRtbCddLCBj
d2Q9L21vY2stY2hlY2tvdXRcbiIKICAgICAgICAgZXhwZWN0ZWRfc3Rkb3V0ID0gIj09IEJlZ2lu
IFJlc3BvbnNlID09XG5zdWNjZXNzXG49PSBFbmQgUmVzcG9uc2UgPT1cbiIKICAgICAgICAgc2Vs
Zi5fcG9zdF90b19wYXRoKCIvcmViYXNlbGluZWFsbCIsIGJvZHk9J3sidXNlci1zY3JpcHRzL2Fu
b3RoZXItdGVzdC5odG1sIjp7Ik1PQ0sgYnVpbGRlciI6IFsidHh0IiwicG5nIl19fScsIGV4cGVj
dGVkX3N0ZGVycj1leHBlY3RlZF9zdGRlcnIgJSAoJ3R4dCxwbmcnLCAnTU9DSyBidWlsZGVyJywg
J3R4dCxwbmcnKSwgZXhwZWN0ZWRfc3Rkb3V0PWV4cGVjdGVkX3N0ZG91dCkKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144160</attachid>
            <date>2012-05-25 15:45:08 -0700</date>
            <delta_ts>2012-05-25 20:10:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87451-20120525154507.patch</filename>
            <type>text/plain</type>
            <size>13915</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4NTU3CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOTgwYzliYzk5MjEzNDhjYThmMTQwYWJjMzA1ZjQ2Yzc1
YWYyMDYxYS4uZGU5ZDQ2Mjg3ZGRiZjBkYjZjMTFiMjU4NDU3ODBlYzg3ZDIxMDIxNSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0
IEBACisyMDEyLTA1LTI0ICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIGdhcmRlbi1vLW1hdGljIHNob3VsZCByZWJhc2VsaW5lIGJhc2VsaW5lcyBpbiBwYXJh
bGxlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODc0
NTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IG1vZGlmaWVzIGdhcmRlbi1vLW1hdGljIHNvIHRoYXQgd2Ugd2lsbCBmZXRjaCBhbGwKKyAgICAg
ICAgb2YgdGhlIGJhc2VsaW5lcyBpbiBwYXJhbGxlbCBmcm9tIHRoZSBib3RzLCBhbmQgdGhlbgor
ICAgICAgICBvcHRpbWl6ZSB0aGUgYmFzZWxpbmVzIHNlcmlhbGx5IChzaW5jZSB0aGF0IHNob3Vs
ZCBiZSBmYWlybHkKKyAgICAgICAgcXVpY2sgYW5kIHdlIGdldCBpbnRvIHRyb3VibGUgaWYgd2Ug
b3B0aW1pemUgaW4gcGFyYWxsZWwgZHVlCisgICAgICAgIHRvIGNvbmN1cnJlbnQgYWNjZXNzIHRv
IHRoZSBzb3VyY2UgY29udHJvbCBzeXN0ZW0pLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS90b29sL2NvbW1hbmRzL3JlYmFzZWxpbmUucHk6CisgICAgICAgIChBYnN0cmFjdFJlYmFzZWxp
bmluZ0NvbW1hbmQuX19pbml0X18pOgorICAgICAgICAoUmViYXNlbGluZVRlc3QuX2NvcHlfZXhp
c3RpbmdfYmFzZWxpbmUpOgorICAgICAgICAoUmViYXNlbGluZVRlc3QuX3NhdmVfYmFzZWxpbmUp
OgorICAgICAgICAoUmViYXNlbGluZVRlc3QpOgorICAgICAgICAoUmViYXNlbGluZVRlc3QuX2Fk
ZF90b19zY20pOgorICAgICAgICAoUmViYXNlbGluZVRlc3QuZXhlY3V0ZSk6CisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMvZ2FyZGVuaW5nc2VydmVyLnB5OgorICAgICAg
ICAoR2FyZGVuaW5nSFRUUFJlcXVlc3RIYW5kbGVyLnJlYmFzZWxpbmVhbGwpOgorICAgICAgICAo
cnVuX2NvbW1hbmQpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9l
eGVjdXRpdmUucHk6CisgICAgICAgIChFeGVjdXRpdmUucnVuX2luX3BhcmFsbGVsKToKKyAgICAg
ICAgKF9ydW5fY29tbWFuZF90aHVuayk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21t
b24vc3lzdGVtL2V4ZWN1dGl2ZV9tb2NrLnB5OgorICAgICAgICAoTW9ja0V4ZWN1dGl2ZS5ydW5f
aW5fcGFyYWxsZWwpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9l
eGVjdXRpdmVfdW5pdHRlc3QucHk6CisgICAgICAgIChFeGVjdXRpdmVUZXN0LnRlc3RfcnVuX2lu
X3BhcmFsbGVsKToKKwogMjAxMi0wNS0yNSAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICB3ZWJraXRweTogY2hhbmdlIHNjbS5hZGQoKSwgc2NtLmRlbGV0ZSgp
IHRvIGFjY2VwdCBtdWx0aXBsZSBwYXRocwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3N5c3RlbS9leGVjdXRpdmUucHkKaW5kZXggNDNkY2JjYTFiMzhjYjIxODJjYjc5MDUx
ZmQxZjVkY2VmNjA3NWExNy4uODc1OWM3MTlhODI0NDVkOTM0ZmU5MDE0NzFmM2FhMDk3Mjk5MDVh
MSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1
dGl2ZS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0
aXZlLnB5CkBAIC00NTEsMyArNDUxLDE1IEBAIGNsYXNzIEV4ZWN1dGl2ZShvYmplY3QpOgogCiAg
ICAgZGVmIHBvcGVuKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgIHJldHVybiBzdWJw
cm9jZXNzLlBvcGVuKCphcmdzLCAqKmt3YXJncykKKworICAgIGRlZiBydW5faW5fcGFyYWxsZWwo
c2VsZiwgY29tbWFuZF9saW5lc19hbmRfY3dkcywgcHJvY2Vzc2VzPU5vbmUpOgorICAgICAgICAi
IiJSdW5zIGEgbGlzdCBvZiAoY21kX2xpbmUgbGlzdCwgY3dkIHN0cmluZykgdHVwbGVzIGluIHBh
cmFsbGVsIGFuZCByZXR1cm5zIGEgbGlzdCBvZiAocmV0Y29kZSwgc3Rkb3V0LCBzdGRlcnIpIHR1
cGxlcy4iIiIKKyAgICAgICAgcmV0dXJuIG11bHRpcHJvY2Vzc2luZy5Qb29sKHByb2Nlc3Nlcz1w
cm9jZXNzZXMpLm1hcChfcnVuX2NvbW1hbmRfdGh1bmssIGNvbW1hbmRfbGluZXNfYW5kX2N3ZHMp
CisKKworZGVmIF9ydW5fY29tbWFuZF90aHVuayhjbWRfbGluZV9hbmRfY3dkKToKKyAgICAjIE5v
dGUgdGhhdCB0aGlzIG5lZWRzIHRvIGJlIGEgYmFyZSBtb2R1bGUgKGFuZCBoZW5jZSBQaWNrbGFi
bGUpIG1ldGhvZCB0byB3b3JrIHdpdGggbXVsdGlwcm9jZXNzaW5nLlBvb2wuCisgICAgKGNtZF9s
aW5lLCBjd2QpID0gY21kX2xpbmVfYW5kX2N3ZAorICAgIHByb2MgPSBzdWJwcm9jZXNzLlBvcGVu
KGNtZF9saW5lLCBjd2Q9Y3dkLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJv
Y2Vzcy5QSVBFKQorICAgIHN0ZG91dCwgc3RkZXJyID0gcHJvYy5jb21tdW5pY2F0ZSgpCisgICAg
cmV0dXJuIChwcm9jLnJldHVybmNvZGUsIHN0ZG91dCwgc3RkZXJyKQpkaWZmIC0tZ2l0IGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZV9tb2NrLnB5IGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZV9tb2NrLnB5CmluZGV4
IGQ1N2E1YzQ4MDgwOTM4YmFhNWYxZWE1YmQwMjBlZTc0Y2YwNzJlZDMuLmIwZGI0OGNhM2NhNDVh
YWMxODM5NTUwY2I5M2Q1MDQ4NmQzYTFhZjQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmVfbW9jay5weQorKysgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlX21vY2sucHkKQEAgLTEwOCw2ICsxMDgs
MTEgQEAgY2xhc3MgTW9ja0V4ZWN1dGl2ZShvYmplY3QpOgogICAgICAgICAgICAgc2VsZi5fcHJv
YyA9IE1vY2tQcm9jZXNzKCkKICAgICAgICAgcmV0dXJuIHNlbGYuX3Byb2MKIAorICAgIGRlZiBy
dW5faW5fcGFyYWxsZWwoc2VsZiwgY29tbWFuZHMpOgorICAgICAgICBjb21tYW5kX291dHB1dHMg
PSBbXQorICAgICAgICBmb3IgY21kX2xpbmUsIGN3ZCBpbiBjb21tYW5kczoKKyAgICAgICAgICAg
IGNvbW1hbmRfb3V0cHV0cy5hcHBlbmQoWzAsIHNlbGYucnVuX2NvbW1hbmQoY21kX2xpbmUsIGN3
ZD1jd2QpLCAnJ10pCisgICAgICAgIHJldHVybiBjb21tYW5kX291dHB1dHMKIAogY2xhc3MgTW9j
a0V4ZWN1dGl2ZTIob2JqZWN0KToKICAgICBAc3RhdGljbWV0aG9kCmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlX3VuaXR0ZXN0LnB5IGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZV91bml0dGVzdC5w
eQppbmRleCBjNjNmZjM1NTVhZTE4ZTcwMTMwMjE5MGI3YmFiN2U5ZGVlN2E4N2FkLi40NjZlMmVj
MDIwYjljODNmNDI5MjUzYTk5YzdmOWI0ZjdlN2U3Njc3IDEwMDY0NAotLS0gYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlX3VuaXR0ZXN0LnB5CisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmVfdW5pdHRlc3QucHkK
QEAgLTMxLDYgKzMxLDcgQEAgaW1wb3J0IG9zCiBpbXBvcnQgc2lnbmFsCiBpbXBvcnQgc3VicHJv
Y2VzcwogaW1wb3J0IHN5cworaW1wb3J0IHRpbWUKIGltcG9ydCB1bml0dGVzdAogCiAjIFNpbmNl
IHdlIGV4ZWN1dGUgdGhpcyBzY3JpcHQgZGlyZWN0bHkgYXMgcGFydCBvZiB0aGUgdW5pdCB0ZXN0
cywgd2UgbmVlZCB0byBlbnN1cmUKQEAgLTIxNiw2ICsyMTcsMTggQEAgY2xhc3MgRXhlY3V0aXZl
VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHBpZHMgPSBleGVjdXRpdmUucnVubmlu
Z19waWRzKCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLmdldHBpZCgpIGluIHBpZHMpCiAK
KyAgICBkZWYgdGVzdF9ydW5faW5fcGFyYWxsZWwoc2VsZik6CisgICAgICAgIE5VTV9QUk9DRVNT
RVMgPSA0CisgICAgICAgIERFTEFZX1NFQ1MgPSAwLjI1CisgICAgICAgIGNtZF9saW5lID0gW3N5
cy5leGVjdXRhYmxlLCAnLWMnLCAnaW1wb3J0IHRpbWU7IHRpbWUuc2xlZXAoJWYpOyBwcmludCAi
aGVsbG8iJyAlIERFTEFZX1NFQ1NdCisgICAgICAgIGN3ZCA9IG9zLmdldGN3ZCgpCisgICAgICAg
IGNvbW1hbmRzID0gW3R1cGxlKFtjbWRfbGluZSwgY3dkXSldICogTlVNX1BST0NFU1NFUworICAg
ICAgICBzdGFydCA9IHRpbWUudGltZSgpCisgICAgICAgIGNvbW1hbmRfb3V0cHV0cyA9IEV4ZWN1
dGl2ZSgpLnJ1bl9pbl9wYXJhbGxlbChjb21tYW5kcywgcHJvY2Vzc2VzPU5VTV9QUk9DRVNTRVMp
CisgICAgICAgIGRvbmUgPSB0aW1lLnRpbWUoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZG9u
ZSAtIHN0YXJ0IDwgTlVNX1BST0NFU1NFUyAqIERFTEFZX1NFQ1MpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKFtvdXRwdXRbMV0gZm9yIG91dHB1dCBpbiBjb21tYW5kX291dHB1dHNdLCBbImhl
bGxvXG4iXSAqIE5VTV9QUk9DRVNTRVMpCisKIAogZGVmIG1haW4ocGxhdGZvcm0sIHN0ZGluLCBz
dGRvdXQsIGNtZCwgYXJncyk6CiAgICAgaWYgcGxhdGZvcm0gPT0gJ3dpbjMyJyBhbmQgaGFzYXR0
cihzdGRvdXQsICdmaWxlbm8nKToKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
dG9vbC9jb21tYW5kcy9yZWJhc2VsaW5lLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29s
L2NvbW1hbmRzL3JlYmFzZWxpbmUucHkKaW5kZXggMzA0MDk3ODNmN2YwNDYyNzVkZGJiMDYzOWVk
Yzg4NjQ4ZDczYTFlMS4uYjk3YjU4YzBmMTE3Mzg1NzYyOTM4MTE0MGEzYjQwNGRkNTc1YWFjOCAx
MDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3JlYmFzZWxp
bmUucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3JlYmFzZWxp
bmUucHkKQEAgLTI2LDYgKzI2LDcgQEAKICMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAjIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAK
K2ltcG9ydCBqc29uCiBpbXBvcnQgb3B0cGFyc2UKIGltcG9ydCBvcy5wYXRoCiBpbXBvcnQgcmUK
QEAgLTU3LDEwICs1OCwxMSBAQCBkZWYgX2Jhc2VsaW5lX25hbWUoZnMsIHRlc3RfbmFtZSwgc3Vm
Zml4KToKIAogCiBjbGFzcyBBYnN0cmFjdFJlYmFzZWxpbmluZ0NvbW1hbmQoQWJzdHJhY3REZWNs
YXJhdGl2ZUNvbW1hbmQpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgb3B0aW9u
cyA9IFsKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb3B0aW9ucz1Ob25lKToKKyAgICAgICAgb3B0
aW9ucyA9IG9wdGlvbnMgb3IgW10KKyAgICAgICAgb3B0aW9ucy5leHRlbmQoWwogICAgICAgICAg
ICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tc3VmZml4ZXMnLCBkZWZhdWx0PScsJy5qb2luKF9i
YXNlbGluZV9zdWZmaXhfbGlzdCksIGFjdGlvbj0nc3RvcmUnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaGVscD0nZmlsZSB0eXBlcyB0byByZWJhc2VsaW5lJyldCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdmaWxlIHR5cGVzIHRvIHJlYmFzZWxpbmUn
KV0pCiAgICAgICAgIEFic3RyYWN0RGVjbGFyYXRpdmVDb21tYW5kLl9faW5pdF9fKHNlbGYsIG9w
dGlvbnM9b3B0aW9ucykKICAgICAgICAgc2VsZi5fYmFzZWxpbmVfc3VmZml4X2xpc3QgPSBfYmFz
ZWxpbmVfc3VmZml4X2xpc3QKIApAQCAtNzAsNiArNzIsMTQgQEAgY2xhc3MgUmViYXNlbGluZVRl
c3QoQWJzdHJhY3RSZWJhc2VsaW5pbmdDb21tYW5kKToKICAgICBoZWxwX3RleHQgPSAiUmViYXNl
bGluZSBhIHNpbmdsZSB0ZXN0IGZyb20gYSBidWlsZGJvdC4gIChDdXJyZW50bHkgd29ya3Mgb25s
eSB3aXRoIGJ1aWxkLmNocm9taXVtLm9yZyBidWlsZGJvdHMuKSIKICAgICBhcmd1bWVudF9uYW1l
cyA9ICJCVUlMREVSX05BTUUgVEVTVF9OQU1FIFtQTEFURk9STVNfVE9fTU9WRV9FWElTVElOR19C
QVNFTElORVNfVE9dIgogCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBvcHRpb25z
ID0gWworICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tcHJpbnQtc2NtLWNoYW5n
ZXMiLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSJQcmludCBtb2RpZmNhdGlvbnMgdG8gdGhl
IHNjbSAoYXMgYSBqc29uIGRpY3QpIHJhdGhlciB0aGFuIGFjdHVhbGx5IG1vZGlmeWluZyB0aGUg
c2NtIiksCisgICAgICAgIF0KKyAgICAgICAgQWJzdHJhY3RSZWJhc2VsaW5pbmdDb21tYW5kLl9f
aW5pdF9fKHNlbGYsIG9wdGlvbnM9b3B0aW9ucykKKyAgICAgICAgc2VsZi5fcHJpbnRfc2NtX2No
YW5nZXMgPSBGYWxzZQorICAgICAgICBzZWxmLl9zY21fY2hhbmdlcyA9IHt9CisKICAgICBkZWYg
X3Jlc3VsdHNfdXJsKHNlbGYsIGJ1aWxkZXJfbmFtZSk6CiAgICAgICAgICMgRklYTUU6IEdlbmVy
YWxpemUgdGhpcyBjb21tYW5kIHRvIHdvcmsgd2l0aCBub24tYnVpbGQuY2hyb21pdW0ub3JnIGJ1
aWxkZXJzLgogICAgICAgICBidWlsZGVyID0gc2VsZi5fdG9vbC5jaHJvbWl1bV9idWlsZGJvdCgp
LmJ1aWxkZXJfd2l0aF9uYW1lKGJ1aWxkZXJfbmFtZSkKQEAgLTEwOCw3ICsxMTgsNyBAQCBjbGFz
cyBSZWJhc2VsaW5lVGVzdChBYnN0cmFjdFJlYmFzZWxpbmluZ0NvbW1hbmQpOgogICAgICAgICAg
ICAgc2VsZi5fdG9vbC5maWxlc3lzdGVtLm1heWJlX21ha2VfZGlyZWN0b3J5KHNlbGYuX3Rvb2wu
ZmlsZXN5c3RlbS5kaXJuYW1lKG5ld19iYXNlbGluZSkpCiAgICAgICAgICAgICBzZWxmLl90b29s
LmZpbGVzeXN0ZW0uY29weWZpbGUob2xkX2Jhc2VsaW5lLCBuZXdfYmFzZWxpbmUpCiAgICAgICAg
ICAgICBpZiBub3Qgc2VsZi5fdG9vbC5zY20oKS5leGlzdHMobmV3X2Jhc2VsaW5lKToKLSAgICAg
ICAgICAgICAgICBzZWxmLl90b29sLnNjbSgpLmFkZChuZXdfYmFzZWxpbmUpCisgICAgICAgICAg
ICAgICAgc2VsZi5fYWRkX3RvX3NjbShuZXdfYmFzZWxpbmUpCiAKICAgICBkZWYgX3NhdmVfYmFz
ZWxpbmUoc2VsZiwgZGF0YSwgdGFyZ2V0X2Jhc2VsaW5lKToKICAgICAgICAgaWYgbm90IGRhdGE6
CkBAIC0xMTcsNyArMTI3LDEzIEBAIGNsYXNzIFJlYmFzZWxpbmVUZXN0KEFic3RyYWN0UmViYXNl
bGluaW5nQ29tbWFuZCk6CiAgICAgICAgIGZpbGVzeXN0ZW0ubWF5YmVfbWFrZV9kaXJlY3Rvcnko
ZmlsZXN5c3RlbS5kaXJuYW1lKHRhcmdldF9iYXNlbGluZSkpCiAgICAgICAgIGZpbGVzeXN0ZW0u
d3JpdGVfYmluYXJ5X2ZpbGUodGFyZ2V0X2Jhc2VsaW5lLCBkYXRhKQogICAgICAgICBpZiBub3Qg
c2VsZi5fdG9vbC5zY20oKS5leGlzdHModGFyZ2V0X2Jhc2VsaW5lKToKLSAgICAgICAgICAgIHNl
bGYuX3Rvb2wuc2NtKCkuYWRkKHRhcmdldF9iYXNlbGluZSkKKyAgICAgICAgICAgIHNlbGYuX2Fk
ZF90b19zY20odGFyZ2V0X2Jhc2VsaW5lKQorCisgICAgZGVmIF9hZGRfdG9fc2NtKHNlbGYsIHBh
dGgpOgorICAgICAgICBpZiBzZWxmLl9wcmludF9zY21fY2hhbmdlczoKKyAgICAgICAgICAgIHNl
bGYuX3NjbV9jaGFuZ2VzWydhZGQnXS5hcHBlbmQocGF0aCkKKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgIHNlbGYuX3Rvb2wuc2NtKCkuYWRkKHBhdGgpCiAKICAgICBkZWYgX3VwZGF0ZV9leHBl
Y3RhdGlvbnNfZmlsZShzZWxmLCBidWlsZGVyX25hbWUsIHRlc3RfbmFtZSk6CiAgICAgICAgIHBv
cnQgPSBzZWxmLl90b29sLnBvcnRfZmFjdG9yeS5nZXRfZnJvbV9idWlsZGVyX25hbWUoYnVpbGRl
cl9uYW1lKQpAQCAtMTU4LDEyICsxNzQsMTYgQEAgY2xhc3MgUmViYXNlbGluZVRlc3QoQWJzdHJh
Y3RSZWJhc2VsaW5pbmdDb21tYW5kKToKIAogICAgIGRlZiBleGVjdXRlKHNlbGYsIG9wdGlvbnMs
IGFyZ3MsIHRvb2wpOgogICAgICAgICBzZWxmLl9iYXNlbGluZV9zdWZmaXhfbGlzdCA9IG9wdGlv
bnMuc3VmZml4ZXMuc3BsaXQoJywnKQorICAgICAgICBzZWxmLl9wcmludF9zY21fY2hhbmdlcyA9
IG9wdGlvbnMucHJpbnRfc2NtX2NoYW5nZXMKKyAgICAgICAgc2VsZi5fc2NtX2NoYW5nZXMgPSB7
J2FkZCc6IFtdLCAncm0nOiBbXX0KIAogICAgICAgICBpZiBsZW4oYXJncykgPiAyOgogICAgICAg
ICAgICAgcGxhdGZvcm1zX3RvX21vdmVfZXhpc3RpbmdfYmFzZWxpbmVzX3RvID0gYXJnc1syOl0K
ICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHBsYXRmb3Jtc190b19tb3ZlX2V4aXN0aW5nX2Jh
c2VsaW5lc190byA9IE5vbmUKICAgICAgICAgc2VsZi5fcmViYXNlbGluZV90ZXN0X2FuZF91cGRh
dGVfZXhwZWN0YXRpb25zKGFyZ3NbMF0sIGFyZ3NbMV0sIHBsYXRmb3Jtc190b19tb3ZlX2V4aXN0
aW5nX2Jhc2VsaW5lc190bykKKyAgICAgICAgaWYgc2VsZi5fcHJpbnRfc2NtX2NoYW5nZXM6Cisg
ICAgICAgICAgICBwcmludCBqc29uLmR1bXBzKHNlbGYuX3NjbV9jaGFuZ2VzKQogCiAKIGNsYXNz
IE9wdGltaXplQmFzZWxpbmVzKEFic3RyYWN0UmViYXNlbGluaW5nQ29tbWFuZCk6CmRpZmYgLS1n
aXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2VydmVycy9nYXJkZW5pbmdzZXJ2ZXIu
cHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2VydmVycy9nYXJkZW5pbmdzZXJ2ZXIu
cHkKaW5kZXggMDk2NjBmNjA5NzdiYzVlMzJmZTlhODZlY2Q1MTM2ODRlNjQ0YTMwZi4uMGE2ZmM4
NjI3MTIzNmU3MTMyYmMxYTBkMzU1MWY4ZDNmNTI3YjcxZiAxMDA2NDQKLS0tIGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMvZ2FyZGVuaW5nc2VydmVyLnB5CisrKyBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL2dhcmRlbmluZ3NlcnZlci5weQpAQCAtMjMs
OSArMjMsMTEgQEAKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAogaW1wb3J0IEJhc2VIVFRQU2VydmVyCitpbXBv
cnQganNvbgogaW1wb3J0IG9zCiAKIGZyb20gd2Via2l0cHkuY29tbW9uLm1lbW9pemVkIGltcG9y
dCBtZW1vaXplZAorZnJvbSB3ZWJraXRweS5jb21tb24uaG9zdCBpbXBvcnQgSG9zdAogZnJvbSB3
ZWJraXRweS50b29sLnNlcnZlcnMucmVmbGVjdGlvbmhhbmRsZXIgaW1wb3J0IFJlZmxlY3Rpb25I
YW5kbGVyCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5jb250cm9sbGVycy50ZXN0X2V4cGVj
dGF0aW9uc19lZGl0b3IgaW1wb3J0IEJ1Z01hbmFnZXIsIFRlc3RFeHBlY3RhdGlvbnNFZGl0b3IK
IGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLm1vZGVscy50ZXN0X2V4cGVjdGF0aW9ucyBpbXBv
cnQgVGVzdEV4cGVjdGF0aW9uUGFyc2VyLCBUZXN0RXhwZWN0YXRpb25zLCBUZXN0RXhwZWN0YXRp
b25TZXJpYWxpemVyCkBAIC0xNzEsMTUgKzE3Myw0NSBAQCBjbGFzcyBHYXJkZW5pbmdIVFRQUmVx
dWVzdEhhbmRsZXIoUmVmbGVjdGlvbkhhbmRsZXIpOgogICAgICAgICAgICAgICAgIGJ1aWxkZXJz
X3RvX2ZhbGxiYWNrX3BhdGhzW2J1aWxkZXJdID0gZmFsbGJhY2tfcGF0aAogICAgICAgICByZXR1
cm4gYnVpbGRlcnNfdG9fZmFsbGJhY2tfcGF0aHMua2V5cygpCiAKLSAgICBkZWYgcmViYXNlbGlu
ZWFsbChzZWxmKToKLSAgICAgICAgIyBGSVhNRTogT3B0aW1pemUgdGhpcyB0byBydW4gaW4gcGFy
YWxsZWwsIGNhY2hlIHppcHMsIGV0Yy4KLSAgICAgICAgdGVzdF9saXN0ID0gc2VsZi5fcmVhZF9l
bnRpdHlfYm9keV9hc19qc29uKCkKKyAgICBkZWYgX3JlYmFzZWxpbmVfY29tbWFuZHMoc2VsZiwg
dGVzdF9saXN0KToKKyAgICAgICAgcGF0aF90b193ZWJraXRfcGF0Y2ggPSBzZWxmLnNlcnZlci50
b29sLnBhdGgoKQorICAgICAgICBjd2QgPSBzZWxmLnNlcnZlci50b29sLnNjbSgpLmNoZWNrb3V0
X3Jvb3QKKyAgICAgICAgY29tbWFuZHMgPSBbXQorICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0X2xp
c3Q6CisgICAgICAgICAgICBmb3IgYnVpbGRlciBpbiBzZWxmLl9idWlsZGVyc190b19mZXRjaF9m
cm9tKHRlc3RfbGlzdFt0ZXN0XSk6CisgICAgICAgICAgICAgICAgc3VmZml4ZXMgPSAnLCcuam9p
bih0ZXN0X2xpc3RbdGVzdF1bYnVpbGRlcl0pCisgICAgICAgICAgICAgICAgY21kX2xpbmUgPSBb
cGF0aF90b193ZWJraXRfcGF0Y2gsICdyZWJhc2VsaW5lLXRlc3QnLCAnLS1wcmludC1zY20tY2hh
bmdlcycsICctLXN1ZmZpeGVzJywgc3VmZml4ZXMsIGJ1aWxkZXIsIHRlc3RdCisgICAgICAgICAg
ICAgICAgY29tbWFuZHMuYXBwZW5kKHR1cGxlKFtjbWRfbGluZSwgY3dkXSkpCisgICAgICAgIHJl
dHVybiBjb21tYW5kcworCisgICAgZGVmIF9maWxlc190b19hZGQoc2VsZiwgY29tbWFuZF9yZXN1
bHRzKToKKyAgICAgICAgZmlsZXNfdG9fYWRkID0gc2V0KCkKKyAgICAgICAgZm9yIG91dHB1dCBp
biBbcmVzdWx0WzFdIGZvciByZXN1bHQgaW4gY29tbWFuZF9yZXN1bHRzXToKKyAgICAgICAgICAg
IGZpbGVzX3RvX2FkZC51cGRhdGUoanNvbi5sb2FkcyhvdXRwdXQpWydhZGQnXSkKKyAgICAgICAg
cmV0dXJuIGxpc3QoZmlsZXNfdG9fYWRkKQorCisgICAgZGVmIF9vcHRpbWl6ZV9iYXNlbGluZXMo
c2VsZiwgdGVzdF9saXN0KToKKyAgICAgICAgIyBXZSBkb24ndCBydW4gdGhpcyBpbiBwYXJhbGxl
bCBiZWNhdXNlIG1vZGlmeWluZyB0aGUgU0NNIGluIHBhcmFsbGVsIGlzIHVucmVsaWFibGUuCiAg
ICAgICAgIGZvciB0ZXN0IGluIHRlc3RfbGlzdDoKICAgICAgICAgICAgIGFsbF9zdWZmaXhlcyA9
IHNldCgpCi0gICAgICAgICAgICBidWlsZGVycyA9IHNlbGYuX2J1aWxkZXJzX3RvX2ZldGNoX2Zy
b20odGVzdF9saXN0W3Rlc3RdKQotICAgICAgICAgICAgZm9yIGJ1aWxkZXIgaW4gYnVpbGRlcnM6
Ci0gICAgICAgICAgICAgICAgc3VmZml4ZXMgPSB0ZXN0X2xpc3RbdGVzdF1bYnVpbGRlcl0KLSAg
ICAgICAgICAgICAgICBhbGxfc3VmZml4ZXMudXBkYXRlKHN1ZmZpeGVzKQotICAgICAgICAgICAg
ICAgIHNlbGYuX3J1bl93ZWJraXRfcGF0Y2goWydyZWJhc2VsaW5lLXRlc3QnLCAnLS1zdWZmaXhl
cycsICcsJy5qb2luKHN1ZmZpeGVzKSwgYnVpbGRlciwgdGVzdF0pCisgICAgICAgICAgICBmb3Ig
YnVpbGRlciBpbiBzZWxmLl9idWlsZGVyc190b19mZXRjaF9mcm9tKHRlc3RfbGlzdFt0ZXN0XSk6
CisgICAgICAgICAgICAgICAgYWxsX3N1ZmZpeGVzLnVwZGF0ZSh0ZXN0X2xpc3RbdGVzdF1bYnVp
bGRlcl0pCiAgICAgICAgICAgICBzZWxmLl9ydW5fd2Via2l0X3BhdGNoKFsnb3B0aW1pemUtYmFz
ZWxpbmVzJywgJy0tc3VmZml4ZXMnLCAnLCcuam9pbihhbGxfc3VmZml4ZXMpLCB0ZXN0XSkKKwor
ICAgIGRlZiByZWJhc2VsaW5lYWxsKHNlbGYpOgorICAgICAgICB0ZXN0X2xpc3QgPSBzZWxmLl9y
ZWFkX2VudGl0eV9ib2R5X2FzX2pzb24oKQorCisgICAgICAgIGNvbW1hbmRzID0gc2VsZi5fcmVi
YXNlbGluZV9jb21tYW5kcyh0ZXN0X2xpc3QpCisgICAgICAgIGNvbW1hbmRfcmVzdWx0cyA9IHNl
bGYuc2VydmVyLnRvb2wuZXhlY3V0aXZlLnJ1bl9pbl9wYXJhbGxlbChjb21tYW5kcykKKworICAg
ICAgICBmaWxlc190b19hZGQgPSBzZWxmLl9maWxlc190b19hZGQoY29tbWFuZF9yZXN1bHRzKQor
ICAgICAgICBzZWxmLnNlcnZlci50b29sLnNjbSgpLmFkZF9saXN0KGxpc3QoZmlsZXNfdG9fYWRk
KSkKKworICAgICAgICBzZWxmLl9vcHRpbWl6ZV9iYXNlbGluZXModGVzdF9saXN0KQogICAgICAg
ICBzZWxmLl9zZXJ2ZV90ZXh0KCdzdWNjZXNzJykKKworCitkZWYgcnVuX2NvbW1hbmQoY21kX2xp
bmVfYW5kX2N3ZCk6CisgICAgKGNtZF9saW5lLCBjd2QpID0gY21kX2xpbmVfYW5kX2N3ZAorICAg
IGhvc3QgPSBIb3N0KCkKKyAgICBvdXRwdXQgPSBob3N0LmV4ZWN1dGl2ZS5ydW5fY29tbWFuZChj
bWRfbGluZSwgY3dkPWN3ZCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9v
bC9zZXJ2ZXJzL2dhcmRlbmluZ3NlcnZlcl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvdG9vbC9zZXJ2ZXJzL2dhcmRlbmluZ3NlcnZlcl91bml0dGVzdC5weQppbmRleCBlMTc5
OGY2NWViYjI2NTA0ZWQ3ZjZiZWY2NzYzYTcxMTkzMjZhMWVkLi5lNTBhZTA2YTcwMWU2ZGEyOGI4
ZDYzNThhMWM1MzY2MTM0MDlhOGQyIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3Rvb2wvc2VydmVycy9nYXJkZW5pbmdzZXJ2ZXJfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMvZ2FyZGVuaW5nc2VydmVyX3VuaXR0ZXN0LnB5CkBA
IC0xODYsNyArMTg2LDcgQEAgY2xhc3MgR2FyZGVuaW5nU2VydmVyVGVzdCh1bml0dGVzdC5UZXN0
Q2FzZSk6CiAgICAgICAgICAgICAiTU9DSyBidWlsZGVyIjogeyJwb3J0X25hbWUiOiAidGVzdC1t
YWMtbGVvcGFyZCIsICJzcGVjaWZpZXJzIjogc2V0KFsibW9jay1zcGVjaWZpZXIiXSl9LAogICAg
ICAgICAgICAgIk1PQ0sgYnVpbGRlciAoRGVidWcpIjogeyJwb3J0X25hbWUiOiAidGVzdC1tYWMt
bGVvcGFyZCIsICJzcGVjaWZpZXJzIjogc2V0KFsibW9jay1zcGVjaWZpZXIiLCAiZGVidWciXSl9
LAogICAgICAgICB9Ci0gICAgICAgIGV4cGVjdGVkX3N0ZGVyciA9ICJNT0NLIHJ1bl9jb21tYW5k
OiBbJ2VjaG8nLCAncmViYXNlbGluZS10ZXN0JywgJy0tc3VmZml4ZXMnLCB1JyVzJywgdSclcycs
IHUndXNlci1zY3JpcHRzL2Fub3RoZXItdGVzdC5odG1sJ10sIGN3ZD0vbW9jay1jaGVja291dFxu
TU9DSyBydW5fY29tbWFuZDogWydlY2hvJywgJ29wdGltaXplLWJhc2VsaW5lcycsICctLXN1ZmZp
eGVzJywgdSclcycsIHUndXNlci1zY3JpcHRzL2Fub3RoZXItdGVzdC5odG1sJ10sIGN3ZD0vbW9j
ay1jaGVja291dFxuIgorICAgICAgICBleHBlY3RlZF9zdGRlcnIgPSAiTU9DSyBydW5fY29tbWFu
ZDogWydlY2hvJywgJ3JlYmFzZWxpbmUtdGVzdCcsICctLXByaW50LXNjbS1jaGFuZ2VzJywgJy0t
c3VmZml4ZXMnLCB1JyVzJywgdSclcycsIHUndXNlci1zY3JpcHRzL2Fub3RoZXItdGVzdC5odG1s
J10sIGN3ZD0vbW9jay1jaGVja291dFxuTU9DSyBydW5fY29tbWFuZDogWydlY2hvJywgJ29wdGlt
aXplLWJhc2VsaW5lcycsICctLXN1ZmZpeGVzJywgdSclcycsIHUndXNlci1zY3JpcHRzL2Fub3Ro
ZXItdGVzdC5odG1sJ10sIGN3ZD0vbW9jay1jaGVja291dFxuIgogICAgICAgICBleHBlY3RlZF9z
dGRvdXQgPSAiPT0gQmVnaW4gUmVzcG9uc2UgPT1cbnN1Y2Nlc3Ncbj09IEVuZCBSZXNwb25zZSA9
PVxuIgogICAgICAgICBzZWxmLl9wb3N0X3RvX3BhdGgoIi9yZWJhc2VsaW5lYWxsIiwgYm9keT0n
eyJ1c2VyLXNjcmlwdHMvYW5vdGhlci10ZXN0Lmh0bWwiOnsiTU9DSyBidWlsZGVyIjogWyJ0eHQi
LCJwbmciXX19JywgZXhwZWN0ZWRfc3RkZXJyPWV4cGVjdGVkX3N0ZGVyciAlICgndHh0LHBuZycs
ICdNT0NLIGJ1aWxkZXInLCAndHh0LHBuZycpLCBleHBlY3RlZF9zdGRvdXQ9ZXhwZWN0ZWRfc3Rk
b3V0KQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144185</attachid>
            <date>2012-05-25 20:11:02 -0700</date>
            <delta_ts>2012-05-25 20:13:52 -0700</delta_ts>
            <desc>more review feedback, more tests, more cleanup</desc>
            <filename>bug-87451-20120525201101.patch</filename>
            <type>text/plain</type>
            <size>37326</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4NTU3CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOTgwYzliYzk5MjEzNDhjYThmMTQwYWJjMzA1ZjQ2Yzc1
YWYyMDYxYS4uZjEyNjBlZWVjNzE0YTE0ZDQ0M2MwYWJkYWE3YzE0NjJlMWI2MzJkNyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDcz
IEBACiAyMDEyLTA1LTI1ICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgogCisg
ICAgICAgIGdhcmRlbi1vLW1hdGljIHNob3VsZCByZWJhc2VsaW5lIGJhc2VsaW5lcyBpbiBwYXJh
bGxlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODc0
NTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgVGhpcyBtb2RpZmllcyBnYXJkZW4tby1tYXRpYyBzbyB0aGF0IHdl
IHdpbGwgZmV0Y2ggYWxsICAgICAgICAgICAgICAgICAgCisgICAgICAgIG9mIHRoZSBiYXNlbGlu
ZXMgaW4gcGFyYWxsZWwgZnJvbSB0aGUgYm90cywgYW5kIHRoZW4gICAgICAgICAgICAgICAgICAg
IAorICAgICAgICBvcHRpbWl6ZSB0aGUgYmFzZWxpbmVzIHNlcmlhbGx5IChzaW5jZSB0aGF0IHNo
b3VsZCBiZSBmYWlybHkgICAgICAgICAgICAKKyAgICAgICAgcXVpY2sgYW5kIHdlIGdldCBpbnRv
IHRyb3VibGUgaWYgd2Ugb3B0aW1pemUgaW4gcGFyYWxsZWwgZHVlICAgICAgICAgICAgCisgICAg
ICAgIHRvIGNvbmN1cnJlbnQgYWNjZXNzIHRvIHRoZSBzb3VyY2UgY29udHJvbCBzeXN0ZW0pLiAg
ICAgICAgICAgICAgICAgICAgIAorCisgICAgICAgIFRoaXMgY2hhbmdlIGFkZHMgYSBmbGFnIHRv
IHdlYmtpdC1wYXRjaCByZWJhc2VsaW5lLXRlc3QgKC0tcHJpbnQtc2NtLWNoYW5nZXMpCisgICAg
ICAgIHNvIHRoYXQgdGhlIGZpbGVzIHRoYXQgbmVlZCB0byBiZSBtb2RpZmllZCBpbiB0aGUgU0NN
IGFyZSByZXR1cm5lZCB0byAKKyAgICAgICAgZ2FyZGVuLW8tbWF0aWMgcmF0aGVyIHRoYW4gYWN0
dWFsbHkgYWRkZWQgb3IgcmVtb3ZlZC4gVGhpcyBpcyBkb25lIHNvIHRoYXQKKyAgICAgICAgd2Ug
Y2FuIHJ1biBtdWx0aXBsZSByZWJhc2VsaW5lLXRlc3RzIGluIHBhcmFsbGVsICh3ZSBjYW4ndCBt
b2RpZnkgdGhlIFNDTQorICAgICAgICBjb25jdXJyZW50bHkpLiBJbiBvcmRlciB0byBzYWZlbHkg
cmV0dXJuIHRoZSBmaWxlcyAoYXMgYSBKU09OIGRpY3QpIEkKKyAgICAgICAgbmVlZGVkIHRvIHNo
aWZ0IGFsbCBvZiB0aGUgbG9nZ2luZyBpbiByZWJhc2VsaW5lLXRlc3QgdG8gdXNlIHRoZSBsb2dn
aW5nCisgICAgICAgIG1vZHVsZSAoYW5kIGhlbmNlIGxvZyB0byBzdGRlcnIpLgorCisgICAgICAg
IEkgYWxzbyBoYWQgdG8gc3R1YiBvdXQgYSBsaW5lIGluIGNocm9taXVtLnB5IHRoYXQgd291bGQg
Z2V0IGNvbmZ1c2VkIGlmCisgICAgICAgIHRoZSBza2lhIG92ZXJyaWRlcyBmaWxlIGRpZG4ndCBl
eGlzdCBpbiBhIG1vY2sgY2hlY2tvdXQuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9zeXN0ZW0vZXhlY3V0aXZlLnB5OgorICAgICAgICAoRXhlY3V0aXZlLnBvcGVuKToKKyAg
ICAgICAgKEV4ZWN1dGl2ZSk6CisgICAgICAgIChFeGVjdXRpdmUucnVuX2luX3BhcmFsbGVsKToK
KyAgICAgICAgKF9ydW5fY29tbWFuZF90aHVuayk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZV9tb2NrLnB5OgorICAgICAgICAoTW9ja0V4ZWN1dGl2
ZS5ydW5faW5fcGFyYWxsZWwpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5
c3RlbS9leGVjdXRpdmVfdW5pdHRlc3QucHk6CisgICAgICAgIChFeGVjdXRpdmVUZXN0LnRlc3Rf
cnVuX2luX3BhcmFsbGVsKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L2Nocm9taXVtLnB5OgorICAgICAgICAoQ2hyb21pdW1Qb3J0Ll9leHBlY3RhdGlvbnNf
ZmlsZV9jb250ZW50cyk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRz
L3JlYmFzZWxpbmUucHk6CisgICAgICAgIChBYnN0cmFjdFJlYmFzZWxpbmluZ0NvbW1hbmQuX19p
bml0X18pOgorICAgICAgICAoUmViYXNlbGluZVRlc3QuX19pbml0X18pOgorICAgICAgICAoUmVi
YXNlbGluZVRlc3QuX2NvcHlfZXhpc3RpbmdfYmFzZWxpbmUpOgorICAgICAgICAoUmViYXNlbGlu
ZVRlc3QuX3NhdmVfYmFzZWxpbmUpOgorICAgICAgICAoUmViYXNlbGluZVRlc3QpOgorICAgICAg
ICAoUmViYXNlbGluZVRlc3QuX2FkZF90b19zY20pOgorICAgICAgICAoUmViYXNlbGluZVRlc3Qu
X3JlYmFzZWxpbmVfdGVzdCk6CisgICAgICAgIChSZWJhc2VsaW5lVGVzdC5leGVjdXRlKToKKyAg
ICAgICAgKFJlYmFzZWxpbmVFeHBlY3RhdGlvbnMuX3JlYmFzZWxpbmVfcG9ydCk6CisgICAgICAg
IChSZWJhc2VsaW5lRXhwZWN0YXRpb25zLmV4ZWN1dGUpOgorICAgICAgICAoUmViYXNlbGluZS5f
YnVpbGRlcl90b19wdWxsX2Zyb20pOgorICAgICAgICAoUmViYXNlbGluZS5leGVjdXRlKToKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcmViYXNlbGluZV91bml0dGVz
dC5weToKKyAgICAgICAgKHRlc3RfcmViYXNlbGluZV91cGRhdGVzX2V4cGVjdGF0aW9uc19maWxl
KToKKyAgICAgICAgKHRlc3RfcmViYXNlbGluZV90ZXN0KToKKyAgICAgICAgKHRlc3RfcmViYXNl
bGluZV90ZXN0X2FuZF9wcmludF9zY21fY2hhbmdlcyk6CisgICAgICAgICh0ZXN0X3JlYmFzZWxp
bmVfYW5kX2NvcHlfdGVzdCk6CisgICAgICAgICh0ZXN0X3JlYmFzZWxpbmVfYW5kX2NvcHlfdGVz
dF9ub19leGlzdGluZ19yZXN1bHQpOgorICAgICAgICAodGVzdF9yZWJhc2VsaW5lX2FuZF9jb3B5
X3Rlc3Rfd2l0aF9saW9uX3Jlc3VsdCk6CisgICAgICAgICh0ZXN0X3JlYmFzZWxpbmVfYW5kX2Nv
cHlfbm9fb3ZlcndyaXRlX3Rlc3QpOgorICAgICAgICAodGVzdF9yZWJhc2VsaW5lX2V4cGVjdGF0
aW9ucyk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMvZ2FyZGVuaW5n
c2VydmVyLnB5OgorICAgICAgICAoR2FyZGVuaW5nSFRUUFJlcXVlc3RIYW5kbGVyLl9yZWJhc2Vs
aW5lX2NvbW1hbmRzKToKKyAgICAgICAgKEdhcmRlbmluZ0hUVFBSZXF1ZXN0SGFuZGxlcik6Cisg
ICAgICAgIChHYXJkZW5pbmdIVFRQUmVxdWVzdEhhbmRsZXIuX2ZpbGVzX3RvX2FkZCk6CisgICAg
ICAgIChHYXJkZW5pbmdIVFRQUmVxdWVzdEhhbmRsZXIuX29wdGltaXplX2Jhc2VsaW5lcyk6Cisg
ICAgICAgIChHYXJkZW5pbmdIVFRQUmVxdWVzdEhhbmRsZXIucmViYXNlbGluZWFsbCk6CisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMvZ2FyZGVuaW5nc2VydmVyX3VuaXR0
ZXN0LnB5OgorICAgICAgICAoR2FyZGVuaW5nU2VydmVyVGVzdC5fcG9zdF90b19wYXRoKToKKyAg
ICAgICAgKEdhcmRlbmluZ1NlcnZlclRlc3QudGVzdF9yZWJhc2VsaW5lYWxsKToKKyAgICAgICAg
KEdhcmRlbmluZ1NlcnZlclRlc3QudGVzdF9yZWJhc2VsaW5lYWxsLnJ1bl9jb21tYW5kKToKKwor
MjAxMi0wNS0yNSAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNocm9taXVtLm9yZz4KKwogICAgICAg
ICB3ZWJraXRweTogY2hhbmdlIHNjbS5hZGQoKSwgc2NtLmRlbGV0ZSgpIHRvIGFjY2VwdCBtdWx0
aXBsZSBwYXRocwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODc1MjgKIApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lz
dGVtL2V4ZWN1dGl2ZS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9l
eGVjdXRpdmUucHkKaW5kZXggNDNkY2JjYTFiMzhjYjIxODJjYjc5MDUxZmQxZjVkY2VmNjA3NWEx
Ny4uODc1OWM3MTlhODI0NDVkOTM0ZmU5MDE0NzFmM2FhMDk3Mjk5MDVhMSAxMDA2NDQKLS0tIGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZS5weQorKysgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlLnB5CkBAIC00NTEs
MyArNDUxLDE1IEBAIGNsYXNzIEV4ZWN1dGl2ZShvYmplY3QpOgogCiAgICAgZGVmIHBvcGVuKHNl
bGYsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgIHJldHVybiBzdWJwcm9jZXNzLlBvcGVuKCph
cmdzLCAqKmt3YXJncykKKworICAgIGRlZiBydW5faW5fcGFyYWxsZWwoc2VsZiwgY29tbWFuZF9s
aW5lc19hbmRfY3dkcywgcHJvY2Vzc2VzPU5vbmUpOgorICAgICAgICAiIiJSdW5zIGEgbGlzdCBv
ZiAoY21kX2xpbmUgbGlzdCwgY3dkIHN0cmluZykgdHVwbGVzIGluIHBhcmFsbGVsIGFuZCByZXR1
cm5zIGEgbGlzdCBvZiAocmV0Y29kZSwgc3Rkb3V0LCBzdGRlcnIpIHR1cGxlcy4iIiIKKyAgICAg
ICAgcmV0dXJuIG11bHRpcHJvY2Vzc2luZy5Qb29sKHByb2Nlc3Nlcz1wcm9jZXNzZXMpLm1hcChf
cnVuX2NvbW1hbmRfdGh1bmssIGNvbW1hbmRfbGluZXNfYW5kX2N3ZHMpCisKKworZGVmIF9ydW5f
Y29tbWFuZF90aHVuayhjbWRfbGluZV9hbmRfY3dkKToKKyAgICAjIE5vdGUgdGhhdCB0aGlzIG5l
ZWRzIHRvIGJlIGEgYmFyZSBtb2R1bGUgKGFuZCBoZW5jZSBQaWNrbGFibGUpIG1ldGhvZCB0byB3
b3JrIHdpdGggbXVsdGlwcm9jZXNzaW5nLlBvb2wuCisgICAgKGNtZF9saW5lLCBjd2QpID0gY21k
X2xpbmVfYW5kX2N3ZAorICAgIHByb2MgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZF9saW5lLCBjd2Q9
Y3dkLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAg
IHN0ZG91dCwgc3RkZXJyID0gcHJvYy5jb21tdW5pY2F0ZSgpCisgICAgcmV0dXJuIChwcm9jLnJl
dHVybmNvZGUsIHN0ZG91dCwgc3RkZXJyKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZV9tb2NrLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZV9tb2NrLnB5CmluZGV4IGQ1N2E1YzQ4MDgwOTM4
YmFhNWYxZWE1YmQwMjBlZTc0Y2YwNzJlZDMuLmIwZGI0OGNhM2NhNDVhYWMxODM5NTUwY2I5M2Q1
MDQ4NmQzYTFhZjQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5
c3RlbS9leGVjdXRpdmVfbW9jay5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9zeXN0ZW0vZXhlY3V0aXZlX21vY2sucHkKQEAgLTEwOCw2ICsxMDgsMTEgQEAgY2xhc3MgTW9j
a0V4ZWN1dGl2ZShvYmplY3QpOgogICAgICAgICAgICAgc2VsZi5fcHJvYyA9IE1vY2tQcm9jZXNz
KCkKICAgICAgICAgcmV0dXJuIHNlbGYuX3Byb2MKIAorICAgIGRlZiBydW5faW5fcGFyYWxsZWwo
c2VsZiwgY29tbWFuZHMpOgorICAgICAgICBjb21tYW5kX291dHB1dHMgPSBbXQorICAgICAgICBm
b3IgY21kX2xpbmUsIGN3ZCBpbiBjb21tYW5kczoKKyAgICAgICAgICAgIGNvbW1hbmRfb3V0cHV0
cy5hcHBlbmQoWzAsIHNlbGYucnVuX2NvbW1hbmQoY21kX2xpbmUsIGN3ZD1jd2QpLCAnJ10pCisg
ICAgICAgIHJldHVybiBjb21tYW5kX291dHB1dHMKIAogY2xhc3MgTW9ja0V4ZWN1dGl2ZTIob2Jq
ZWN0KToKICAgICBAc3RhdGljbWV0aG9kCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlX3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZV91bml0dGVzdC5weQppbmRleCBjNjNmZjM1
NTVhZTE4ZTcwMTMwMjE5MGI3YmFiN2U5ZGVlN2E4N2FkLi40NjZlMmVjMDIwYjljODNmNDI5MjUz
YTk5YzdmOWI0ZjdlN2U3Njc3IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9zeXN0ZW0vZXhlY3V0aXZlX3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmVfdW5pdHRlc3QucHkKQEAgLTMxLDYgKzMxLDcg
QEAgaW1wb3J0IG9zCiBpbXBvcnQgc2lnbmFsCiBpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHN5
cworaW1wb3J0IHRpbWUKIGltcG9ydCB1bml0dGVzdAogCiAjIFNpbmNlIHdlIGV4ZWN1dGUgdGhp
cyBzY3JpcHQgZGlyZWN0bHkgYXMgcGFydCBvZiB0aGUgdW5pdCB0ZXN0cywgd2UgbmVlZCB0byBl
bnN1cmUKQEAgLTIxNiw2ICsyMTcsMTggQEAgY2xhc3MgRXhlY3V0aXZlVGVzdCh1bml0dGVzdC5U
ZXN0Q2FzZSk6CiAgICAgICAgIHBpZHMgPSBleGVjdXRpdmUucnVubmluZ19waWRzKCkKICAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKG9zLmdldHBpZCgpIGluIHBpZHMpCiAKKyAgICBkZWYgdGVzdF9y
dW5faW5fcGFyYWxsZWwoc2VsZik6CisgICAgICAgIE5VTV9QUk9DRVNTRVMgPSA0CisgICAgICAg
IERFTEFZX1NFQ1MgPSAwLjI1CisgICAgICAgIGNtZF9saW5lID0gW3N5cy5leGVjdXRhYmxlLCAn
LWMnLCAnaW1wb3J0IHRpbWU7IHRpbWUuc2xlZXAoJWYpOyBwcmludCAiaGVsbG8iJyAlIERFTEFZ
X1NFQ1NdCisgICAgICAgIGN3ZCA9IG9zLmdldGN3ZCgpCisgICAgICAgIGNvbW1hbmRzID0gW3R1
cGxlKFtjbWRfbGluZSwgY3dkXSldICogTlVNX1BST0NFU1NFUworICAgICAgICBzdGFydCA9IHRp
bWUudGltZSgpCisgICAgICAgIGNvbW1hbmRfb3V0cHV0cyA9IEV4ZWN1dGl2ZSgpLnJ1bl9pbl9w
YXJhbGxlbChjb21tYW5kcywgcHJvY2Vzc2VzPU5VTV9QUk9DRVNTRVMpCisgICAgICAgIGRvbmUg
PSB0aW1lLnRpbWUoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZG9uZSAtIHN0YXJ0IDwgTlVN
X1BST0NFU1NFUyAqIERFTEFZX1NFQ1MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFtvdXRw
dXRbMV0gZm9yIG91dHB1dCBpbiBjb21tYW5kX291dHB1dHNdLCBbImhlbGxvXG4iXSAqIE5VTV9Q
Uk9DRVNTRVMpCisKIAogZGVmIG1haW4ocGxhdGZvcm0sIHN0ZGluLCBzdGRvdXQsIGNtZCwgYXJn
cyk6CiAgICAgaWYgcGxhdGZvcm0gPT0gJ3dpbjMyJyBhbmQgaGFzYXR0cihzdGRvdXQsICdmaWxl
bm8nKToKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9v
dXRwdXRjYXB0dXJlLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL291
dHB1dGNhcHR1cmUucHkKaW5kZXggNjYxODhjMGNiZTc3ZTAwM2JiNTRhNDU2NzNiZWViMzQ5OWFj
MDcyMi4uYmJhNDZjZDliYWU2MDM0ZTA5MWZmOTAxZDdkODU3YTRkYzA4ZmU3NyAxMDA2NDQKLS0t
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL291dHB1dGNhcHR1cmUucHkK
KysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL291dHB1dGNhcHR1cmUu
cHkKQEAgLTMsNyArMyw3IEBACiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCiAjIG1ldDoK
LSMgCisjCiAjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CiAjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICMgICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQpAQCAtMTMsNyArMTMsNyBAQAog
IyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCiAjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCiAjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0jIAorIwogIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiAjICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCiAj
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC9jaHJvbWl1bS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvY2hyb21pdW0ucHkKaW5kZXggY2I2OGYxNDYwNTIxZmY2MTcyMDVjOGY0OTg1Mjk1
MjAwNTQwOTU3OS4uOWRiNGNiNTcwNTc3YzdjZGVjMWEwYjE0NWY3ODUyNDZlZDhkMWQ0NiAxMDA3
NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1
bS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9t
aXVtLnB5CkBAIC0zMjcsOSArMzI3LDEyIEBAIGNsYXNzIENocm9taXVtUG9ydChQb3J0KToKICAg
ICAgICAgICAgICAgICAoZmlsZXR5cGUsIGZpbGVwYXRoKSkKICAgICAgICAgICAgIHJldHVybiAo
c2VsZi5fZmlsZXN5c3RlbS5yZWFkX3RleHRfZmlsZShmaWxlcGF0aCkgb3IgJycpCiAgICAgICAg
IGVsc2U6Ci0gICAgICAgICAgICBfbG9nLndhcm5pbmcoCi0gICAgICAgICAgICAgICAgIiVzIHRl
c3RfZXhwZWN0YXRpb25zIG92ZXJyaWRlcyBmaWxlICclcycgZG9lcyBub3QgZXhpc3QiICUKLSAg
ICAgICAgICAgICAgICAoZmlsZXR5cGUsIGZpbGVwYXRoKSkKKyAgICAgICAgICAgICMgRklYTUU6
IFRoaXMgYWxsb3dzIHRoaXMgdG8gd29yayB3aXRoIG1vY2sgY2hlY2tvdXRzOworICAgICAgICAg
ICAgIyBUaGlzIHByb2JhYmx5IHNob3VsZG4ndCBiZSB1c2VkIHdpdGggYSBtb2NrIGNoZWNrb3V0
LCB0aG91Z2guCisgICAgICAgICAgICBpZiBub3QgJ21vY2stY2hlY2tvdXQnIGluIGZpbGVwYXRo
OgorICAgICAgICAgICAgICAgIF9sb2cud2FybmluZygKKyAgICAgICAgICAgICAgICAgICAgIiVz
IHRlc3RfZXhwZWN0YXRpb25zIG92ZXJyaWRlcyBmaWxlICclcycgZG9lcyBub3QgZXhpc3QiICUK
KyAgICAgICAgICAgICAgICAgICAgKGZpbGV0eXBlLCBmaWxlcGF0aCkpCiAgICAgICAgICAgICBy
ZXR1cm4gJycKIAogICAgIGRlZiB0ZXN0X2V4cGVjdGF0aW9uc19vdmVycmlkZXMoc2VsZik6CmRp
ZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcmViYXNlbGlu
ZS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9yZWJhc2VsaW5lLnB5
CmluZGV4IDMwNDA5NzgzZjdmMDQ2Mjc1ZGRiYjA2MzllZGM4ODY0OGQ3M2ExZTEuLjYwY2ZkZjUx
NDdmNTY2MmQwOGFmNTE5YzVmNWJhNTQyNjM3M2I5YWMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9yZWJhc2VsaW5lLnB5CisrKyBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9yZWJhc2VsaW5lLnB5CkBAIC0yNiw2ICsyNiw4IEBA
CiAjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCitpbXBvcnQganNvbgoraW1wb3J0IGxv
Z2dpbmcKIGltcG9ydCBvcHRwYXJzZQogaW1wb3J0IG9zLnBhdGgKIGltcG9ydCByZQpAQCAtNTEs
MTYgKzUzLDE5IEBAIGZyb20gd2Via2l0cHkudG9vbC5tdWx0aWNvbW1hbmR0b29sIGltcG9ydCBB
YnN0cmFjdERlY2xhcmF0aXZlQ29tbWFuZAogX2Jhc2VsaW5lX3N1ZmZpeF9saXN0ID0gWydwbmcn
LCAnd2F2JywgJ3R4dCddCiAKIAorX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQor
CiAjIEZJWE1FOiBTaG91bGQgVGVzdFJlc3VsdFdyaXRlciBrbm93IGhvdyB0byBjb21wdXRlIHRo
aXMgc3RyaW5nPwogZGVmIF9iYXNlbGluZV9uYW1lKGZzLCB0ZXN0X25hbWUsIHN1ZmZpeCk6CiAg
ICAgcmV0dXJuIGZzLnNwbGl0ZXh0KHRlc3RfbmFtZSlbMF0gKyBUZXN0UmVzdWx0V3JpdGVyLkZJ
TEVOQU1FX1NVRkZJWF9FWFBFQ1RFRCArICIuIiArIHN1ZmZpeAogCiAKIGNsYXNzIEFic3RyYWN0
UmViYXNlbGluaW5nQ29tbWFuZChBYnN0cmFjdERlY2xhcmF0aXZlQ29tbWFuZCk6Ci0gICAgZGVm
IF9faW5pdF9fKHNlbGYpOgotICAgICAgICBvcHRpb25zID0gWworICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBvcHRpb25zPU5vbmUpOgorICAgICAgICBvcHRpb25zID0gb3B0aW9ucyBvciBbXQorICAg
ICAgICBvcHRpb25zLmV4dGVuZChbCiAgICAgICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbign
LS1zdWZmaXhlcycsIGRlZmF1bHQ9JywnLmpvaW4oX2Jhc2VsaW5lX3N1ZmZpeF9saXN0KSwgYWN0
aW9uPSdzdG9yZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdmaWxl
IHR5cGVzIHRvIHJlYmFzZWxpbmUnKV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGhlbHA9J2ZpbGUgdHlwZXMgdG8gcmViYXNlbGluZScpXSkKICAgICAgICAgQWJzdHJhY3REZWNs
YXJhdGl2ZUNvbW1hbmQuX19pbml0X18oc2VsZiwgb3B0aW9ucz1vcHRpb25zKQogICAgICAgICBz
ZWxmLl9iYXNlbGluZV9zdWZmaXhfbGlzdCA9IF9iYXNlbGluZV9zdWZmaXhfbGlzdAogCkBAIC03
MCw2ICs3NSwxNCBAQCBjbGFzcyBSZWJhc2VsaW5lVGVzdChBYnN0cmFjdFJlYmFzZWxpbmluZ0Nv
bW1hbmQpOgogICAgIGhlbHBfdGV4dCA9ICJSZWJhc2VsaW5lIGEgc2luZ2xlIHRlc3QgZnJvbSBh
IGJ1aWxkYm90LiAgKEN1cnJlbnRseSB3b3JrcyBvbmx5IHdpdGggYnVpbGQuY2hyb21pdW0ub3Jn
IGJ1aWxkYm90cy4pIgogICAgIGFyZ3VtZW50X25hbWVzID0gIkJVSUxERVJfTkFNRSBURVNUX05B
TUUgW1BMQVRGT1JNU19UT19NT1ZFX0VYSVNUSU5HX0JBU0VMSU5FU19UT10iCiAKKyAgICBkZWYg
X19pbml0X18oc2VsZik6CisgICAgICAgIG9wdGlvbnMgPSBbCisgICAgICAgICAgICBvcHRwYXJz
ZS5tYWtlX29wdGlvbigiLS1wcmludC1zY20tY2hhbmdlcyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIs
IGhlbHA9IlByaW50IG1vZGlmY2F0aW9ucyB0byB0aGUgc2NtIChhcyBhIGpzb24gZGljdCkgcmF0
aGVyIHRoYW4gYWN0dWFsbHkgbW9kaWZ5aW5nIHRoZSBzY20iKSwKKyAgICAgICAgXQorICAgICAg
ICBBYnN0cmFjdFJlYmFzZWxpbmluZ0NvbW1hbmQuX19pbml0X18oc2VsZiwgb3B0aW9ucz1vcHRp
b25zKQorICAgICAgICBzZWxmLl9wcmludF9zY21fY2hhbmdlcyA9IEZhbHNlCisgICAgICAgIHNl
bGYuX3NjbV9jaGFuZ2VzID0ge30KKwogICAgIGRlZiBfcmVzdWx0c191cmwoc2VsZiwgYnVpbGRl
cl9uYW1lKToKICAgICAgICAgIyBGSVhNRTogR2VuZXJhbGl6ZSB0aGlzIGNvbW1hbmQgdG8gd29y
ayB3aXRoIG5vbi1idWlsZC5jaHJvbWl1bS5vcmcgYnVpbGRlcnMuCiAgICAgICAgIGJ1aWxkZXIg
PSBzZWxmLl90b29sLmNocm9taXVtX2J1aWxkYm90KCkuYnVpbGRlcl93aXRoX25hbWUoYnVpbGRl
cl9uYW1lKQpAQCAtODksMTIgKzEwMiwxMiBAQCBjbGFzcyBSZWJhc2VsaW5lVGVzdChBYnN0cmFj
dFJlYmFzZWxpbmluZ0NvbW1hbmQpOgogICAgICAgICAgICAgcG9ydCA9IHNlbGYuX3Rvb2wucG9y
dF9mYWN0b3J5LmdldChwbGF0Zm9ybSkKICAgICAgICAgICAgIG9sZF9iYXNlbGluZSA9IHBvcnQu
ZXhwZWN0ZWRfZmlsZW5hbWUodGVzdF9uYW1lLCAiLiIgKyBzdWZmaXgpCiAgICAgICAgICAgICBp
ZiBub3Qgc2VsZi5fdG9vbC5maWxlc3lzdGVtLmV4aXN0cyhvbGRfYmFzZWxpbmUpOgotICAgICAg
ICAgICAgICAgIHByaW50KCJObyBleGlzdGluZyBiYXNlbGluZSBmb3IgJXMuIiAlIHRlc3RfbmFt
ZSkKKyAgICAgICAgICAgICAgICBfbG9nLmluZm8oIk5vIGV4aXN0aW5nIGJhc2VsaW5lIGZvciAl
cy4iICUgdGVzdF9uYW1lKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKICAgICAgICAgICAg
IG5ld19iYXNlbGluZSA9IHNlbGYuX3Rvb2wuZmlsZXN5c3RlbS5qb2luKHBvcnQuYmFzZWxpbmVf
cGF0aCgpLCBzZWxmLl9maWxlX25hbWVfZm9yX2V4cGVjdGVkX3Jlc3VsdCh0ZXN0X25hbWUsIHN1
ZmZpeCkpCiAgICAgICAgICAgICBpZiBzZWxmLl90b29sLmZpbGVzeXN0ZW0uZXhpc3RzKG5ld19i
YXNlbGluZSk6Ci0gICAgICAgICAgICAgICAgcHJpbnQoIkV4aXN0aW5nIGJhc2VsaW5lIGF0ICVz
LCBub3QgY29weWluZyBvdmVyIGl0LiIgJSBuZXdfYmFzZWxpbmUpCisgICAgICAgICAgICAgICAg
X2xvZy5pbmZvKCJFeGlzdGluZyBiYXNlbGluZSBhdCAlcywgbm90IGNvcHlpbmcgb3ZlciBpdC4i
ICUgbmV3X2Jhc2VsaW5lKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKICAgICAgICAgICAg
IG9sZF9iYXNlbGluZXMuYXBwZW5kKG9sZF9iYXNlbGluZSkKQEAgLTEwNCwxMSArMTE3LDExIEBA
IGNsYXNzIFJlYmFzZWxpbmVUZXN0KEFic3RyYWN0UmViYXNlbGluaW5nQ29tbWFuZCk6CiAgICAg
ICAgICAgICBvbGRfYmFzZWxpbmUgPSBvbGRfYmFzZWxpbmVzW2ldCiAgICAgICAgICAgICBuZXdf
YmFzZWxpbmUgPSBuZXdfYmFzZWxpbmVzW2ldCiAKLSAgICAgICAgICAgIHByaW50KCJDb3B5aW5n
IGJhc2VsaW5lIGZyb20gJXMgdG8gJXMuIiAlIChvbGRfYmFzZWxpbmUsIG5ld19iYXNlbGluZSkp
CisgICAgICAgICAgICBfbG9nLmluZm8oIkNvcHlpbmcgYmFzZWxpbmUgZnJvbSAlcyB0byAlcy4i
ICUgKG9sZF9iYXNlbGluZSwgbmV3X2Jhc2VsaW5lKSkKICAgICAgICAgICAgIHNlbGYuX3Rvb2wu
ZmlsZXN5c3RlbS5tYXliZV9tYWtlX2RpcmVjdG9yeShzZWxmLl90b29sLmZpbGVzeXN0ZW0uZGly
bmFtZShuZXdfYmFzZWxpbmUpKQogICAgICAgICAgICAgc2VsZi5fdG9vbC5maWxlc3lzdGVtLmNv
cHlmaWxlKG9sZF9iYXNlbGluZSwgbmV3X2Jhc2VsaW5lKQogICAgICAgICAgICAgaWYgbm90IHNl
bGYuX3Rvb2wuc2NtKCkuZXhpc3RzKG5ld19iYXNlbGluZSk6Ci0gICAgICAgICAgICAgICAgc2Vs
Zi5fdG9vbC5zY20oKS5hZGQobmV3X2Jhc2VsaW5lKQorICAgICAgICAgICAgICAgIHNlbGYuX2Fk
ZF90b19zY20obmV3X2Jhc2VsaW5lKQogCiAgICAgZGVmIF9zYXZlX2Jhc2VsaW5lKHNlbGYsIGRh
dGEsIHRhcmdldF9iYXNlbGluZSk6CiAgICAgICAgIGlmIG5vdCBkYXRhOgpAQCAtMTE3LDcgKzEz
MCwxMyBAQCBjbGFzcyBSZWJhc2VsaW5lVGVzdChBYnN0cmFjdFJlYmFzZWxpbmluZ0NvbW1hbmQp
OgogICAgICAgICBmaWxlc3lzdGVtLm1heWJlX21ha2VfZGlyZWN0b3J5KGZpbGVzeXN0ZW0uZGly
bmFtZSh0YXJnZXRfYmFzZWxpbmUpKQogICAgICAgICBmaWxlc3lzdGVtLndyaXRlX2JpbmFyeV9m
aWxlKHRhcmdldF9iYXNlbGluZSwgZGF0YSkKICAgICAgICAgaWYgbm90IHNlbGYuX3Rvb2wuc2Nt
KCkuZXhpc3RzKHRhcmdldF9iYXNlbGluZSk6Ci0gICAgICAgICAgICBzZWxmLl90b29sLnNjbSgp
LmFkZCh0YXJnZXRfYmFzZWxpbmUpCisgICAgICAgICAgICBzZWxmLl9hZGRfdG9fc2NtKHRhcmdl
dF9iYXNlbGluZSkKKworICAgIGRlZiBfYWRkX3RvX3NjbShzZWxmLCBwYXRoKToKKyAgICAgICAg
aWYgc2VsZi5fcHJpbnRfc2NtX2NoYW5nZXM6CisgICAgICAgICAgICBzZWxmLl9zY21fY2hhbmdl
c1snYWRkJ10uYXBwZW5kKHBhdGgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl90
b29sLnNjbSgpLmFkZChwYXRoKQogCiAgICAgZGVmIF91cGRhdGVfZXhwZWN0YXRpb25zX2ZpbGUo
c2VsZiwgYnVpbGRlcl9uYW1lLCB0ZXN0X25hbWUpOgogICAgICAgICBwb3J0ID0gc2VsZi5fdG9v
bC5wb3J0X2ZhY3RvcnkuZ2V0X2Zyb21fYnVpbGRlcl9uYW1lKGJ1aWxkZXJfbmFtZSkKQEAgLTE0
OCw3ICsxNjcsNyBAQCBjbGFzcyBSZWJhc2VsaW5lVGVzdChBYnN0cmFjdFJlYmFzZWxpbmluZ0Nv
bW1hbmQpOgogICAgICAgICBpZiBwbGF0Zm9ybXNfdG9fbW92ZV9leGlzdGluZ19iYXNlbGluZXNf
dG86CiAgICAgICAgICAgICBzZWxmLl9jb3B5X2V4aXN0aW5nX2Jhc2VsaW5lKHBsYXRmb3Jtc190
b19tb3ZlX2V4aXN0aW5nX2Jhc2VsaW5lc190bywgdGVzdF9uYW1lLCBzdWZmaXgpCiAKLSAgICAg
ICAgcHJpbnQgIlJldHJpZXZpbmcgJXMuIiAlIHNvdXJjZV9iYXNlbGluZQorICAgICAgICBfbG9n
LmluZm8oIlJldHJpZXZpbmcgJXMuIiAlIHNvdXJjZV9iYXNlbGluZSkKICAgICAgICAgc2VsZi5f
c2F2ZV9iYXNlbGluZShzZWxmLl90b29sLndlYi5nZXRfYmluYXJ5KHNvdXJjZV9iYXNlbGluZSwg
Y29udmVydF80MDRfdG9fTm9uZT1UcnVlKSwgdGFyZ2V0X2Jhc2VsaW5lKQogCiAgICAgZGVmIF9y
ZWJhc2VsaW5lX3Rlc3RfYW5kX3VwZGF0ZV9leHBlY3RhdGlvbnMoc2VsZiwgYnVpbGRlcl9uYW1l
LCB0ZXN0X25hbWUsIHBsYXRmb3Jtc190b19tb3ZlX2V4aXN0aW5nX2Jhc2VsaW5lc190byk6CkBA
IC0xNTgsMTIgKzE3NywxNiBAQCBjbGFzcyBSZWJhc2VsaW5lVGVzdChBYnN0cmFjdFJlYmFzZWxp
bmluZ0NvbW1hbmQpOgogCiAgICAgZGVmIGV4ZWN1dGUoc2VsZiwgb3B0aW9ucywgYXJncywgdG9v
bCk6CiAgICAgICAgIHNlbGYuX2Jhc2VsaW5lX3N1ZmZpeF9saXN0ID0gb3B0aW9ucy5zdWZmaXhl
cy5zcGxpdCgnLCcpCisgICAgICAgIHNlbGYuX3ByaW50X3NjbV9jaGFuZ2VzID0gb3B0aW9ucy5w
cmludF9zY21fY2hhbmdlcworICAgICAgICBzZWxmLl9zY21fY2hhbmdlcyA9IHsnYWRkJzogW10s
ICdybSc6IFtdfQogCiAgICAgICAgIGlmIGxlbihhcmdzKSA+IDI6CiAgICAgICAgICAgICBwbGF0
Zm9ybXNfdG9fbW92ZV9leGlzdGluZ19iYXNlbGluZXNfdG8gPSBhcmdzWzI6XQogICAgICAgICBl
bHNlOgogICAgICAgICAgICAgcGxhdGZvcm1zX3RvX21vdmVfZXhpc3RpbmdfYmFzZWxpbmVzX3Rv
ID0gTm9uZQogICAgICAgICBzZWxmLl9yZWJhc2VsaW5lX3Rlc3RfYW5kX3VwZGF0ZV9leHBlY3Rh
dGlvbnMoYXJnc1swXSwgYXJnc1sxXSwgcGxhdGZvcm1zX3RvX21vdmVfZXhpc3RpbmdfYmFzZWxp
bmVzX3RvKQorICAgICAgICBpZiBzZWxmLl9wcmludF9zY21fY2hhbmdlczoKKyAgICAgICAgICAg
IHByaW50IGpzb24uZHVtcHMoc2VsZi5fc2NtX2NoYW5nZXMpCiAKIAogY2xhc3MgT3B0aW1pemVC
YXNlbGluZXMoQWJzdHJhY3RSZWJhc2VsaW5pbmdDb21tYW5kKToKQEAgLTI1NywxMCArMjgwLDEw
IEBAIGNsYXNzIFJlYmFzZWxpbmVFeHBlY3RhdGlvbnMoQWJzdHJhY3REZWNsYXJhdGl2ZUNvbW1h
bmQpOgogICAgICAgICBidWlsZGVyX25hbWUgPSBidWlsZGVycy5idWlsZGVyX25hbWVfZm9yX3Bv
cnRfbmFtZShwb3J0X25hbWUpCiAgICAgICAgIGlmIG5vdCBidWlsZGVyX25hbWU6CiAgICAgICAg
ICAgICByZXR1cm4KLSAgICAgICAgcHJpbnQgIlJldHJpZXZpbmcgcmVzdWx0cyBmb3IgJXMgZnJv
bSAlcy4iICUgKHBvcnRfbmFtZSwgYnVpbGRlcl9uYW1lKQorICAgICAgICBfbG9nLmluZm8oIlJl
dHJpZXZpbmcgcmVzdWx0cyBmb3IgJXMgZnJvbSAlcy4iICUgKHBvcnRfbmFtZSwgYnVpbGRlcl9u
YW1lKSkKICAgICAgICAgZm9yIHRlc3RfbmFtZSBpbiBzZWxmLl90ZXN0c190b19yZWJhc2VsaW5l
KHNlbGYuX3Rvb2wucG9ydF9mYWN0b3J5LmdldChwb3J0X25hbWUpKToKICAgICAgICAgICAgIHNl
bGYuX3RvdWNoZWRfdGVzdF9uYW1lcy5hZGQodGVzdF9uYW1lKQotICAgICAgICAgICAgcHJpbnQg
IiAgICAlcyIgJSB0ZXN0X25hbWUKKyAgICAgICAgICAgIF9sb2cuaW5mbygiICAgICVzIiAlIHRl
c3RfbmFtZSkKICAgICAgICAgICAgICMgRklYTUU6IG5lZWQgdG8gZXh0cmFjdCB0aGUgY29ycmVj
dCBsaXN0IG9mIHN1ZmZpeGVzIGhlcmUuCiAgICAgICAgICAgICBzZWxmLl9ydW5fd2Via2l0X3Bh
dGNoKFsncmViYXNlbGluZS10ZXN0JywgYnVpbGRlcl9uYW1lLCB0ZXN0X25hbWVdKQogCkBAIC0y
NzMsNyArMjk2LDcgQEAgY2xhc3MgUmViYXNlbGluZUV4cGVjdGF0aW9ucyhBYnN0cmFjdERlY2xh
cmF0aXZlQ29tbWFuZCk6CiAgICAgICAgIGlmIG5vdCBvcHRpb25zLm9wdGltaXplOgogICAgICAg
ICAgICAgcmV0dXJuCiAgICAgICAgIGZvciB0ZXN0X25hbWUgaW4gc2VsZi5fdG91Y2hlZF90ZXN0
X25hbWVzOgotICAgICAgICAgICAgcHJpbnQgIk9wdGltaXppbmcgYmFzZWxpbmVzIGZvciAlcy4i
ICUgdGVzdF9uYW1lCisgICAgICAgICAgICBfbG9nLmluZm8oIk9wdGltaXppbmcgYmFzZWxpbmVz
IGZvciAlcy4iICUgdGVzdF9uYW1lKQogICAgICAgICAgICAgc2VsZi5fcnVuX3dlYmtpdF9wYXRj
aChbJ29wdGltaXplLWJhc2VsaW5lcycsIHRlc3RfbmFtZV0pCiAKIApAQCAtMjg1LDcgKzMwOCw3
IEBAIGNsYXNzIFJlYmFzZWxpbmUoQWJzdHJhY3REZWNsYXJhdGl2ZUNvbW1hbmQpOgogICAgIGRl
ZiBfYnVpbGRlcl90b19wdWxsX2Zyb20oc2VsZik6CiAgICAgICAgIGJ1aWxkZXJfc3RhdHVzZXMg
PSBzZWxmLl90b29sLmJ1aWxkYm90LmJ1aWxkZXJfc3RhdHVzZXMoKQogICAgICAgICByZWRfc3Rh
dHVzZXMgPSBbc3RhdHVzIGZvciBzdGF0dXMgaW4gYnVpbGRlcl9zdGF0dXNlcyBpZiBub3Qgc3Rh
dHVzWyJpc19ncmVlbiJdXQotICAgICAgICBwcmludCAiJXMgZmFpbGluZyIgJSAocGx1cmFsaXpl
KCJidWlsZGVyIiwgbGVuKHJlZF9zdGF0dXNlcykpKQorICAgICAgICBfbG9nLmluZm8oIiVzIGZh
aWxpbmciICUgKHBsdXJhbGl6ZSgiYnVpbGRlciIsIGxlbihyZWRfc3RhdHVzZXMpKSkpCiAgICAg
ICAgIGJ1aWxkZXJfY2hvaWNlcyA9IFtzdGF0dXNbIm5hbWUiXSBmb3Igc3RhdHVzIGluIHJlZF9z
dGF0dXNlc10KICAgICAgICAgY2hvc2VuX25hbWUgPSBzZWxmLl90b29sLnVzZXIucHJvbXB0X3dp
dGhfbGlzdCgiV2hpY2ggYnVpbGRlciB0byBwdWxsIHJlc3VsdHMgZnJvbToiLCBidWlsZGVyX2No
b2ljZXMpCiAgICAgICAgICMgRklYTUU6IHByb21wdF93aXRoX2xpc3Qgc2hvdWxkIHJlYWxseSB0
YWtlIGEgc2V0IG9mIG9iamVjdHMgYW5kIGEgc2V0IG9mIG5hbWVzIGFuZCB0aGVuIHJldHVybiB0
aGUgb2JqZWN0LgpAQCAtMzE1LDcgKzMzOCw3IEBAIGNsYXNzIFJlYmFzZWxpbmUoQWJzdHJhY3RE
ZWNsYXJhdGl2ZUNvbW1hbmQpOgogICAgICAgICAgICAgcmVzdWx0c191cmwgPSBzZWxmLl9yZXN1
bHRzX3VybF9mb3JfdGVzdChidWlsZCwgdGVzdCkKICAgICAgICAgICAgICMgUG9ydCBvcGVyYXRl
cyB3aXRoIGFic29sdXRlIHBhdGhzLgogICAgICAgICAgICAgZXhwZWN0ZWRfZmlsZSA9IHBvcnQu
ZXhwZWN0ZWRfZmlsZW5hbWUodGVzdCwgJy50eHQnKQotICAgICAgICAgICAgcHJpbnQgdGVzdAor
ICAgICAgICAgICAgX2xvZy5pbmZvKHRlc3QpCiAgICAgICAgICAgICBzZWxmLl9yZXBsYWNlX2V4
cGVjdGF0aW9uX3dpdGhfcmVtb3RlX3Jlc3VsdChleHBlY3RlZF9maWxlLCByZXN1bHRzX3VybCkK
IAogICAgICAgICAjIEZJWE1FOiBXZSBzaG91bGQgaGFuZGxlIG5ldyByZXN1bHRzIHRvby4KZGlm
ZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9yZWJhc2VsaW5l
X3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3JlYmFz
ZWxpbmVfdW5pdHRlc3QucHkKaW5kZXggNDZkOWVkNDdiZmRmMDY5NTQ1NWRjYWU5OGFjNzg3ZjJh
Y2NjOTc5Zi4uMGFkYjE4MjNjMzM5YjAwNzg3NzZjMTdkNGZmYTg1YzRhMmYxYzRhOCAxMDA2NDQK
LS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3JlYmFzZWxpbmVfdW5p
dHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3JlYmFz
ZWxpbmVfdW5pdHRlc3QucHkKQEAgLTU1LDExICs1NSwxMSBAQCBCVUdBIERFQlVHIDogZmFzdC9j
c3MvbGFyZ2UtbGlzdC1vZi1ydWxlcy1jcmFzaC5odG1sID0gVEVYVAogICAgICAgICB0b29sLmZp
bGVzeXN0ZW0ud3JpdGVfdGV4dF9maWxlKG9zLnBhdGguam9pbihsaW9uX3BvcnQubGF5b3V0X3Rl
c3RzX2RpcigpLCAiZmFzdC9jc3MvbGFyZ2UtbGlzdC1vZi1ydWxlcy1jcmFzaC5odG1sIiksICJE
dW1teSB0ZXN0IGNvbnRlbnRzIikKICAgICAgICAgdG9vbC5maWxlc3lzdGVtLndyaXRlX3RleHRf
ZmlsZShvcy5wYXRoLmpvaW4obGlvbl9wb3J0LmxheW91dF90ZXN0c19kaXIoKSwgInVzZXJzY3Jp
cHRzL2Fub3RoZXItdGVzdC5odG1sIiksICJEdW1teSB0ZXN0IGNvbnRlbnRzIikKIAotICAgICAg
ICBleHBlY3RlZF9zdGRvdXQgPSAiIiJSZXRyaWV2aW5nIGh0dHA6Ly9leGFtcGxlLmNvbS9mL2J1
aWxkZXJzL1dlYmtpdCBNYWMxMC43L3Jlc3VsdHMvbGF5b3V0LXRlc3QtcmVzdWx0cy91c2Vyc2Ny
aXB0cy9hbm90aGVyLXRlc3QtYWN0dWFsLnBuZy4KKyAgICAgICAgZXhwZWN0ZWRfbG9ncyA9ICIi
IlJldHJpZXZpbmcgaHR0cDovL2V4YW1wbGUuY29tL2YvYnVpbGRlcnMvV2Via2l0IE1hYzEwLjcv
cmVzdWx0cy9sYXlvdXQtdGVzdC1yZXN1bHRzL3VzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC1hY3R1
YWwucG5nLgogUmV0cmlldmluZyBodHRwOi8vZXhhbXBsZS5jb20vZi9idWlsZGVycy9XZWJraXQg
TWFjMTAuNy9yZXN1bHRzL2xheW91dC10ZXN0LXJlc3VsdHMvdXNlcnNjcmlwdHMvYW5vdGhlci10
ZXN0LWFjdHVhbC53YXYuCiBSZXRyaWV2aW5nIGh0dHA6Ly9leGFtcGxlLmNvbS9mL2J1aWxkZXJz
L1dlYmtpdCBNYWMxMC43L3Jlc3VsdHMvbGF5b3V0LXRlc3QtcmVzdWx0cy91c2Vyc2NyaXB0cy9h
bm90aGVyLXRlc3QtYWN0dWFsLnR4dC4KICIiIgotICAgICAgICBPdXRwdXRDYXB0dXJlKCkuYXNz
ZXJ0X291dHB1dHMoc2VsZiwgY29tbWFuZC5fcmViYXNlbGluZV90ZXN0X2FuZF91cGRhdGVfZXhw
ZWN0YXRpb25zLCBbIldlYmtpdCBNYWMxMC43IiwgInVzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC5o
dG1sIiwgTm9uZV0sIGV4cGVjdGVkX3N0ZG91dD1leHBlY3RlZF9zdGRvdXQpCisgICAgICAgIE91
dHB1dENhcHR1cmUoKS5hc3NlcnRfb3V0cHV0cyhzZWxmLCBjb21tYW5kLl9yZWJhc2VsaW5lX3Rl
c3RfYW5kX3VwZGF0ZV9leHBlY3RhdGlvbnMsIFsiV2Via2l0IE1hYzEwLjciLCAidXNlcnNjcmlw
dHMvYW5vdGhlci10ZXN0Lmh0bWwiLCBOb25lXSwgZXhwZWN0ZWRfbG9ncz1leHBlY3RlZF9sb2dz
KQogCiAgICAgICAgIG5ld19leHBlY3RhdGlvbnMgPSB0b29sLmZpbGVzeXN0ZW0ucmVhZF90ZXh0
X2ZpbGUobGlvbl9wb3J0LnBhdGhfdG9fdGVzdF9leHBlY3RhdGlvbnNfZmlsZSgpKQogICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKG5ld19leHBlY3RhdGlvbnMsICIiIkJVR0IgTUFDIExJTlVYIFhQ
IERFQlVHIDogZmFzdC9kb20vV2luZG93L3dpbmRvdy1wb3N0bWVzc2FnZS1jbG9uZS1yZWFsbHkt
ZGVlcC1hcnJheS5odG1sID0gUEFTUwpAQCAtNzUsMTEgKzc1LDExIEBAIEJVR0EgREVCVUcgOiBm
YXN0L2Nzcy9sYXJnZS1saXN0LW9mLXJ1bGVzLWNyYXNoLmh0bWwgPSBURVhUCiAgICAgICAgIHRv
b2wuZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUobGlvbl9wb3J0LnBhdGhfdG9fdGVzdF9leHBl
Y3RhdGlvbnNfZmlsZSgpLCAiQlVHWCBNQUMgOiB1c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QuaHRt
bCA9IElNQUdFXG5CVUdaIExJTlVYIDogdXNlcnNjcmlwdHMvYW5vdGhlci10ZXN0Lmh0bWwgPSBJ
TUFHRVxuIikKICAgICAgICAgdG9vbC5maWxlc3lzdGVtLndyaXRlX3RleHRfZmlsZShvcy5wYXRo
LmpvaW4obGlvbl9wb3J0LmxheW91dF90ZXN0c19kaXIoKSwgInVzZXJzY3JpcHRzL2Fub3RoZXIt
dGVzdC5odG1sIiksICJEdW1teSB0ZXN0IGNvbnRlbnRzIikKIAotICAgICAgICBleHBlY3RlZF9z
dGRvdXQgPSAiIiJSZXRyaWV2aW5nIGh0dHA6Ly9leGFtcGxlLmNvbS9mL2J1aWxkZXJzL1dlYmtp
dCBNYWMxMC43L3Jlc3VsdHMvbGF5b3V0LXRlc3QtcmVzdWx0cy91c2Vyc2NyaXB0cy9hbm90aGVy
LXRlc3QtYWN0dWFsLnBuZy4KKyAgICAgICAgZXhwZWN0ZWRfbG9ncyA9ICIiIlJldHJpZXZpbmcg
aHR0cDovL2V4YW1wbGUuY29tL2YvYnVpbGRlcnMvV2Via2l0IE1hYzEwLjcvcmVzdWx0cy9sYXlv
dXQtdGVzdC1yZXN1bHRzL3VzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC1hY3R1YWwucG5nLgogUmV0
cmlldmluZyBodHRwOi8vZXhhbXBsZS5jb20vZi9idWlsZGVycy9XZWJraXQgTWFjMTAuNy9yZXN1
bHRzL2xheW91dC10ZXN0LXJlc3VsdHMvdXNlcnNjcmlwdHMvYW5vdGhlci10ZXN0LWFjdHVhbC53
YXYuCiBSZXRyaWV2aW5nIGh0dHA6Ly9leGFtcGxlLmNvbS9mL2J1aWxkZXJzL1dlYmtpdCBNYWMx
MC43L3Jlc3VsdHMvbGF5b3V0LXRlc3QtcmVzdWx0cy91c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3Qt
YWN0dWFsLnR4dC4KICIiIgotICAgICAgICBPdXRwdXRDYXB0dXJlKCkuYXNzZXJ0X291dHB1dHMo
c2VsZiwgY29tbWFuZC5fcmViYXNlbGluZV90ZXN0X2FuZF91cGRhdGVfZXhwZWN0YXRpb25zLCBb
IldlYmtpdCBNYWMxMC43IiwgInVzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC5odG1sIiwgTm9uZV0s
IGV4cGVjdGVkX3N0ZG91dD1leHBlY3RlZF9zdGRvdXQpCisgICAgICAgIE91dHB1dENhcHR1cmUo
KS5hc3NlcnRfb3V0cHV0cyhzZWxmLCBjb21tYW5kLl9yZWJhc2VsaW5lX3Rlc3RfYW5kX3VwZGF0
ZV9leHBlY3RhdGlvbnMsIFsiV2Via2l0IE1hYzEwLjciLCAidXNlcnNjcmlwdHMvYW5vdGhlci10
ZXN0Lmh0bWwiLCBOb25lXSwgZXhwZWN0ZWRfbG9ncz1leHBlY3RlZF9sb2dzKQogCiAgICAgICAg
IG5ld19leHBlY3RhdGlvbnMgPSB0b29sLmZpbGVzeXN0ZW0ucmVhZF90ZXh0X2ZpbGUobGlvbl9w
b3J0LnBhdGhfdG9fdGVzdF9leHBlY3RhdGlvbnNfZmlsZSgpKQogICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKG5ld19leHBlY3RhdGlvbnMsICJCVUdYIExFT1BBUkQgU05PV0xFT1BBUkQgOiB1c2Vy
c2NyaXB0cy9hbm90aGVyLXRlc3QuaHRtbCA9IElNQUdFXG5CVUdaIExJTlVYIDogdXNlcnNjcmlw
dHMvYW5vdGhlci10ZXN0Lmh0bWwgPSBJTUFHRVxuIikKQEAgLTg3LDggKzg3LDE4IEBAIFJldHJp
ZXZpbmcgaHR0cDovL2V4YW1wbGUuY29tL2YvYnVpbGRlcnMvV2Via2l0IE1hYzEwLjcvcmVzdWx0
cy9sYXlvdXQtdGVzdC1yZXN1CiAgICAgZGVmIHRlc3RfcmViYXNlbGluZV90ZXN0KHNlbGYpOgog
ICAgICAgICBjb21tYW5kID0gUmViYXNlbGluZVRlc3QoKQogICAgICAgICBjb21tYW5kLmJpbmRf
dG9fdG9vbChNb2NrVG9vbCgpKQotICAgICAgICBleHBlY3RlZF9zdGRvdXQgPSAiUmV0cmlldmlu
ZyBodHRwOi8vZXhhbXBsZS5jb20vZi9idWlsZGVycy9XZWJraXQgTGludXgvcmVzdWx0cy9sYXlv
dXQtdGVzdC1yZXN1bHRzL3VzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC1hY3R1YWwudHh0LlxuIgot
ICAgICAgICBPdXRwdXRDYXB0dXJlKCkuYXNzZXJ0X291dHB1dHMoc2VsZiwgY29tbWFuZC5fcmVi
YXNlbGluZV90ZXN0LCBbIldlYmtpdCBMaW51eCIsICJ1c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3Qu
aHRtbCIsIE5vbmUsICJ0eHQiXSwgZXhwZWN0ZWRfc3Rkb3V0PWV4cGVjdGVkX3N0ZG91dCkKKyAg
ICAgICAgZXhwZWN0ZWRfbG9ncyA9ICJSZXRyaWV2aW5nIGh0dHA6Ly9leGFtcGxlLmNvbS9mL2J1
aWxkZXJzL1dlYmtpdCBMaW51eC9yZXN1bHRzL2xheW91dC10ZXN0LXJlc3VsdHMvdXNlcnNjcmlw
dHMvYW5vdGhlci10ZXN0LWFjdHVhbC50eHQuXG4iCisgICAgICAgIE91dHB1dENhcHR1cmUoKS5h
c3NlcnRfb3V0cHV0cyhzZWxmLCBjb21tYW5kLl9yZWJhc2VsaW5lX3Rlc3QsIFsiV2Via2l0IExp
bnV4IiwgInVzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC5odG1sIiwgTm9uZSwgInR4dCJdLCBleHBl
Y3RlZF9sb2dzPWV4cGVjdGVkX2xvZ3MpCisKKyAgICBkZWYgdGVzdF9yZWJhc2VsaW5lX3Rlc3Rf
YW5kX3ByaW50X3NjbV9jaGFuZ2VzKHNlbGYpOgorICAgICAgICBjb21tYW5kID0gUmViYXNlbGlu
ZVRlc3QoKQorICAgICAgICBjb21tYW5kLmJpbmRfdG9fdG9vbChNb2NrVG9vbCgpKQorICAgICAg
ICBleHBlY3RlZF9sb2dzID0gIlJldHJpZXZpbmcgaHR0cDovL2V4YW1wbGUuY29tL2YvYnVpbGRl
cnMvV2Via2l0IExpbnV4L3Jlc3VsdHMvbGF5b3V0LXRlc3QtcmVzdWx0cy91c2Vyc2NyaXB0cy9h
bm90aGVyLXRlc3QtYWN0dWFsLnR4dC5cbiIKKyAgICAgICAgY29tbWFuZC5fcHJpbnRfc2NtX2No
YW5nZXMgPSBUcnVlCisgICAgICAgIGNvbW1hbmQuX3NjbV9jaGFuZ2VzID0geydhZGQnOiBbXSwg
J3JtJzogW119CisgICAgICAgIGNvbW1hbmQuX3Rvb2wuX3NjbS5leGlzdHMgPSBsYW1iZGEgeDog
RmFsc2UKKyAgICAgICAgT3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYsIGNvbW1h
bmQuX3JlYmFzZWxpbmVfdGVzdCwgWyJXZWJraXQgTGludXgiLCAidXNlcnNjcmlwdHMvYW5vdGhl
ci10ZXN0Lmh0bWwiLCBOb25lLCAidHh0Il0sIGV4cGVjdGVkX2xvZ3M9ZXhwZWN0ZWRfbG9ncykK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY29tbWFuZC5fc2NtX2NoYW5nZXMsIHsnYWRkJzog
WycvbW9jay1jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS1saW51eC91c2Vy
c2NyaXB0cy9hbm90aGVyLXRlc3QtZXhwZWN0ZWQudHh0J10sICdybSc6IFtdfSkKIAogICAgIGRl
ZiB0ZXN0X3JlYmFzZWxpbmVfYW5kX2NvcHlfdGVzdChzZWxmKToKICAgICAgICAgY29tbWFuZCA9
IFJlYmFzZWxpbmVUZXN0KCkKQEAgLTk4LDIwICsxMDgsMjAgQEAgUmV0cmlldmluZyBodHRwOi8v
ZXhhbXBsZS5jb20vZi9idWlsZGVycy9XZWJraXQgTWFjMTAuNy9yZXN1bHRzL2xheW91dC10ZXN0
LXJlc3UKICAgICAgICAgbGlvbl9wb3J0ID0gdG9vbC5wb3J0X2ZhY3RvcnkuZ2V0X2Zyb21fYnVp
bGRlcl9uYW1lKCJXZWJraXQgTWFjMTAuNyIpCiAgICAgICAgIHRvb2wuZmlsZXN5c3RlbS53cml0
ZV90ZXh0X2ZpbGUob3MucGF0aC5qb2luKGxpb25fcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCksICJ1
c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QtZXhwZWN0ZWQudHh0IiksICJEdW1teSBleHBlY3RlZCBy
ZXN1bHQiKQogCi0gICAgICAgIGV4cGVjdGVkX3N0ZG91dCA9ICIiIkNvcHlpbmcgYmFzZWxpbmUg
ZnJvbSAvbW9jay1jaGVja291dC9MYXlvdXRUZXN0cy91c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3Qt
ZXhwZWN0ZWQudHh0IHRvIC9tb2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9t
aXVtLW1hYy1zbm93bGVvcGFyZC91c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QtZXhwZWN0ZWQudHh0
LgorICAgICAgICBleHBlY3RlZF9sb2dzID0gIiIiQ29weWluZyBiYXNlbGluZSBmcm9tIC9tb2Nr
LWNoZWNrb3V0L0xheW91dFRlc3RzL3VzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC1leHBlY3RlZC50
eHQgdG8gL21vY2stY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0tbWFjLXNu
b3dsZW9wYXJkL3VzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC1leHBlY3RlZC50eHQuCiBSZXRyaWV2
aW5nIGh0dHA6Ly9leGFtcGxlLmNvbS9mL2J1aWxkZXJzL1dlYmtpdCBNYWMxMC43L3Jlc3VsdHMv
bGF5b3V0LXRlc3QtcmVzdWx0cy91c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QtYWN0dWFsLnR4dC4K
ICIiIgotICAgICAgICBPdXRwdXRDYXB0dXJlKCkuYXNzZXJ0X291dHB1dHMoc2VsZiwgY29tbWFu
ZC5fcmViYXNlbGluZV90ZXN0LCBbIldlYmtpdCBNYWMxMC43IiwgInVzZXJzY3JpcHRzL2Fub3Ro
ZXItdGVzdC5odG1sIiwgWyJjaHJvbWl1bS1tYWMtc25vd2xlb3BhcmQiXSwgInR4dCJdLCBleHBl
Y3RlZF9zdGRvdXQ9ZXhwZWN0ZWRfc3Rkb3V0KQorICAgICAgICBPdXRwdXRDYXB0dXJlKCkuYXNz
ZXJ0X291dHB1dHMoc2VsZiwgY29tbWFuZC5fcmViYXNlbGluZV90ZXN0LCBbIldlYmtpdCBNYWMx
MC43IiwgInVzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC5odG1sIiwgWyJjaHJvbWl1bS1tYWMtc25v
d2xlb3BhcmQiXSwgInR4dCJdLCBleHBlY3RlZF9sb2dzPWV4cGVjdGVkX2xvZ3MpCiAKICAgICBk
ZWYgdGVzdF9yZWJhc2VsaW5lX2FuZF9jb3B5X3Rlc3Rfbm9fZXhpc3RpbmdfcmVzdWx0KHNlbGYp
OgogICAgICAgICBjb21tYW5kID0gUmViYXNlbGluZVRlc3QoKQogICAgICAgICB0b29sID0gTW9j
a1Rvb2woKQogICAgICAgICBjb21tYW5kLmJpbmRfdG9fdG9vbCh0b29sKQogCi0gICAgICAgIGV4
cGVjdGVkX3N0ZG91dCA9ICIiIk5vIGV4aXN0aW5nIGJhc2VsaW5lIGZvciB1c2Vyc2NyaXB0cy9h
bm90aGVyLXRlc3QuaHRtbC4KKyAgICAgICAgZXhwZWN0ZWRfbG9ncyA9ICIiIk5vIGV4aXN0aW5n
IGJhc2VsaW5lIGZvciB1c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QuaHRtbC4KIFJldHJpZXZpbmcg
aHR0cDovL2V4YW1wbGUuY29tL2YvYnVpbGRlcnMvV2Via2l0IE1hYzEwLjcvcmVzdWx0cy9sYXlv
dXQtdGVzdC1yZXN1bHRzL3VzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC1hY3R1YWwudHh0LgogIiIi
Ci0gICAgICAgIE91dHB1dENhcHR1cmUoKS5hc3NlcnRfb3V0cHV0cyhzZWxmLCBjb21tYW5kLl9y
ZWJhc2VsaW5lX3Rlc3QsIFsiV2Via2l0IE1hYzEwLjciLCAidXNlcnNjcmlwdHMvYW5vdGhlci10
ZXN0Lmh0bWwiLCBbImNocm9taXVtLW1hYy1zbm93bGVvcGFyZCJdLCAidHh0Il0sIGV4cGVjdGVk
X3N0ZG91dD1leHBlY3RlZF9zdGRvdXQpCisgICAgICAgIE91dHB1dENhcHR1cmUoKS5hc3NlcnRf
b3V0cHV0cyhzZWxmLCBjb21tYW5kLl9yZWJhc2VsaW5lX3Rlc3QsIFsiV2Via2l0IE1hYzEwLjci
LCAidXNlcnNjcmlwdHMvYW5vdGhlci10ZXN0Lmh0bWwiLCBbImNocm9taXVtLW1hYy1zbm93bGVv
cGFyZCJdLCAidHh0Il0sIGV4cGVjdGVkX2xvZ3M9ZXhwZWN0ZWRfbG9ncykKIAogICAgIGRlZiB0
ZXN0X3JlYmFzZWxpbmVfYW5kX2NvcHlfdGVzdF93aXRoX2xpb25fcmVzdWx0KHNlbGYpOgogICAg
ICAgICBjb21tYW5kID0gUmViYXNlbGluZVRlc3QoKQpAQCAtMTIxLDExICsxMzEsMTEgQEAgUmV0
cmlldmluZyBodHRwOi8vZXhhbXBsZS5jb20vZi9idWlsZGVycy9XZWJraXQgTWFjMTAuNy9yZXN1
bHRzL2xheW91dC10ZXN0LXJlc3UKICAgICAgICAgbGlvbl9wb3J0ID0gdG9vbC5wb3J0X2ZhY3Rv
cnkuZ2V0X2Zyb21fYnVpbGRlcl9uYW1lKCJXZWJraXQgTWFjMTAuNyIpCiAgICAgICAgIHRvb2wu
ZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUob3MucGF0aC5qb2luKGxpb25fcG9ydC5iYXNlbGlu
ZV9wYXRoKCksICJ1c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QtZXhwZWN0ZWQudHh0IiksICJEdW1t
eSBleHBlY3RlZCByZXN1bHQiKQogCi0gICAgICAgIGV4cGVjdGVkX3N0ZG91dCA9ICIiIkNvcHlp
bmcgYmFzZWxpbmUgZnJvbSAvbW9jay1jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJv
bWl1bS1tYWMvdXNlcnNjcmlwdHMvYW5vdGhlci10ZXN0LWV4cGVjdGVkLnR4dCB0byAvbW9jay1j
aGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS1tYWMtc25vd2xlb3BhcmQvdXNl
cnNjcmlwdHMvYW5vdGhlci10ZXN0LWV4cGVjdGVkLnR4dC4KKyAgICAgICAgZXhwZWN0ZWRfbG9n
cyA9ICIiIkNvcHlpbmcgYmFzZWxpbmUgZnJvbSAvbW9jay1jaGVja291dC9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9jaHJvbWl1bS1tYWMvdXNlcnNjcmlwdHMvYW5vdGhlci10ZXN0LWV4cGVjdGVkLnR4
dCB0byAvbW9jay1jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS1tYWMtc25v
d2xlb3BhcmQvdXNlcnNjcmlwdHMvYW5vdGhlci10ZXN0LWV4cGVjdGVkLnR4dC4KIENvcHlpbmcg
YmFzZWxpbmUgZnJvbSAvbW9jay1jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1
bS1tYWMvdXNlcnNjcmlwdHMvYW5vdGhlci10ZXN0LWV4cGVjdGVkLnR4dCB0byAvbW9jay1jaGVj
a291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS1tYWMtbGVvcGFyZC91c2Vyc2NyaXB0
cy9hbm90aGVyLXRlc3QtZXhwZWN0ZWQudHh0LgogUmV0cmlldmluZyBodHRwOi8vZXhhbXBsZS5j
b20vZi9idWlsZGVycy9XZWJraXQgTWFjMTAuNy9yZXN1bHRzL2xheW91dC10ZXN0LXJlc3VsdHMv
dXNlcnNjcmlwdHMvYW5vdGhlci10ZXN0LWFjdHVhbC50eHQuCiAiIiIKLSAgICAgICAgT3V0cHV0
Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYsIGNvbW1hbmQuX3JlYmFzZWxpbmVfdGVzdCwg
WyJXZWJraXQgTWFjMTAuNyIsICJ1c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QuaHRtbCIsIFsiY2hy
b21pdW0tbWFjLXNub3dsZW9wYXJkIiwgImNocm9taXVtLW1hYy1sZW9wYXJkIl0sICJ0eHQiXSwg
ZXhwZWN0ZWRfc3Rkb3V0PWV4cGVjdGVkX3N0ZG91dCkKKyAgICAgICAgT3V0cHV0Q2FwdHVyZSgp
LmFzc2VydF9vdXRwdXRzKHNlbGYsIGNvbW1hbmQuX3JlYmFzZWxpbmVfdGVzdCwgWyJXZWJraXQg
TWFjMTAuNyIsICJ1c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QuaHRtbCIsIFsiY2hyb21pdW0tbWFj
LXNub3dsZW9wYXJkIiwgImNocm9taXVtLW1hYy1sZW9wYXJkIl0sICJ0eHQiXSwgZXhwZWN0ZWRf
bG9ncz1leHBlY3RlZF9sb2dzKQogCiAgICAgZGVmIHRlc3RfcmViYXNlbGluZV9hbmRfY29weV9u
b19vdmVyd3JpdGVfdGVzdChzZWxmKToKICAgICAgICAgY29tbWFuZCA9IFJlYmFzZWxpbmVUZXN0
KCkKQEAgLTEzOCwxMCArMTQ4LDEwIEBAIFJldHJpZXZpbmcgaHR0cDovL2V4YW1wbGUuY29tL2Yv
YnVpbGRlcnMvV2Via2l0IE1hYzEwLjcvcmVzdWx0cy9sYXlvdXQtdGVzdC1yZXN1CiAgICAgICAg
IHNub3dsZW9wYXJkX3BvcnQgPSB0b29sLnBvcnRfZmFjdG9yeS5nZXRfZnJvbV9idWlsZGVyX25h
bWUoIldlYmtpdCBNYWMxMC42IikKICAgICAgICAgdG9vbC5maWxlc3lzdGVtLndyaXRlX3RleHRf
ZmlsZShvcy5wYXRoLmpvaW4oc25vd2xlb3BhcmRfcG9ydC5iYXNlbGluZV9wYXRoKCksICJ1c2Vy
c2NyaXB0cy9hbm90aGVyLXRlc3QtZXhwZWN0ZWQudHh0IiksICJEdW1teSBleHBlY3RlZCByZXN1
bHQiKQogCi0gICAgICAgIGV4cGVjdGVkX3N0ZG91dCA9ICIiIkV4aXN0aW5nIGJhc2VsaW5lIGF0
IC9tb2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLW1hYy1zbm93bGVv
cGFyZC91c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QtZXhwZWN0ZWQudHh0LCBub3QgY29weWluZyBv
dmVyIGl0LgorICAgICAgICBleHBlY3RlZF9sb2dzID0gIiIiRXhpc3RpbmcgYmFzZWxpbmUgYXQg
L21vY2stY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0tbWFjLXNub3dsZW9w
YXJkL3VzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC1leHBlY3RlZC50eHQsIG5vdCBjb3B5aW5nIG92
ZXIgaXQuCiBSZXRyaWV2aW5nIGh0dHA6Ly9leGFtcGxlLmNvbS9mL2J1aWxkZXJzL1dlYmtpdCBN
YWMxMC43L3Jlc3VsdHMvbGF5b3V0LXRlc3QtcmVzdWx0cy91c2Vyc2NyaXB0cy9hbm90aGVyLXRl
c3QtYWN0dWFsLnR4dC4KICIiIgotICAgICAgICBPdXRwdXRDYXB0dXJlKCkuYXNzZXJ0X291dHB1
dHMoc2VsZiwgY29tbWFuZC5fcmViYXNlbGluZV90ZXN0LCBbIldlYmtpdCBNYWMxMC43IiwgInVz
ZXJzY3JpcHRzL2Fub3RoZXItdGVzdC5odG1sIiwgWyJjaHJvbWl1bS1tYWMtc25vd2xlb3BhcmQi
XSwgInR4dCJdLCBleHBlY3RlZF9zdGRvdXQ9ZXhwZWN0ZWRfc3Rkb3V0KQorICAgICAgICBPdXRw
dXRDYXB0dXJlKCkuYXNzZXJ0X291dHB1dHMoc2VsZiwgY29tbWFuZC5fcmViYXNlbGluZV90ZXN0
LCBbIldlYmtpdCBNYWMxMC43IiwgInVzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC5odG1sIiwgWyJj
aHJvbWl1bS1tYWMtc25vd2xlb3BhcmQiXSwgInR4dCJdLCBleHBlY3RlZF9sb2dzPWV4cGVjdGVk
X2xvZ3MpCiAKICAgICBkZWYgdGVzdF9yZWJhc2VsaW5lX2V4cGVjdGF0aW9ucyhzZWxmKToKICAg
ICAgICAgY29tbWFuZCA9IFJlYmFzZWxpbmVFeHBlY3RhdGlvbnMoKQpAQCAtMTU1LDcgKzE2NSw3
IEBAIFJldHJpZXZpbmcgaHR0cDovL2V4YW1wbGUuY29tL2YvYnVpbGRlcnMvV2Via2l0IE1hYzEw
LjcvcmVzdWx0cy9sYXlvdXQtdGVzdC1yZXN1CiAgICAgICAgICMgRG9uJ3QgZW5hYmxlIGxvZ2dp
bmcgdW50aWwgYWZ0ZXIgd2UgY3JlYXRlIHRoZSBtb2NrIGV4cGVjdGF0aW9uIGZpbGVzIGFzIHNv
bWUgUG9ydC5fX2luaXRfXydzIHJ1biBzdWJjb21tYW5kcy4KICAgICAgICAgdG9vbC5leGVjdXRp
dmUgPSBNb2NrRXhlY3V0aXZlKHNob3VsZF9sb2c9VHJ1ZSkKIAotICAgICAgICBleHBlY3RlZF9z
dGRvdXQgPSAiIiJSZXRyaWV2aW5nIHJlc3VsdHMgZm9yIGNocm9taXVtLWxpbnV4LXg4NiBmcm9t
IFdlYmtpdCBMaW51eCAzMi4KKyAgICAgICAgZXhwZWN0ZWRfbG9ncyA9ICIiIlJldHJpZXZpbmcg
cmVzdWx0cyBmb3IgY2hyb21pdW0tbGludXgteDg2IGZyb20gV2Via2l0IExpbnV4IDMyLgogICAg
IHVzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC5odG1sCiAgICAgdXNlcnNjcmlwdHMvaW1hZ2VzLnN2
ZwogUmV0cmlldmluZyByZXN1bHRzIGZvciBjaHJvbWl1bS1saW51eC14ODZfNjQgZnJvbSBXZWJr
aXQgTGludXguCkBAIC0yMDAsOSArMjEwLDkgQEAgTU9DSyBydW5fY29tbWFuZDogWydlY2hvJywg
J3JlYmFzZWxpbmUtdGVzdCcsICdXZWJraXQgV2luJywgJ3VzZXJzY3JpcHRzL2ltYWdlcy4KICIi
IgogCiAgICAgICAgIGNvbW1hbmQuX3Rlc3RzX3RvX3JlYmFzZWxpbmUgPSBsYW1iZGEgcG9ydDog
Wyd1c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QuaHRtbCcsICd1c2Vyc2NyaXB0cy9pbWFnZXMuc3Zn
J10KLSAgICAgICAgT3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYsIGNvbW1hbmQu
ZXhlY3V0ZSwgW01vY2tPcHRpb25zKG9wdGltaXplPUZhbHNlKSwgW10sIHRvb2xdLCBleHBlY3Rl
ZF9zdGRvdXQ9ZXhwZWN0ZWRfc3Rkb3V0LCBleHBlY3RlZF9zdGRlcnI9ZXhwZWN0ZWRfc3RkZXJy
KQorICAgICAgICBPdXRwdXRDYXB0dXJlKCkuYXNzZXJ0X291dHB1dHMoc2VsZiwgY29tbWFuZC5l
eGVjdXRlLCBbTW9ja09wdGlvbnMob3B0aW1pemU9RmFsc2UpLCBbXSwgdG9vbF0sIGV4cGVjdGVk
X2xvZ3M9ZXhwZWN0ZWRfbG9ncywgZXhwZWN0ZWRfc3RkZXJyPWV4cGVjdGVkX3N0ZGVycikKIAot
ICAgICAgICBleHBlY3RlZF9zdGRvdXRfd2l0aF9vcHRpbWl6ZSA9IGV4cGVjdGVkX3N0ZG91dCAr
ICgKKyAgICAgICAgZXhwZWN0ZWRfbG9nc193aXRoX29wdGltaXplID0gZXhwZWN0ZWRfbG9ncyAr
ICgKICAgICAgICAgICAgICJPcHRpbWl6aW5nIGJhc2VsaW5lcyBmb3IgdXNlcnNjcmlwdHMvYW5v
dGhlci10ZXN0Lmh0bWwuXG4iCiAgICAgICAgICAgICAiT3B0aW1pemluZyBiYXNlbGluZXMgZm9y
IHVzZXJzY3JpcHRzL2ltYWdlcy5zdmcuXG4iKQogICAgICAgICBleHBlY3RlZF9zdGRlcnJfd2l0
aF9vcHRpbWl6ZSA9IGV4cGVjdGVkX3N0ZGVyciArICgKQEAgLTIxMCw0ICsyMjAsNCBAQCBNT0NL
IHJ1bl9jb21tYW5kOiBbJ2VjaG8nLCAncmViYXNlbGluZS10ZXN0JywgJ1dlYmtpdCBXaW4nLCAn
dXNlcnNjcmlwdHMvaW1hZ2VzLgogICAgICAgICAgICAgIk1PQ0sgcnVuX2NvbW1hbmQ6IFsnZWNo
bycsICdvcHRpbWl6ZS1iYXNlbGluZXMnLCAndXNlcnNjcmlwdHMvaW1hZ2VzLnN2ZyddLCBjd2Q9
L21vY2stY2hlY2tvdXRcbiIpCiAKICAgICAgICAgY29tbWFuZC5fdGVzdHNfdG9fcmViYXNlbGlu
ZSA9IGxhbWJkYSBwb3J0OiBbJ3VzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC5odG1sJywgJ3VzZXJz
Y3JpcHRzL2ltYWdlcy5zdmcnXQotICAgICAgICBPdXRwdXRDYXB0dXJlKCkuYXNzZXJ0X291dHB1
dHMoc2VsZiwgY29tbWFuZC5leGVjdXRlLCBbTW9ja09wdGlvbnMob3B0aW1pemU9VHJ1ZSksIFtd
LCB0b29sXSwgZXhwZWN0ZWRfc3Rkb3V0PWV4cGVjdGVkX3N0ZG91dF93aXRoX29wdGltaXplLCBl
eHBlY3RlZF9zdGRlcnI9ZXhwZWN0ZWRfc3RkZXJyX3dpdGhfb3B0aW1pemUpCisgICAgICAgIE91
dHB1dENhcHR1cmUoKS5hc3NlcnRfb3V0cHV0cyhzZWxmLCBjb21tYW5kLmV4ZWN1dGUsIFtNb2Nr
T3B0aW9ucyhvcHRpbWl6ZT1UcnVlKSwgW10sIHRvb2xdLCBleHBlY3RlZF9sb2dzPWV4cGVjdGVk
X2xvZ3Nfd2l0aF9vcHRpbWl6ZSwgZXhwZWN0ZWRfc3RkZXJyPWV4cGVjdGVkX3N0ZGVycl93aXRo
X29wdGltaXplKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZl
cnMvZ2FyZGVuaW5nc2VydmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZl
cnMvZ2FyZGVuaW5nc2VydmVyLnB5CmluZGV4IDA5NjYwZjYwOTc3YmM1ZTMyZmU5YTg2ZWNkNTEz
Njg0ZTY0NGEzMGYuLmVjZTJmN2IwOTNlNjUyM2NiMzMwNDEwMTJkZjFlZmQxZjg1ZjhhM2IgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL2dhcmRlbmluZ3Nl
cnZlci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2VydmVycy9nYXJkZW5p
bmdzZXJ2ZXIucHkKQEAgLTIzLDkgKzIzLDEyIEBACiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKIGltcG9ydCBC
YXNlSFRUUFNlcnZlcgoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBqc29uCiBpbXBvcnQgb3MKIAog
ZnJvbSB3ZWJraXRweS5jb21tb24ubWVtb2l6ZWQgaW1wb3J0IG1lbW9pemVkCitmcm9tIHdlYmtp
dHB5LmNvbW1vbi5ob3N0IGltcG9ydCBIb3N0CiBmcm9tIHdlYmtpdHB5LnRvb2wuc2VydmVycy5y
ZWZsZWN0aW9uaGFuZGxlciBpbXBvcnQgUmVmbGVjdGlvbkhhbmRsZXIKIGZyb20gd2Via2l0cHku
bGF5b3V0X3Rlc3RzLmNvbnRyb2xsZXJzLnRlc3RfZXhwZWN0YXRpb25zX2VkaXRvciBpbXBvcnQg
QnVnTWFuYWdlciwgVGVzdEV4cGVjdGF0aW9uc0VkaXRvcgogZnJvbSB3ZWJraXRweS5sYXlvdXRf
dGVzdHMubW9kZWxzLnRlc3RfZXhwZWN0YXRpb25zIGltcG9ydCBUZXN0RXhwZWN0YXRpb25QYXJz
ZXIsIFRlc3RFeHBlY3RhdGlvbnMsIFRlc3RFeHBlY3RhdGlvblNlcmlhbGl6ZXIKQEAgLTMzLDYg
KzM2LDkgQEAgZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubW9kZWxzLnRlc3RfY29uZmlndXJh
dGlvbiBpbXBvcnQgVGVzdENvbmZpZ3VyYXRpb25Db24KIGZyb20gd2Via2l0cHkubGF5b3V0X3Rl
c3RzLnBvcnQgaW1wb3J0IGJ1aWxkZXJzCiAKIAorX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9f
bmFtZV9fKQorCisKIGNsYXNzIEJ1aWxkQ292ZXJhZ2VFeHRyYXBvbGF0b3Iob2JqZWN0KToKICAg
ICBkZWYgX19pbml0X18oc2VsZiwgdGVzdF9jb25maWd1cmF0aW9uX2NvbnZlcnRlcik6CiAgICAg
ICAgIHNlbGYuX3Rlc3RfY29uZmlndXJhdGlvbl9jb252ZXJ0ZXIgPSB0ZXN0X2NvbmZpZ3VyYXRp
b25fY29udmVydGVyCkBAIC0xNzEsMTUgKzE3Nyw0MyBAQCBjbGFzcyBHYXJkZW5pbmdIVFRQUmVx
dWVzdEhhbmRsZXIoUmVmbGVjdGlvbkhhbmRsZXIpOgogICAgICAgICAgICAgICAgIGJ1aWxkZXJz
X3RvX2ZhbGxiYWNrX3BhdGhzW2J1aWxkZXJdID0gZmFsbGJhY2tfcGF0aAogICAgICAgICByZXR1
cm4gYnVpbGRlcnNfdG9fZmFsbGJhY2tfcGF0aHMua2V5cygpCiAKLSAgICBkZWYgcmViYXNlbGlu
ZWFsbChzZWxmKToKLSAgICAgICAgIyBGSVhNRTogT3B0aW1pemUgdGhpcyB0byBydW4gaW4gcGFy
YWxsZWwsIGNhY2hlIHppcHMsIGV0Yy4KLSAgICAgICAgdGVzdF9saXN0ID0gc2VsZi5fcmVhZF9l
bnRpdHlfYm9keV9hc19qc29uKCkKKyAgICBkZWYgX3JlYmFzZWxpbmVfY29tbWFuZHMoc2VsZiwg
dGVzdF9saXN0KToKKyAgICAgICAgcGF0aF90b193ZWJraXRfcGF0Y2ggPSBzZWxmLnNlcnZlci50
b29sLnBhdGgoKQorICAgICAgICBjd2QgPSBzZWxmLnNlcnZlci50b29sLnNjbSgpLmNoZWNrb3V0
X3Jvb3QKKyAgICAgICAgY29tbWFuZHMgPSBbXQorICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0X2xp
c3Q6CisgICAgICAgICAgICBmb3IgYnVpbGRlciBpbiBzZWxmLl9idWlsZGVyc190b19mZXRjaF9m
cm9tKHRlc3RfbGlzdFt0ZXN0XSk6CisgICAgICAgICAgICAgICAgc3VmZml4ZXMgPSAnLCcuam9p
bih0ZXN0X2xpc3RbdGVzdF1bYnVpbGRlcl0pCisgICAgICAgICAgICAgICAgY21kX2xpbmUgPSBb
cGF0aF90b193ZWJraXRfcGF0Y2gsICdyZWJhc2VsaW5lLXRlc3QnLCAnLS1wcmludC1zY20tY2hh
bmdlcycsICctLXN1ZmZpeGVzJywgc3VmZml4ZXMsIGJ1aWxkZXIsIHRlc3RdCisgICAgICAgICAg
ICAgICAgY29tbWFuZHMuYXBwZW5kKHR1cGxlKFtjbWRfbGluZSwgY3dkXSkpCisgICAgICAgIHJl
dHVybiBjb21tYW5kcworCisgICAgZGVmIF9maWxlc190b19hZGQoc2VsZiwgY29tbWFuZF9yZXN1
bHRzKToKKyAgICAgICAgZmlsZXNfdG9fYWRkID0gc2V0KCkKKyAgICAgICAgZm9yIG91dHB1dCBp
biBbcmVzdWx0WzFdIGZvciByZXN1bHQgaW4gY29tbWFuZF9yZXN1bHRzXToKKyAgICAgICAgICAg
IHRyeToKKyAgICAgICAgICAgICAgICBmaWxlc190b19hZGQudXBkYXRlKGpzb24ubG9hZHMob3V0
cHV0KVsnYWRkJ10pCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvciwgZToKKyAgICAgICAg
ICAgICAgICBfbG9nLndhcm5pbmcoJyIlcyIgaXMgbm90IGEgSlNPTiBvYmplY3QsIGlnbm9yaW5n
JyAlIG91dHB1dCkKKworICAgICAgICByZXR1cm4gbGlzdChmaWxlc190b19hZGQpCisKKyAgICBk
ZWYgX29wdGltaXplX2Jhc2VsaW5lcyhzZWxmLCB0ZXN0X2xpc3QpOgorICAgICAgICAjIFdlIGRv
bid0IHJ1biB0aGlzIGluIHBhcmFsbGVsIGJlY2F1c2UgbW9kaWZ5aW5nIHRoZSBTQ00gaW4gcGFy
YWxsZWwgaXMgdW5yZWxpYWJsZS4KICAgICAgICAgZm9yIHRlc3QgaW4gdGVzdF9saXN0OgogICAg
ICAgICAgICAgYWxsX3N1ZmZpeGVzID0gc2V0KCkKLSAgICAgICAgICAgIGJ1aWxkZXJzID0gc2Vs
Zi5fYnVpbGRlcnNfdG9fZmV0Y2hfZnJvbSh0ZXN0X2xpc3RbdGVzdF0pCi0gICAgICAgICAgICBm
b3IgYnVpbGRlciBpbiBidWlsZGVyczoKLSAgICAgICAgICAgICAgICBzdWZmaXhlcyA9IHRlc3Rf
bGlzdFt0ZXN0XVtidWlsZGVyXQotICAgICAgICAgICAgICAgIGFsbF9zdWZmaXhlcy51cGRhdGUo
c3VmZml4ZXMpCi0gICAgICAgICAgICAgICAgc2VsZi5fcnVuX3dlYmtpdF9wYXRjaChbJ3JlYmFz
ZWxpbmUtdGVzdCcsICctLXN1ZmZpeGVzJywgJywnLmpvaW4oc3VmZml4ZXMpLCBidWlsZGVyLCB0
ZXN0XSkKKyAgICAgICAgICAgIGZvciBidWlsZGVyIGluIHNlbGYuX2J1aWxkZXJzX3RvX2ZldGNo
X2Zyb20odGVzdF9saXN0W3Rlc3RdKToKKyAgICAgICAgICAgICAgICBhbGxfc3VmZml4ZXMudXBk
YXRlKHRlc3RfbGlzdFt0ZXN0XVtidWlsZGVyXSkKICAgICAgICAgICAgIHNlbGYuX3J1bl93ZWJr
aXRfcGF0Y2goWydvcHRpbWl6ZS1iYXNlbGluZXMnLCAnLS1zdWZmaXhlcycsICcsJy5qb2luKGFs
bF9zdWZmaXhlcyksIHRlc3RdKQorCisgICAgZGVmIHJlYmFzZWxpbmVhbGwoc2VsZik6CisgICAg
ICAgIHRlc3RfbGlzdCA9IHNlbGYuX3JlYWRfZW50aXR5X2JvZHlfYXNfanNvbigpCisKKyAgICAg
ICAgY29tbWFuZHMgPSBzZWxmLl9yZWJhc2VsaW5lX2NvbW1hbmRzKHRlc3RfbGlzdCkKKyAgICAg
ICAgY29tbWFuZF9yZXN1bHRzID0gc2VsZi5zZXJ2ZXIudG9vbC5leGVjdXRpdmUucnVuX2luX3Bh
cmFsbGVsKGNvbW1hbmRzKQorCisgICAgICAgIGZpbGVzX3RvX2FkZCA9IHNlbGYuX2ZpbGVzX3Rv
X2FkZChjb21tYW5kX3Jlc3VsdHMpCisgICAgICAgIHNlbGYuc2VydmVyLnRvb2wuc2NtKCkuYWRk
X2xpc3QobGlzdChmaWxlc190b19hZGQpKQorCisgICAgICAgIHNlbGYuX29wdGltaXplX2Jhc2Vs
aW5lcyh0ZXN0X2xpc3QpCiAgICAgICAgIHNlbGYuX3NlcnZlX3RleHQoJ3N1Y2Nlc3MnKQpkaWZm
IC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMvZ2FyZGVuaW5nc2Vy
dmVyX3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMvZ2Fy
ZGVuaW5nc2VydmVyX3VuaXR0ZXN0LnB5CmluZGV4IGUxNzk4ZjY1ZWJiMjY1MDRlZDdmNmJlZjY3
NjNhNzExOTMyNmExZWQuLmZiMjI0NjNkYTk4YWQ5NzhhOWNmNDZjZDU0MDNkMTQzOTQ2MmU3MzQg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL2dhcmRlbmlu
Z3NlcnZlcl91bml0dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2Vy
dmVycy9nYXJkZW5pbmdzZXJ2ZXJfdW5pdHRlc3QucHkKQEAgLTI3LDYgKzI3LDcgQEAKICMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KIAogaW1wb3J0IGpzb24KK2ltcG9ydCBzeXMKIGltcG9ydCB1bml0dGVzdAogCiBm
cm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ub3V0cHV0Y2FwdHVyZSBpbXBvcnQgT3V0cHV0Q2Fw
dHVyZQpAQCAtMTcwLDggKzE3MSw4IEBAIGNsYXNzIEdhcmRlbmluZ0V4cGVjdGF0aW9uc1VwZGF0
ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogCiBjbGFzcyBHYXJkZW5pbmdTZXJ2ZXJUZXN0
KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgX3Bvc3RfdG9fcGF0aChzZWxmLCBwYXRoLCBi
b2R5PU5vbmUsIGV4cGVjdGVkX3N0ZGVycj1Ob25lLCBleHBlY3RlZF9zdGRvdXQ9Tm9uZSk6Ci0g
ICAgICAgIGhhbmRsZXIgPSBUZXN0R2FyZGVuaW5nSFRUUFJlcXVlc3RIYW5kbGVyKE1vY2tTZXJ2
ZXIoKSkKKyAgICBkZWYgX3Bvc3RfdG9fcGF0aChzZWxmLCBwYXRoLCBib2R5PU5vbmUsIGV4cGVj
dGVkX3N0ZGVycj1Ob25lLCBleHBlY3RlZF9zdGRvdXQ9Tm9uZSwgc2VydmVyPU5vbmUpOgorICAg
ICAgICBoYW5kbGVyID0gVGVzdEdhcmRlbmluZ0hUVFBSZXF1ZXN0SGFuZGxlcihzZXJ2ZXIgb3Ig
TW9ja1NlcnZlcigpKQogICAgICAgICBoYW5kbGVyLnBhdGggPSBwYXRoCiAgICAgICAgIGhhbmRs
ZXIuYm9keSA9IGJvZHkKICAgICAgICAgT3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNl
bGYsIGhhbmRsZXIuZG9fUE9TVCwgZXhwZWN0ZWRfc3RkZXJyPWV4cGVjdGVkX3N0ZGVyciwgZXhw
ZWN0ZWRfc3Rkb3V0PWV4cGVjdGVkX3N0ZG91dCkKQEAgLTE4Niw5ICsxODcsMTggQEAgY2xhc3Mg
R2FyZGVuaW5nU2VydmVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICAgICAiTU9D
SyBidWlsZGVyIjogeyJwb3J0X25hbWUiOiAidGVzdC1tYWMtbGVvcGFyZCIsICJzcGVjaWZpZXJz
Ijogc2V0KFsibW9jay1zcGVjaWZpZXIiXSl9LAogICAgICAgICAgICAgIk1PQ0sgYnVpbGRlciAo
RGVidWcpIjogeyJwb3J0X25hbWUiOiAidGVzdC1tYWMtbGVvcGFyZCIsICJzcGVjaWZpZXJzIjog
c2V0KFsibW9jay1zcGVjaWZpZXIiLCAiZGVidWciXSl9LAogICAgICAgICB9Ci0gICAgICAgIGV4
cGVjdGVkX3N0ZGVyciA9ICJNT0NLIHJ1bl9jb21tYW5kOiBbJ2VjaG8nLCAncmViYXNlbGluZS10
ZXN0JywgJy0tc3VmZml4ZXMnLCB1JyVzJywgdSclcycsIHUndXNlci1zY3JpcHRzL2Fub3RoZXIt
dGVzdC5odG1sJ10sIGN3ZD0vbW9jay1jaGVja291dFxuTU9DSyBydW5fY29tbWFuZDogWydlY2hv
JywgJ29wdGltaXplLWJhc2VsaW5lcycsICctLXN1ZmZpeGVzJywgdSclcycsIHUndXNlci1zY3Jp
cHRzL2Fub3RoZXItdGVzdC5odG1sJ10sIGN3ZD0vbW9jay1jaGVja291dFxuIgorICAgICAgICBl
eHBlY3RlZF9zdGRlcnIgPSAiTU9DSyBydW5fY29tbWFuZDogWydlY2hvJywgJ3JlYmFzZWxpbmUt
dGVzdCcsICctLXByaW50LXNjbS1jaGFuZ2VzJywgJy0tc3VmZml4ZXMnLCB1JyVzJywgdSclcycs
IHUndXNlci1zY3JpcHRzL2Fub3RoZXItdGVzdC5odG1sJ10sIGN3ZD0vbW9jay1jaGVja291dFxu
TU9DSyBydW5fY29tbWFuZDogWydlY2hvJywgJ29wdGltaXplLWJhc2VsaW5lcycsICctLXN1ZmZp
eGVzJywgdSclcycsIHUndXNlci1zY3JpcHRzL2Fub3RoZXItdGVzdC5odG1sJ10sIGN3ZD0vbW9j
ay1jaGVja291dFxuIgogICAgICAgICBleHBlY3RlZF9zdGRvdXQgPSAiPT0gQmVnaW4gUmVzcG9u
c2UgPT1cbnN1Y2Nlc3Ncbj09IEVuZCBSZXNwb25zZSA9PVxuIgotICAgICAgICBzZWxmLl9wb3N0
X3RvX3BhdGgoIi9yZWJhc2VsaW5lYWxsIiwgYm9keT0neyJ1c2VyLXNjcmlwdHMvYW5vdGhlci10
ZXN0Lmh0bWwiOnsiTU9DSyBidWlsZGVyIjogWyJ0eHQiLCJwbmciXX19JywgZXhwZWN0ZWRfc3Rk
ZXJyPWV4cGVjdGVkX3N0ZGVyciAlICgndHh0LHBuZycsICdNT0NLIGJ1aWxkZXInLCAndHh0LHBu
ZycpLCBleHBlY3RlZF9zdGRvdXQ9ZXhwZWN0ZWRfc3Rkb3V0KQorICAgICAgICBzZXJ2ZXIgPSBN
b2NrU2VydmVyKCkKKworICAgICAgICBzZWxmLm91dHB1dCA9IFsneyJhZGQiOiBbXSwgInJtIjog
W119JywgJyddCisKKyAgICAgICAgZGVmIHJ1bl9jb21tYW5kKGFyZ3MsIGN3ZD1Ob25lLCAqKmt3
YXJncyk6CisgICAgICAgICAgICBwcmludCA+PiBzeXMuc3RkZXJyLCAiTU9DSyBydW5fY29tbWFu
ZDogJXMsIGN3ZD0lcyIgJSAoYXJncywgY3dkKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYub3V0
cHV0LnBvcCgwKQorCisgICAgICAgIHNlcnZlci50b29sLmV4ZWN1dGl2ZS5ydW5fY29tbWFuZCA9
IHJ1bl9jb21tYW5kCisgICAgICAgIHNlbGYuX3Bvc3RfdG9fcGF0aCgiL3JlYmFzZWxpbmVhbGwi
LCBib2R5PSd7InVzZXItc2NyaXB0cy9hbm90aGVyLXRlc3QuaHRtbCI6eyJNT0NLIGJ1aWxkZXIi
OiBbInR4dCIsInBuZyJdfX0nLCBleHBlY3RlZF9zdGRlcnI9ZXhwZWN0ZWRfc3RkZXJyICUgKCd0
eHQscG5nJywgJ01PQ0sgYnVpbGRlcicsICd0eHQscG5nJyksIGV4cGVjdGVkX3N0ZG91dD1leHBl
Y3RlZF9zdGRvdXQsIHNlcnZlcj1zZXJ2ZXIpCiAKICAgICAgICAgc2VsZi5fcG9zdF90b19wYXRo
KCIvcmViYXNlbGluZWFsbCIsIGJvZHk9J3sidXNlci1zY3JpcHRzL2Fub3RoZXItdGVzdC5odG1s
Ijp7Ik1PQ0sgYnVpbGRlciAoRGVidWcpIjogWyJ0eHQiLCJwbmciXX19JywgZXhwZWN0ZWRfc3Rk
ZXJyPWV4cGVjdGVkX3N0ZGVyciAlICgndHh0LHBuZycsICdNT0NLIGJ1aWxkZXIgKERlYnVnKScs
ICd0eHQscG5nJyksIGV4cGVjdGVkX3N0ZG91dD1leHBlY3RlZF9zdGRvdXQpCiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144187</attachid>
            <date>2012-05-25 20:13:57 -0700</date>
            <delta_ts>2012-05-25 20:21:33 -0700</delta_ts>
            <desc>minor cleanup</desc>
            <filename>bug-87451-20120525201356.patch</filename>
            <type>text/plain</type>
            <size>35833</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4NTU3CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOTgwYzliYzk5MjEzNDhjYThmMTQwYWJjMzA1ZjQ2Yzc1
YWYyMDYxYS4uZjEyNjBlZWVjNzE0YTE0ZDQ0M2MwYWJkYWE3YzE0NjJlMWI2MzJkNyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDcz
IEBACiAyMDEyLTA1LTI1ICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgogCisg
ICAgICAgIGdhcmRlbi1vLW1hdGljIHNob3VsZCByZWJhc2VsaW5lIGJhc2VsaW5lcyBpbiBwYXJh
bGxlbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODc0
NTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgVGhpcyBtb2RpZmllcyBnYXJkZW4tby1tYXRpYyBzbyB0aGF0IHdl
IHdpbGwgZmV0Y2ggYWxsICAgICAgICAgICAgICAgICAgCisgICAgICAgIG9mIHRoZSBiYXNlbGlu
ZXMgaW4gcGFyYWxsZWwgZnJvbSB0aGUgYm90cywgYW5kIHRoZW4gICAgICAgICAgICAgICAgICAg
IAorICAgICAgICBvcHRpbWl6ZSB0aGUgYmFzZWxpbmVzIHNlcmlhbGx5IChzaW5jZSB0aGF0IHNo
b3VsZCBiZSBmYWlybHkgICAgICAgICAgICAKKyAgICAgICAgcXVpY2sgYW5kIHdlIGdldCBpbnRv
IHRyb3VibGUgaWYgd2Ugb3B0aW1pemUgaW4gcGFyYWxsZWwgZHVlICAgICAgICAgICAgCisgICAg
ICAgIHRvIGNvbmN1cnJlbnQgYWNjZXNzIHRvIHRoZSBzb3VyY2UgY29udHJvbCBzeXN0ZW0pLiAg
ICAgICAgICAgICAgICAgICAgIAorCisgICAgICAgIFRoaXMgY2hhbmdlIGFkZHMgYSBmbGFnIHRv
IHdlYmtpdC1wYXRjaCByZWJhc2VsaW5lLXRlc3QgKC0tcHJpbnQtc2NtLWNoYW5nZXMpCisgICAg
ICAgIHNvIHRoYXQgdGhlIGZpbGVzIHRoYXQgbmVlZCB0byBiZSBtb2RpZmllZCBpbiB0aGUgU0NN
IGFyZSByZXR1cm5lZCB0byAKKyAgICAgICAgZ2FyZGVuLW8tbWF0aWMgcmF0aGVyIHRoYW4gYWN0
dWFsbHkgYWRkZWQgb3IgcmVtb3ZlZC4gVGhpcyBpcyBkb25lIHNvIHRoYXQKKyAgICAgICAgd2Ug
Y2FuIHJ1biBtdWx0aXBsZSByZWJhc2VsaW5lLXRlc3RzIGluIHBhcmFsbGVsICh3ZSBjYW4ndCBt
b2RpZnkgdGhlIFNDTQorICAgICAgICBjb25jdXJyZW50bHkpLiBJbiBvcmRlciB0byBzYWZlbHkg
cmV0dXJuIHRoZSBmaWxlcyAoYXMgYSBKU09OIGRpY3QpIEkKKyAgICAgICAgbmVlZGVkIHRvIHNo
aWZ0IGFsbCBvZiB0aGUgbG9nZ2luZyBpbiByZWJhc2VsaW5lLXRlc3QgdG8gdXNlIHRoZSBsb2dn
aW5nCisgICAgICAgIG1vZHVsZSAoYW5kIGhlbmNlIGxvZyB0byBzdGRlcnIpLgorCisgICAgICAg
IEkgYWxzbyBoYWQgdG8gc3R1YiBvdXQgYSBsaW5lIGluIGNocm9taXVtLnB5IHRoYXQgd291bGQg
Z2V0IGNvbmZ1c2VkIGlmCisgICAgICAgIHRoZSBza2lhIG92ZXJyaWRlcyBmaWxlIGRpZG4ndCBl
eGlzdCBpbiBhIG1vY2sgY2hlY2tvdXQuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9zeXN0ZW0vZXhlY3V0aXZlLnB5OgorICAgICAgICAoRXhlY3V0aXZlLnBvcGVuKToKKyAg
ICAgICAgKEV4ZWN1dGl2ZSk6CisgICAgICAgIChFeGVjdXRpdmUucnVuX2luX3BhcmFsbGVsKToK
KyAgICAgICAgKF9ydW5fY29tbWFuZF90aHVuayk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZV9tb2NrLnB5OgorICAgICAgICAoTW9ja0V4ZWN1dGl2
ZS5ydW5faW5fcGFyYWxsZWwpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5
c3RlbS9leGVjdXRpdmVfdW5pdHRlc3QucHk6CisgICAgICAgIChFeGVjdXRpdmVUZXN0LnRlc3Rf
cnVuX2luX3BhcmFsbGVsKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L2Nocm9taXVtLnB5OgorICAgICAgICAoQ2hyb21pdW1Qb3J0Ll9leHBlY3RhdGlvbnNf
ZmlsZV9jb250ZW50cyk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRz
L3JlYmFzZWxpbmUucHk6CisgICAgICAgIChBYnN0cmFjdFJlYmFzZWxpbmluZ0NvbW1hbmQuX19p
bml0X18pOgorICAgICAgICAoUmViYXNlbGluZVRlc3QuX19pbml0X18pOgorICAgICAgICAoUmVi
YXNlbGluZVRlc3QuX2NvcHlfZXhpc3RpbmdfYmFzZWxpbmUpOgorICAgICAgICAoUmViYXNlbGlu
ZVRlc3QuX3NhdmVfYmFzZWxpbmUpOgorICAgICAgICAoUmViYXNlbGluZVRlc3QpOgorICAgICAg
ICAoUmViYXNlbGluZVRlc3QuX2FkZF90b19zY20pOgorICAgICAgICAoUmViYXNlbGluZVRlc3Qu
X3JlYmFzZWxpbmVfdGVzdCk6CisgICAgICAgIChSZWJhc2VsaW5lVGVzdC5leGVjdXRlKToKKyAg
ICAgICAgKFJlYmFzZWxpbmVFeHBlY3RhdGlvbnMuX3JlYmFzZWxpbmVfcG9ydCk6CisgICAgICAg
IChSZWJhc2VsaW5lRXhwZWN0YXRpb25zLmV4ZWN1dGUpOgorICAgICAgICAoUmViYXNlbGluZS5f
YnVpbGRlcl90b19wdWxsX2Zyb20pOgorICAgICAgICAoUmViYXNlbGluZS5leGVjdXRlKToKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcmViYXNlbGluZV91bml0dGVz
dC5weToKKyAgICAgICAgKHRlc3RfcmViYXNlbGluZV91cGRhdGVzX2V4cGVjdGF0aW9uc19maWxl
KToKKyAgICAgICAgKHRlc3RfcmViYXNlbGluZV90ZXN0KToKKyAgICAgICAgKHRlc3RfcmViYXNl
bGluZV90ZXN0X2FuZF9wcmludF9zY21fY2hhbmdlcyk6CisgICAgICAgICh0ZXN0X3JlYmFzZWxp
bmVfYW5kX2NvcHlfdGVzdCk6CisgICAgICAgICh0ZXN0X3JlYmFzZWxpbmVfYW5kX2NvcHlfdGVz
dF9ub19leGlzdGluZ19yZXN1bHQpOgorICAgICAgICAodGVzdF9yZWJhc2VsaW5lX2FuZF9jb3B5
X3Rlc3Rfd2l0aF9saW9uX3Jlc3VsdCk6CisgICAgICAgICh0ZXN0X3JlYmFzZWxpbmVfYW5kX2Nv
cHlfbm9fb3ZlcndyaXRlX3Rlc3QpOgorICAgICAgICAodGVzdF9yZWJhc2VsaW5lX2V4cGVjdGF0
aW9ucyk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMvZ2FyZGVuaW5n
c2VydmVyLnB5OgorICAgICAgICAoR2FyZGVuaW5nSFRUUFJlcXVlc3RIYW5kbGVyLl9yZWJhc2Vs
aW5lX2NvbW1hbmRzKToKKyAgICAgICAgKEdhcmRlbmluZ0hUVFBSZXF1ZXN0SGFuZGxlcik6Cisg
ICAgICAgIChHYXJkZW5pbmdIVFRQUmVxdWVzdEhhbmRsZXIuX2ZpbGVzX3RvX2FkZCk6CisgICAg
ICAgIChHYXJkZW5pbmdIVFRQUmVxdWVzdEhhbmRsZXIuX29wdGltaXplX2Jhc2VsaW5lcyk6Cisg
ICAgICAgIChHYXJkZW5pbmdIVFRQUmVxdWVzdEhhbmRsZXIucmViYXNlbGluZWFsbCk6CisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMvZ2FyZGVuaW5nc2VydmVyX3VuaXR0
ZXN0LnB5OgorICAgICAgICAoR2FyZGVuaW5nU2VydmVyVGVzdC5fcG9zdF90b19wYXRoKToKKyAg
ICAgICAgKEdhcmRlbmluZ1NlcnZlclRlc3QudGVzdF9yZWJhc2VsaW5lYWxsKToKKyAgICAgICAg
KEdhcmRlbmluZ1NlcnZlclRlc3QudGVzdF9yZWJhc2VsaW5lYWxsLnJ1bl9jb21tYW5kKToKKwor
MjAxMi0wNS0yNSAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNocm9taXVtLm9yZz4KKwogICAgICAg
ICB3ZWJraXRweTogY2hhbmdlIHNjbS5hZGQoKSwgc2NtLmRlbGV0ZSgpIHRvIGFjY2VwdCBtdWx0
aXBsZSBwYXRocwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODc1MjgKIApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lz
dGVtL2V4ZWN1dGl2ZS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9l
eGVjdXRpdmUucHkKaW5kZXggNDNkY2JjYTFiMzhjYjIxODJjYjc5MDUxZmQxZjVkY2VmNjA3NWEx
Ny4uODc1OWM3MTlhODI0NDVkOTM0ZmU5MDE0NzFmM2FhMDk3Mjk5MDVhMSAxMDA2NDQKLS0tIGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZS5weQorKysgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlLnB5CkBAIC00NTEs
MyArNDUxLDE1IEBAIGNsYXNzIEV4ZWN1dGl2ZShvYmplY3QpOgogCiAgICAgZGVmIHBvcGVuKHNl
bGYsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgIHJldHVybiBzdWJwcm9jZXNzLlBvcGVuKCph
cmdzLCAqKmt3YXJncykKKworICAgIGRlZiBydW5faW5fcGFyYWxsZWwoc2VsZiwgY29tbWFuZF9s
aW5lc19hbmRfY3dkcywgcHJvY2Vzc2VzPU5vbmUpOgorICAgICAgICAiIiJSdW5zIGEgbGlzdCBv
ZiAoY21kX2xpbmUgbGlzdCwgY3dkIHN0cmluZykgdHVwbGVzIGluIHBhcmFsbGVsIGFuZCByZXR1
cm5zIGEgbGlzdCBvZiAocmV0Y29kZSwgc3Rkb3V0LCBzdGRlcnIpIHR1cGxlcy4iIiIKKyAgICAg
ICAgcmV0dXJuIG11bHRpcHJvY2Vzc2luZy5Qb29sKHByb2Nlc3Nlcz1wcm9jZXNzZXMpLm1hcChf
cnVuX2NvbW1hbmRfdGh1bmssIGNvbW1hbmRfbGluZXNfYW5kX2N3ZHMpCisKKworZGVmIF9ydW5f
Y29tbWFuZF90aHVuayhjbWRfbGluZV9hbmRfY3dkKToKKyAgICAjIE5vdGUgdGhhdCB0aGlzIG5l
ZWRzIHRvIGJlIGEgYmFyZSBtb2R1bGUgKGFuZCBoZW5jZSBQaWNrbGFibGUpIG1ldGhvZCB0byB3
b3JrIHdpdGggbXVsdGlwcm9jZXNzaW5nLlBvb2wuCisgICAgKGNtZF9saW5lLCBjd2QpID0gY21k
X2xpbmVfYW5kX2N3ZAorICAgIHByb2MgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZF9saW5lLCBjd2Q9
Y3dkLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAg
IHN0ZG91dCwgc3RkZXJyID0gcHJvYy5jb21tdW5pY2F0ZSgpCisgICAgcmV0dXJuIChwcm9jLnJl
dHVybmNvZGUsIHN0ZG91dCwgc3RkZXJyKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZV9tb2NrLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZV9tb2NrLnB5CmluZGV4IGQ1N2E1YzQ4MDgwOTM4
YmFhNWYxZWE1YmQwMjBlZTc0Y2YwNzJlZDMuLmIwZGI0OGNhM2NhNDVhYWMxODM5NTUwY2I5M2Q1
MDQ4NmQzYTFhZjQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5
c3RlbS9leGVjdXRpdmVfbW9jay5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9zeXN0ZW0vZXhlY3V0aXZlX21vY2sucHkKQEAgLTEwOCw2ICsxMDgsMTEgQEAgY2xhc3MgTW9j
a0V4ZWN1dGl2ZShvYmplY3QpOgogICAgICAgICAgICAgc2VsZi5fcHJvYyA9IE1vY2tQcm9jZXNz
KCkKICAgICAgICAgcmV0dXJuIHNlbGYuX3Byb2MKIAorICAgIGRlZiBydW5faW5fcGFyYWxsZWwo
c2VsZiwgY29tbWFuZHMpOgorICAgICAgICBjb21tYW5kX291dHB1dHMgPSBbXQorICAgICAgICBm
b3IgY21kX2xpbmUsIGN3ZCBpbiBjb21tYW5kczoKKyAgICAgICAgICAgIGNvbW1hbmRfb3V0cHV0
cy5hcHBlbmQoWzAsIHNlbGYucnVuX2NvbW1hbmQoY21kX2xpbmUsIGN3ZD1jd2QpLCAnJ10pCisg
ICAgICAgIHJldHVybiBjb21tYW5kX291dHB1dHMKIAogY2xhc3MgTW9ja0V4ZWN1dGl2ZTIob2Jq
ZWN0KToKICAgICBAc3RhdGljbWV0aG9kCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9zeXN0ZW0vZXhlY3V0aXZlX3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9jb21tb24vc3lzdGVtL2V4ZWN1dGl2ZV91bml0dGVzdC5weQppbmRleCBjNjNmZjM1
NTVhZTE4ZTcwMTMwMjE5MGI3YmFiN2U5ZGVlN2E4N2FkLi40NjZlMmVjMDIwYjljODNmNDI5MjUz
YTk5YzdmOWI0ZjdlN2U3Njc3IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9zeXN0ZW0vZXhlY3V0aXZlX3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL3N5c3RlbS9leGVjdXRpdmVfdW5pdHRlc3QucHkKQEAgLTMxLDYgKzMxLDcg
QEAgaW1wb3J0IG9zCiBpbXBvcnQgc2lnbmFsCiBpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHN5
cworaW1wb3J0IHRpbWUKIGltcG9ydCB1bml0dGVzdAogCiAjIFNpbmNlIHdlIGV4ZWN1dGUgdGhp
cyBzY3JpcHQgZGlyZWN0bHkgYXMgcGFydCBvZiB0aGUgdW5pdCB0ZXN0cywgd2UgbmVlZCB0byBl
bnN1cmUKQEAgLTIxNiw2ICsyMTcsMTggQEAgY2xhc3MgRXhlY3V0aXZlVGVzdCh1bml0dGVzdC5U
ZXN0Q2FzZSk6CiAgICAgICAgIHBpZHMgPSBleGVjdXRpdmUucnVubmluZ19waWRzKCkKICAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKG9zLmdldHBpZCgpIGluIHBpZHMpCiAKKyAgICBkZWYgdGVzdF9y
dW5faW5fcGFyYWxsZWwoc2VsZik6CisgICAgICAgIE5VTV9QUk9DRVNTRVMgPSA0CisgICAgICAg
IERFTEFZX1NFQ1MgPSAwLjI1CisgICAgICAgIGNtZF9saW5lID0gW3N5cy5leGVjdXRhYmxlLCAn
LWMnLCAnaW1wb3J0IHRpbWU7IHRpbWUuc2xlZXAoJWYpOyBwcmludCAiaGVsbG8iJyAlIERFTEFZ
X1NFQ1NdCisgICAgICAgIGN3ZCA9IG9zLmdldGN3ZCgpCisgICAgICAgIGNvbW1hbmRzID0gW3R1
cGxlKFtjbWRfbGluZSwgY3dkXSldICogTlVNX1BST0NFU1NFUworICAgICAgICBzdGFydCA9IHRp
bWUudGltZSgpCisgICAgICAgIGNvbW1hbmRfb3V0cHV0cyA9IEV4ZWN1dGl2ZSgpLnJ1bl9pbl9w
YXJhbGxlbChjb21tYW5kcywgcHJvY2Vzc2VzPU5VTV9QUk9DRVNTRVMpCisgICAgICAgIGRvbmUg
PSB0aW1lLnRpbWUoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZG9uZSAtIHN0YXJ0IDwgTlVN
X1BST0NFU1NFUyAqIERFTEFZX1NFQ1MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKFtvdXRw
dXRbMV0gZm9yIG91dHB1dCBpbiBjb21tYW5kX291dHB1dHNdLCBbImhlbGxvXG4iXSAqIE5VTV9Q
Uk9DRVNTRVMpCisKIAogZGVmIG1haW4ocGxhdGZvcm0sIHN0ZGluLCBzdGRvdXQsIGNtZCwgYXJn
cyk6CiAgICAgaWYgcGxhdGZvcm0gPT0gJ3dpbjMyJyBhbmQgaGFzYXR0cihzdGRvdXQsICdmaWxl
bm8nKToKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvY2hyb21pdW0ucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2Nocm9taXVtLnB5CmluZGV4IGNiNjhmMTQ2MDUyMWZmNjE3MjA1YzhmNDk4NTI5NTIwMDU0MDk1
NzkuLjlkYjRjYjU3MDU3N2M3Y2RlYzFhMGIxNDVmNzg1MjQ2ZWQ4ZDFkNDYgMTAwNzU1Ci0tLSBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHkKKysr
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weQpA
QCAtMzI3LDkgKzMyNywxMiBAQCBjbGFzcyBDaHJvbWl1bVBvcnQoUG9ydCk6CiAgICAgICAgICAg
ICAgICAgKGZpbGV0eXBlLCBmaWxlcGF0aCkpCiAgICAgICAgICAgICByZXR1cm4gKHNlbGYuX2Zp
bGVzeXN0ZW0ucmVhZF90ZXh0X2ZpbGUoZmlsZXBhdGgpIG9yICcnKQogICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgX2xvZy53YXJuaW5nKAotICAgICAgICAgICAgICAgICIlcyB0ZXN0X2V4cGVj
dGF0aW9ucyBvdmVycmlkZXMgZmlsZSAnJXMnIGRvZXMgbm90IGV4aXN0IiAlCi0gICAgICAgICAg
ICAgICAgKGZpbGV0eXBlLCBmaWxlcGF0aCkpCisgICAgICAgICAgICAjIEZJWE1FOiBUaGlzIGFs
bG93cyB0aGlzIHRvIHdvcmsgd2l0aCBtb2NrIGNoZWNrb3V0czsKKyAgICAgICAgICAgICMgVGhp
cyBwcm9iYWJseSBzaG91bGRuJ3QgYmUgdXNlZCB3aXRoIGEgbW9jayBjaGVja291dCwgdGhvdWdo
LgorICAgICAgICAgICAgaWYgbm90ICdtb2NrLWNoZWNrb3V0JyBpbiBmaWxlcGF0aDoKKyAgICAg
ICAgICAgICAgICBfbG9nLndhcm5pbmcoCisgICAgICAgICAgICAgICAgICAgICIlcyB0ZXN0X2V4
cGVjdGF0aW9ucyBvdmVycmlkZXMgZmlsZSAnJXMnIGRvZXMgbm90IGV4aXN0IiAlCisgICAgICAg
ICAgICAgICAgICAgIChmaWxldHlwZSwgZmlsZXBhdGgpKQogICAgICAgICAgICAgcmV0dXJuICcn
CiAKICAgICBkZWYgdGVzdF9leHBlY3RhdGlvbnNfb3ZlcnJpZGVzKHNlbGYpOgpkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3JlYmFzZWxpbmUucHkgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcmViYXNlbGluZS5weQppbmRleCAz
MDQwOTc4M2Y3ZjA0NjI3NWRkYmIwNjM5ZWRjODg2NDhkNzNhMWUxLi42MGNmZGY1MTQ3ZjU2NjJk
MDhhZjUxOWM1ZjViYTU0MjYzNzNiOWFjIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3Rvb2wvY29tbWFuZHMvcmViYXNlbGluZS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3Rvb2wvY29tbWFuZHMvcmViYXNlbGluZS5weQpAQCAtMjYsNiArMjYsOCBAQAogIyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAoraW1wb3J0IGpzb24KK2ltcG9ydCBsb2dnaW5nCiBp
bXBvcnQgb3B0cGFyc2UKIGltcG9ydCBvcy5wYXRoCiBpbXBvcnQgcmUKQEAgLTUxLDE2ICs1Mywx
OSBAQCBmcm9tIHdlYmtpdHB5LnRvb2wubXVsdGljb21tYW5kdG9vbCBpbXBvcnQgQWJzdHJhY3RE
ZWNsYXJhdGl2ZUNvbW1hbmQKIF9iYXNlbGluZV9zdWZmaXhfbGlzdCA9IFsncG5nJywgJ3dhdics
ICd0eHQnXQogCiAKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKKwogIyBGSVhN
RTogU2hvdWxkIFRlc3RSZXN1bHRXcml0ZXIga25vdyBob3cgdG8gY29tcHV0ZSB0aGlzIHN0cmlu
Zz8KIGRlZiBfYmFzZWxpbmVfbmFtZShmcywgdGVzdF9uYW1lLCBzdWZmaXgpOgogICAgIHJldHVy
biBmcy5zcGxpdGV4dCh0ZXN0X25hbWUpWzBdICsgVGVzdFJlc3VsdFdyaXRlci5GSUxFTkFNRV9T
VUZGSVhfRVhQRUNURUQgKyAiLiIgKyBzdWZmaXgKIAogCiBjbGFzcyBBYnN0cmFjdFJlYmFzZWxp
bmluZ0NvbW1hbmQoQWJzdHJhY3REZWNsYXJhdGl2ZUNvbW1hbmQpOgotICAgIGRlZiBfX2luaXRf
XyhzZWxmKToKLSAgICAgICAgb3B0aW9ucyA9IFsKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb3B0
aW9ucz1Ob25lKToKKyAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgb3IgW10KKyAgICAgICAgb3B0
aW9ucy5leHRlbmQoWwogICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oJy0tc3VmZml4
ZXMnLCBkZWZhdWx0PScsJy5qb2luKF9iYXNlbGluZV9zdWZmaXhfbGlzdCksIGFjdGlvbj0nc3Rv
cmUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nZmlsZSB0eXBlcyB0
byByZWJhc2VsaW5lJyldCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdm
aWxlIHR5cGVzIHRvIHJlYmFzZWxpbmUnKV0pCiAgICAgICAgIEFic3RyYWN0RGVjbGFyYXRpdmVD
b21tYW5kLl9faW5pdF9fKHNlbGYsIG9wdGlvbnM9b3B0aW9ucykKICAgICAgICAgc2VsZi5fYmFz
ZWxpbmVfc3VmZml4X2xpc3QgPSBfYmFzZWxpbmVfc3VmZml4X2xpc3QKIApAQCAtNzAsNiArNzUs
MTQgQEAgY2xhc3MgUmViYXNlbGluZVRlc3QoQWJzdHJhY3RSZWJhc2VsaW5pbmdDb21tYW5kKToK
ICAgICBoZWxwX3RleHQgPSAiUmViYXNlbGluZSBhIHNpbmdsZSB0ZXN0IGZyb20gYSBidWlsZGJv
dC4gIChDdXJyZW50bHkgd29ya3Mgb25seSB3aXRoIGJ1aWxkLmNocm9taXVtLm9yZyBidWlsZGJv
dHMuKSIKICAgICBhcmd1bWVudF9uYW1lcyA9ICJCVUlMREVSX05BTUUgVEVTVF9OQU1FIFtQTEFU
Rk9STVNfVE9fTU9WRV9FWElTVElOR19CQVNFTElORVNfVE9dIgogCisgICAgZGVmIF9faW5pdF9f
KHNlbGYpOgorICAgICAgICBvcHRpb25zID0gWworICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9v
cHRpb24oIi0tcHJpbnQtc2NtLWNoYW5nZXMiLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSJQ
cmludCBtb2RpZmNhdGlvbnMgdG8gdGhlIHNjbSAoYXMgYSBqc29uIGRpY3QpIHJhdGhlciB0aGFu
IGFjdHVhbGx5IG1vZGlmeWluZyB0aGUgc2NtIiksCisgICAgICAgIF0KKyAgICAgICAgQWJzdHJh
Y3RSZWJhc2VsaW5pbmdDb21tYW5kLl9faW5pdF9fKHNlbGYsIG9wdGlvbnM9b3B0aW9ucykKKyAg
ICAgICAgc2VsZi5fcHJpbnRfc2NtX2NoYW5nZXMgPSBGYWxzZQorICAgICAgICBzZWxmLl9zY21f
Y2hhbmdlcyA9IHt9CisKICAgICBkZWYgX3Jlc3VsdHNfdXJsKHNlbGYsIGJ1aWxkZXJfbmFtZSk6
CiAgICAgICAgICMgRklYTUU6IEdlbmVyYWxpemUgdGhpcyBjb21tYW5kIHRvIHdvcmsgd2l0aCBu
b24tYnVpbGQuY2hyb21pdW0ub3JnIGJ1aWxkZXJzLgogICAgICAgICBidWlsZGVyID0gc2VsZi5f
dG9vbC5jaHJvbWl1bV9idWlsZGJvdCgpLmJ1aWxkZXJfd2l0aF9uYW1lKGJ1aWxkZXJfbmFtZSkK
QEAgLTg5LDEyICsxMDIsMTIgQEAgY2xhc3MgUmViYXNlbGluZVRlc3QoQWJzdHJhY3RSZWJhc2Vs
aW5pbmdDb21tYW5kKToKICAgICAgICAgICAgIHBvcnQgPSBzZWxmLl90b29sLnBvcnRfZmFjdG9y
eS5nZXQocGxhdGZvcm0pCiAgICAgICAgICAgICBvbGRfYmFzZWxpbmUgPSBwb3J0LmV4cGVjdGVk
X2ZpbGVuYW1lKHRlc3RfbmFtZSwgIi4iICsgc3VmZml4KQogICAgICAgICAgICAgaWYgbm90IHNl
bGYuX3Rvb2wuZmlsZXN5c3RlbS5leGlzdHMob2xkX2Jhc2VsaW5lKToKLSAgICAgICAgICAgICAg
ICBwcmludCgiTm8gZXhpc3RpbmcgYmFzZWxpbmUgZm9yICVzLiIgJSB0ZXN0X25hbWUpCisgICAg
ICAgICAgICAgICAgX2xvZy5pbmZvKCJObyBleGlzdGluZyBiYXNlbGluZSBmb3IgJXMuIiAlIHRl
c3RfbmFtZSkKICAgICAgICAgICAgICAgICBjb250aW51ZQogCiAgICAgICAgICAgICBuZXdfYmFz
ZWxpbmUgPSBzZWxmLl90b29sLmZpbGVzeXN0ZW0uam9pbihwb3J0LmJhc2VsaW5lX3BhdGgoKSwg
c2VsZi5fZmlsZV9uYW1lX2Zvcl9leHBlY3RlZF9yZXN1bHQodGVzdF9uYW1lLCBzdWZmaXgpKQog
ICAgICAgICAgICAgaWYgc2VsZi5fdG9vbC5maWxlc3lzdGVtLmV4aXN0cyhuZXdfYmFzZWxpbmUp
OgotICAgICAgICAgICAgICAgIHByaW50KCJFeGlzdGluZyBiYXNlbGluZSBhdCAlcywgbm90IGNv
cHlpbmcgb3ZlciBpdC4iICUgbmV3X2Jhc2VsaW5lKQorICAgICAgICAgICAgICAgIF9sb2cuaW5m
bygiRXhpc3RpbmcgYmFzZWxpbmUgYXQgJXMsIG5vdCBjb3B5aW5nIG92ZXIgaXQuIiAlIG5ld19i
YXNlbGluZSkKICAgICAgICAgICAgICAgICBjb250aW51ZQogCiAgICAgICAgICAgICBvbGRfYmFz
ZWxpbmVzLmFwcGVuZChvbGRfYmFzZWxpbmUpCkBAIC0xMDQsMTEgKzExNywxMSBAQCBjbGFzcyBS
ZWJhc2VsaW5lVGVzdChBYnN0cmFjdFJlYmFzZWxpbmluZ0NvbW1hbmQpOgogICAgICAgICAgICAg
b2xkX2Jhc2VsaW5lID0gb2xkX2Jhc2VsaW5lc1tpXQogICAgICAgICAgICAgbmV3X2Jhc2VsaW5l
ID0gbmV3X2Jhc2VsaW5lc1tpXQogCi0gICAgICAgICAgICBwcmludCgiQ29weWluZyBiYXNlbGlu
ZSBmcm9tICVzIHRvICVzLiIgJSAob2xkX2Jhc2VsaW5lLCBuZXdfYmFzZWxpbmUpKQorICAgICAg
ICAgICAgX2xvZy5pbmZvKCJDb3B5aW5nIGJhc2VsaW5lIGZyb20gJXMgdG8gJXMuIiAlIChvbGRf
YmFzZWxpbmUsIG5ld19iYXNlbGluZSkpCiAgICAgICAgICAgICBzZWxmLl90b29sLmZpbGVzeXN0
ZW0ubWF5YmVfbWFrZV9kaXJlY3Rvcnkoc2VsZi5fdG9vbC5maWxlc3lzdGVtLmRpcm5hbWUobmV3
X2Jhc2VsaW5lKSkKICAgICAgICAgICAgIHNlbGYuX3Rvb2wuZmlsZXN5c3RlbS5jb3B5ZmlsZShv
bGRfYmFzZWxpbmUsIG5ld19iYXNlbGluZSkKICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl90b29s
LnNjbSgpLmV4aXN0cyhuZXdfYmFzZWxpbmUpOgotICAgICAgICAgICAgICAgIHNlbGYuX3Rvb2wu
c2NtKCkuYWRkKG5ld19iYXNlbGluZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9hZGRfdG9fc2Nt
KG5ld19iYXNlbGluZSkKIAogICAgIGRlZiBfc2F2ZV9iYXNlbGluZShzZWxmLCBkYXRhLCB0YXJn
ZXRfYmFzZWxpbmUpOgogICAgICAgICBpZiBub3QgZGF0YToKQEAgLTExNyw3ICsxMzAsMTMgQEAg
Y2xhc3MgUmViYXNlbGluZVRlc3QoQWJzdHJhY3RSZWJhc2VsaW5pbmdDb21tYW5kKToKICAgICAg
ICAgZmlsZXN5c3RlbS5tYXliZV9tYWtlX2RpcmVjdG9yeShmaWxlc3lzdGVtLmRpcm5hbWUodGFy
Z2V0X2Jhc2VsaW5lKSkKICAgICAgICAgZmlsZXN5c3RlbS53cml0ZV9iaW5hcnlfZmlsZSh0YXJn
ZXRfYmFzZWxpbmUsIGRhdGEpCiAgICAgICAgIGlmIG5vdCBzZWxmLl90b29sLnNjbSgpLmV4aXN0
cyh0YXJnZXRfYmFzZWxpbmUpOgotICAgICAgICAgICAgc2VsZi5fdG9vbC5zY20oKS5hZGQodGFy
Z2V0X2Jhc2VsaW5lKQorICAgICAgICAgICAgc2VsZi5fYWRkX3RvX3NjbSh0YXJnZXRfYmFzZWxp
bmUpCisKKyAgICBkZWYgX2FkZF90b19zY20oc2VsZiwgcGF0aCk6CisgICAgICAgIGlmIHNlbGYu
X3ByaW50X3NjbV9jaGFuZ2VzOgorICAgICAgICAgICAgc2VsZi5fc2NtX2NoYW5nZXNbJ2FkZCdd
LmFwcGVuZChwYXRoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fdG9vbC5zY20o
KS5hZGQocGF0aCkKIAogICAgIGRlZiBfdXBkYXRlX2V4cGVjdGF0aW9uc19maWxlKHNlbGYsIGJ1
aWxkZXJfbmFtZSwgdGVzdF9uYW1lKToKICAgICAgICAgcG9ydCA9IHNlbGYuX3Rvb2wucG9ydF9m
YWN0b3J5LmdldF9mcm9tX2J1aWxkZXJfbmFtZShidWlsZGVyX25hbWUpCkBAIC0xNDgsNyArMTY3
LDcgQEAgY2xhc3MgUmViYXNlbGluZVRlc3QoQWJzdHJhY3RSZWJhc2VsaW5pbmdDb21tYW5kKToK
ICAgICAgICAgaWYgcGxhdGZvcm1zX3RvX21vdmVfZXhpc3RpbmdfYmFzZWxpbmVzX3RvOgogICAg
ICAgICAgICAgc2VsZi5fY29weV9leGlzdGluZ19iYXNlbGluZShwbGF0Zm9ybXNfdG9fbW92ZV9l
eGlzdGluZ19iYXNlbGluZXNfdG8sIHRlc3RfbmFtZSwgc3VmZml4KQogCi0gICAgICAgIHByaW50
ICJSZXRyaWV2aW5nICVzLiIgJSBzb3VyY2VfYmFzZWxpbmUKKyAgICAgICAgX2xvZy5pbmZvKCJS
ZXRyaWV2aW5nICVzLiIgJSBzb3VyY2VfYmFzZWxpbmUpCiAgICAgICAgIHNlbGYuX3NhdmVfYmFz
ZWxpbmUoc2VsZi5fdG9vbC53ZWIuZ2V0X2JpbmFyeShzb3VyY2VfYmFzZWxpbmUsIGNvbnZlcnRf
NDA0X3RvX05vbmU9VHJ1ZSksIHRhcmdldF9iYXNlbGluZSkKIAogICAgIGRlZiBfcmViYXNlbGlu
ZV90ZXN0X2FuZF91cGRhdGVfZXhwZWN0YXRpb25zKHNlbGYsIGJ1aWxkZXJfbmFtZSwgdGVzdF9u
YW1lLCBwbGF0Zm9ybXNfdG9fbW92ZV9leGlzdGluZ19iYXNlbGluZXNfdG8pOgpAQCAtMTU4LDEy
ICsxNzcsMTYgQEAgY2xhc3MgUmViYXNlbGluZVRlc3QoQWJzdHJhY3RSZWJhc2VsaW5pbmdDb21t
YW5kKToKIAogICAgIGRlZiBleGVjdXRlKHNlbGYsIG9wdGlvbnMsIGFyZ3MsIHRvb2wpOgogICAg
ICAgICBzZWxmLl9iYXNlbGluZV9zdWZmaXhfbGlzdCA9IG9wdGlvbnMuc3VmZml4ZXMuc3BsaXQo
JywnKQorICAgICAgICBzZWxmLl9wcmludF9zY21fY2hhbmdlcyA9IG9wdGlvbnMucHJpbnRfc2Nt
X2NoYW5nZXMKKyAgICAgICAgc2VsZi5fc2NtX2NoYW5nZXMgPSB7J2FkZCc6IFtdLCAncm0nOiBb
XX0KIAogICAgICAgICBpZiBsZW4oYXJncykgPiAyOgogICAgICAgICAgICAgcGxhdGZvcm1zX3Rv
X21vdmVfZXhpc3RpbmdfYmFzZWxpbmVzX3RvID0gYXJnc1syOl0KICAgICAgICAgZWxzZToKICAg
ICAgICAgICAgIHBsYXRmb3Jtc190b19tb3ZlX2V4aXN0aW5nX2Jhc2VsaW5lc190byA9IE5vbmUK
ICAgICAgICAgc2VsZi5fcmViYXNlbGluZV90ZXN0X2FuZF91cGRhdGVfZXhwZWN0YXRpb25zKGFy
Z3NbMF0sIGFyZ3NbMV0sIHBsYXRmb3Jtc190b19tb3ZlX2V4aXN0aW5nX2Jhc2VsaW5lc190bykK
KyAgICAgICAgaWYgc2VsZi5fcHJpbnRfc2NtX2NoYW5nZXM6CisgICAgICAgICAgICBwcmludCBq
c29uLmR1bXBzKHNlbGYuX3NjbV9jaGFuZ2VzKQogCiAKIGNsYXNzIE9wdGltaXplQmFzZWxpbmVz
KEFic3RyYWN0UmViYXNlbGluaW5nQ29tbWFuZCk6CkBAIC0yNTcsMTAgKzI4MCwxMCBAQCBjbGFz
cyBSZWJhc2VsaW5lRXhwZWN0YXRpb25zKEFic3RyYWN0RGVjbGFyYXRpdmVDb21tYW5kKToKICAg
ICAgICAgYnVpbGRlcl9uYW1lID0gYnVpbGRlcnMuYnVpbGRlcl9uYW1lX2Zvcl9wb3J0X25hbWUo
cG9ydF9uYW1lKQogICAgICAgICBpZiBub3QgYnVpbGRlcl9uYW1lOgogICAgICAgICAgICAgcmV0
dXJuCi0gICAgICAgIHByaW50ICJSZXRyaWV2aW5nIHJlc3VsdHMgZm9yICVzIGZyb20gJXMuIiAl
IChwb3J0X25hbWUsIGJ1aWxkZXJfbmFtZSkKKyAgICAgICAgX2xvZy5pbmZvKCJSZXRyaWV2aW5n
IHJlc3VsdHMgZm9yICVzIGZyb20gJXMuIiAlIChwb3J0X25hbWUsIGJ1aWxkZXJfbmFtZSkpCiAg
ICAgICAgIGZvciB0ZXN0X25hbWUgaW4gc2VsZi5fdGVzdHNfdG9fcmViYXNlbGluZShzZWxmLl90
b29sLnBvcnRfZmFjdG9yeS5nZXQocG9ydF9uYW1lKSk6CiAgICAgICAgICAgICBzZWxmLl90b3Vj
aGVkX3Rlc3RfbmFtZXMuYWRkKHRlc3RfbmFtZSkKLSAgICAgICAgICAgIHByaW50ICIgICAgJXMi
ICUgdGVzdF9uYW1lCisgICAgICAgICAgICBfbG9nLmluZm8oIiAgICAlcyIgJSB0ZXN0X25hbWUp
CiAgICAgICAgICAgICAjIEZJWE1FOiBuZWVkIHRvIGV4dHJhY3QgdGhlIGNvcnJlY3QgbGlzdCBv
ZiBzdWZmaXhlcyBoZXJlLgogICAgICAgICAgICAgc2VsZi5fcnVuX3dlYmtpdF9wYXRjaChbJ3Jl
YmFzZWxpbmUtdGVzdCcsIGJ1aWxkZXJfbmFtZSwgdGVzdF9uYW1lXSkKIApAQCAtMjczLDcgKzI5
Niw3IEBAIGNsYXNzIFJlYmFzZWxpbmVFeHBlY3RhdGlvbnMoQWJzdHJhY3REZWNsYXJhdGl2ZUNv
bW1hbmQpOgogICAgICAgICBpZiBub3Qgb3B0aW9ucy5vcHRpbWl6ZToKICAgICAgICAgICAgIHJl
dHVybgogICAgICAgICBmb3IgdGVzdF9uYW1lIGluIHNlbGYuX3RvdWNoZWRfdGVzdF9uYW1lczoK
LSAgICAgICAgICAgIHByaW50ICJPcHRpbWl6aW5nIGJhc2VsaW5lcyBmb3IgJXMuIiAlIHRlc3Rf
bmFtZQorICAgICAgICAgICAgX2xvZy5pbmZvKCJPcHRpbWl6aW5nIGJhc2VsaW5lcyBmb3IgJXMu
IiAlIHRlc3RfbmFtZSkKICAgICAgICAgICAgIHNlbGYuX3J1bl93ZWJraXRfcGF0Y2goWydvcHRp
bWl6ZS1iYXNlbGluZXMnLCB0ZXN0X25hbWVdKQogCiAKQEAgLTI4NSw3ICszMDgsNyBAQCBjbGFz
cyBSZWJhc2VsaW5lKEFic3RyYWN0RGVjbGFyYXRpdmVDb21tYW5kKToKICAgICBkZWYgX2J1aWxk
ZXJfdG9fcHVsbF9mcm9tKHNlbGYpOgogICAgICAgICBidWlsZGVyX3N0YXR1c2VzID0gc2VsZi5f
dG9vbC5idWlsZGJvdC5idWlsZGVyX3N0YXR1c2VzKCkKICAgICAgICAgcmVkX3N0YXR1c2VzID0g
W3N0YXR1cyBmb3Igc3RhdHVzIGluIGJ1aWxkZXJfc3RhdHVzZXMgaWYgbm90IHN0YXR1c1siaXNf
Z3JlZW4iXV0KLSAgICAgICAgcHJpbnQgIiVzIGZhaWxpbmciICUgKHBsdXJhbGl6ZSgiYnVpbGRl
ciIsIGxlbihyZWRfc3RhdHVzZXMpKSkKKyAgICAgICAgX2xvZy5pbmZvKCIlcyBmYWlsaW5nIiAl
IChwbHVyYWxpemUoImJ1aWxkZXIiLCBsZW4ocmVkX3N0YXR1c2VzKSkpKQogICAgICAgICBidWls
ZGVyX2Nob2ljZXMgPSBbc3RhdHVzWyJuYW1lIl0gZm9yIHN0YXR1cyBpbiByZWRfc3RhdHVzZXNd
CiAgICAgICAgIGNob3Nlbl9uYW1lID0gc2VsZi5fdG9vbC51c2VyLnByb21wdF93aXRoX2xpc3Qo
IldoaWNoIGJ1aWxkZXIgdG8gcHVsbCByZXN1bHRzIGZyb206IiwgYnVpbGRlcl9jaG9pY2VzKQog
ICAgICAgICAjIEZJWE1FOiBwcm9tcHRfd2l0aF9saXN0IHNob3VsZCByZWFsbHkgdGFrZSBhIHNl
dCBvZiBvYmplY3RzIGFuZCBhIHNldCBvZiBuYW1lcyBhbmQgdGhlbiByZXR1cm4gdGhlIG9iamVj
dC4KQEAgLTMxNSw3ICszMzgsNyBAQCBjbGFzcyBSZWJhc2VsaW5lKEFic3RyYWN0RGVjbGFyYXRp
dmVDb21tYW5kKToKICAgICAgICAgICAgIHJlc3VsdHNfdXJsID0gc2VsZi5fcmVzdWx0c191cmxf
Zm9yX3Rlc3QoYnVpbGQsIHRlc3QpCiAgICAgICAgICAgICAjIFBvcnQgb3BlcmF0ZXMgd2l0aCBh
YnNvbHV0ZSBwYXRocy4KICAgICAgICAgICAgIGV4cGVjdGVkX2ZpbGUgPSBwb3J0LmV4cGVjdGVk
X2ZpbGVuYW1lKHRlc3QsICcudHh0JykKLSAgICAgICAgICAgIHByaW50IHRlc3QKKyAgICAgICAg
ICAgIF9sb2cuaW5mbyh0ZXN0KQogICAgICAgICAgICAgc2VsZi5fcmVwbGFjZV9leHBlY3RhdGlv
bl93aXRoX3JlbW90ZV9yZXN1bHQoZXhwZWN0ZWRfZmlsZSwgcmVzdWx0c191cmwpCiAKICAgICAg
ICAgIyBGSVhNRTogV2Ugc2hvdWxkIGhhbmRsZSBuZXcgcmVzdWx0cyB0b28uCmRpZmYgLS1naXQg
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcmViYXNlbGluZV91bml0dGVz
dC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9yZWJhc2VsaW5lX3Vu
aXR0ZXN0LnB5CmluZGV4IDQ2ZDllZDQ3YmZkZjA2OTU0NTVkY2FlOThhYzc4N2YyYWNjYzk3OWYu
LjBhZGIxODIzYzMzOWIwMDc4Nzc2YzE3ZDRmZmE4NWM0YTJmMWM0YTggMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9yZWJhc2VsaW5lX3VuaXR0ZXN0LnB5
CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9yZWJhc2VsaW5lX3Vu
aXR0ZXN0LnB5CkBAIC01NSwxMSArNTUsMTEgQEAgQlVHQSBERUJVRyA6IGZhc3QvY3NzL2xhcmdl
LWxpc3Qtb2YtcnVsZXMtY3Jhc2guaHRtbCA9IFRFWFQKICAgICAgICAgdG9vbC5maWxlc3lzdGVt
LndyaXRlX3RleHRfZmlsZShvcy5wYXRoLmpvaW4obGlvbl9wb3J0LmxheW91dF90ZXN0c19kaXIo
KSwgImZhc3QvY3NzL2xhcmdlLWxpc3Qtb2YtcnVsZXMtY3Jhc2guaHRtbCIpLCAiRHVtbXkgdGVz
dCBjb250ZW50cyIpCiAgICAgICAgIHRvb2wuZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUob3Mu
cGF0aC5qb2luKGxpb25fcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCksICJ1c2Vyc2NyaXB0cy9hbm90
aGVyLXRlc3QuaHRtbCIpLCAiRHVtbXkgdGVzdCBjb250ZW50cyIpCiAKLSAgICAgICAgZXhwZWN0
ZWRfc3Rkb3V0ID0gIiIiUmV0cmlldmluZyBodHRwOi8vZXhhbXBsZS5jb20vZi9idWlsZGVycy9X
ZWJraXQgTWFjMTAuNy9yZXN1bHRzL2xheW91dC10ZXN0LXJlc3VsdHMvdXNlcnNjcmlwdHMvYW5v
dGhlci10ZXN0LWFjdHVhbC5wbmcuCisgICAgICAgIGV4cGVjdGVkX2xvZ3MgPSAiIiJSZXRyaWV2
aW5nIGh0dHA6Ly9leGFtcGxlLmNvbS9mL2J1aWxkZXJzL1dlYmtpdCBNYWMxMC43L3Jlc3VsdHMv
bGF5b3V0LXRlc3QtcmVzdWx0cy91c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QtYWN0dWFsLnBuZy4K
IFJldHJpZXZpbmcgaHR0cDovL2V4YW1wbGUuY29tL2YvYnVpbGRlcnMvV2Via2l0IE1hYzEwLjcv
cmVzdWx0cy9sYXlvdXQtdGVzdC1yZXN1bHRzL3VzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC1hY3R1
YWwud2F2LgogUmV0cmlldmluZyBodHRwOi8vZXhhbXBsZS5jb20vZi9idWlsZGVycy9XZWJraXQg
TWFjMTAuNy9yZXN1bHRzL2xheW91dC10ZXN0LXJlc3VsdHMvdXNlcnNjcmlwdHMvYW5vdGhlci10
ZXN0LWFjdHVhbC50eHQuCiAiIiIKLSAgICAgICAgT3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRw
dXRzKHNlbGYsIGNvbW1hbmQuX3JlYmFzZWxpbmVfdGVzdF9hbmRfdXBkYXRlX2V4cGVjdGF0aW9u
cywgWyJXZWJraXQgTWFjMTAuNyIsICJ1c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QuaHRtbCIsIE5v
bmVdLCBleHBlY3RlZF9zdGRvdXQ9ZXhwZWN0ZWRfc3Rkb3V0KQorICAgICAgICBPdXRwdXRDYXB0
dXJlKCkuYXNzZXJ0X291dHB1dHMoc2VsZiwgY29tbWFuZC5fcmViYXNlbGluZV90ZXN0X2FuZF91
cGRhdGVfZXhwZWN0YXRpb25zLCBbIldlYmtpdCBNYWMxMC43IiwgInVzZXJzY3JpcHRzL2Fub3Ro
ZXItdGVzdC5odG1sIiwgTm9uZV0sIGV4cGVjdGVkX2xvZ3M9ZXhwZWN0ZWRfbG9ncykKIAogICAg
ICAgICBuZXdfZXhwZWN0YXRpb25zID0gdG9vbC5maWxlc3lzdGVtLnJlYWRfdGV4dF9maWxlKGxp
b25fcG9ydC5wYXRoX3RvX3Rlc3RfZXhwZWN0YXRpb25zX2ZpbGUoKSkKICAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChuZXdfZXhwZWN0YXRpb25zLCAiIiJCVUdCIE1BQyBMSU5VWCBYUCBERUJVRyA6
IGZhc3QvZG9tL1dpbmRvdy93aW5kb3ctcG9zdG1lc3NhZ2UtY2xvbmUtcmVhbGx5LWRlZXAtYXJy
YXkuaHRtbCA9IFBBU1MKQEAgLTc1LDExICs3NSwxMSBAQCBCVUdBIERFQlVHIDogZmFzdC9jc3Mv
bGFyZ2UtbGlzdC1vZi1ydWxlcy1jcmFzaC5odG1sID0gVEVYVAogICAgICAgICB0b29sLmZpbGVz
eXN0ZW0ud3JpdGVfdGV4dF9maWxlKGxpb25fcG9ydC5wYXRoX3RvX3Rlc3RfZXhwZWN0YXRpb25z
X2ZpbGUoKSwgIkJVR1ggTUFDIDogdXNlcnNjcmlwdHMvYW5vdGhlci10ZXN0Lmh0bWwgPSBJTUFH
RVxuQlVHWiBMSU5VWCA6IHVzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC5odG1sID0gSU1BR0VcbiIp
CiAgICAgICAgIHRvb2wuZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUob3MucGF0aC5qb2luKGxp
b25fcG9ydC5sYXlvdXRfdGVzdHNfZGlyKCksICJ1c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QuaHRt
bCIpLCAiRHVtbXkgdGVzdCBjb250ZW50cyIpCiAKLSAgICAgICAgZXhwZWN0ZWRfc3Rkb3V0ID0g
IiIiUmV0cmlldmluZyBodHRwOi8vZXhhbXBsZS5jb20vZi9idWlsZGVycy9XZWJraXQgTWFjMTAu
Ny9yZXN1bHRzL2xheW91dC10ZXN0LXJlc3VsdHMvdXNlcnNjcmlwdHMvYW5vdGhlci10ZXN0LWFj
dHVhbC5wbmcuCisgICAgICAgIGV4cGVjdGVkX2xvZ3MgPSAiIiJSZXRyaWV2aW5nIGh0dHA6Ly9l
eGFtcGxlLmNvbS9mL2J1aWxkZXJzL1dlYmtpdCBNYWMxMC43L3Jlc3VsdHMvbGF5b3V0LXRlc3Qt
cmVzdWx0cy91c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QtYWN0dWFsLnBuZy4KIFJldHJpZXZpbmcg
aHR0cDovL2V4YW1wbGUuY29tL2YvYnVpbGRlcnMvV2Via2l0IE1hYzEwLjcvcmVzdWx0cy9sYXlv
dXQtdGVzdC1yZXN1bHRzL3VzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC1hY3R1YWwud2F2LgogUmV0
cmlldmluZyBodHRwOi8vZXhhbXBsZS5jb20vZi9idWlsZGVycy9XZWJraXQgTWFjMTAuNy9yZXN1
bHRzL2xheW91dC10ZXN0LXJlc3VsdHMvdXNlcnNjcmlwdHMvYW5vdGhlci10ZXN0LWFjdHVhbC50
eHQuCiAiIiIKLSAgICAgICAgT3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYsIGNv
bW1hbmQuX3JlYmFzZWxpbmVfdGVzdF9hbmRfdXBkYXRlX2V4cGVjdGF0aW9ucywgWyJXZWJraXQg
TWFjMTAuNyIsICJ1c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QuaHRtbCIsIE5vbmVdLCBleHBlY3Rl
ZF9zdGRvdXQ9ZXhwZWN0ZWRfc3Rkb3V0KQorICAgICAgICBPdXRwdXRDYXB0dXJlKCkuYXNzZXJ0
X291dHB1dHMoc2VsZiwgY29tbWFuZC5fcmViYXNlbGluZV90ZXN0X2FuZF91cGRhdGVfZXhwZWN0
YXRpb25zLCBbIldlYmtpdCBNYWMxMC43IiwgInVzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC5odG1s
IiwgTm9uZV0sIGV4cGVjdGVkX2xvZ3M9ZXhwZWN0ZWRfbG9ncykKIAogICAgICAgICBuZXdfZXhw
ZWN0YXRpb25zID0gdG9vbC5maWxlc3lzdGVtLnJlYWRfdGV4dF9maWxlKGxpb25fcG9ydC5wYXRo
X3RvX3Rlc3RfZXhwZWN0YXRpb25zX2ZpbGUoKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChu
ZXdfZXhwZWN0YXRpb25zLCAiQlVHWCBMRU9QQVJEIFNOT1dMRU9QQVJEIDogdXNlcnNjcmlwdHMv
YW5vdGhlci10ZXN0Lmh0bWwgPSBJTUFHRVxuQlVHWiBMSU5VWCA6IHVzZXJzY3JpcHRzL2Fub3Ro
ZXItdGVzdC5odG1sID0gSU1BR0VcbiIpCkBAIC04Nyw4ICs4NywxOCBAQCBSZXRyaWV2aW5nIGh0
dHA6Ly9leGFtcGxlLmNvbS9mL2J1aWxkZXJzL1dlYmtpdCBNYWMxMC43L3Jlc3VsdHMvbGF5b3V0
LXRlc3QtcmVzdQogICAgIGRlZiB0ZXN0X3JlYmFzZWxpbmVfdGVzdChzZWxmKToKICAgICAgICAg
Y29tbWFuZCA9IFJlYmFzZWxpbmVUZXN0KCkKICAgICAgICAgY29tbWFuZC5iaW5kX3RvX3Rvb2wo
TW9ja1Rvb2woKSkKLSAgICAgICAgZXhwZWN0ZWRfc3Rkb3V0ID0gIlJldHJpZXZpbmcgaHR0cDov
L2V4YW1wbGUuY29tL2YvYnVpbGRlcnMvV2Via2l0IExpbnV4L3Jlc3VsdHMvbGF5b3V0LXRlc3Qt
cmVzdWx0cy91c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QtYWN0dWFsLnR4dC5cbiIKLSAgICAgICAg
T3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYsIGNvbW1hbmQuX3JlYmFzZWxpbmVf
dGVzdCwgWyJXZWJraXQgTGludXgiLCAidXNlcnNjcmlwdHMvYW5vdGhlci10ZXN0Lmh0bWwiLCBO
b25lLCAidHh0Il0sIGV4cGVjdGVkX3N0ZG91dD1leHBlY3RlZF9zdGRvdXQpCisgICAgICAgIGV4
cGVjdGVkX2xvZ3MgPSAiUmV0cmlldmluZyBodHRwOi8vZXhhbXBsZS5jb20vZi9idWlsZGVycy9X
ZWJraXQgTGludXgvcmVzdWx0cy9sYXlvdXQtdGVzdC1yZXN1bHRzL3VzZXJzY3JpcHRzL2Fub3Ro
ZXItdGVzdC1hY3R1YWwudHh0LlxuIgorICAgICAgICBPdXRwdXRDYXB0dXJlKCkuYXNzZXJ0X291
dHB1dHMoc2VsZiwgY29tbWFuZC5fcmViYXNlbGluZV90ZXN0LCBbIldlYmtpdCBMaW51eCIsICJ1
c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QuaHRtbCIsIE5vbmUsICJ0eHQiXSwgZXhwZWN0ZWRfbG9n
cz1leHBlY3RlZF9sb2dzKQorCisgICAgZGVmIHRlc3RfcmViYXNlbGluZV90ZXN0X2FuZF9wcmlu
dF9zY21fY2hhbmdlcyhzZWxmKToKKyAgICAgICAgY29tbWFuZCA9IFJlYmFzZWxpbmVUZXN0KCkK
KyAgICAgICAgY29tbWFuZC5iaW5kX3RvX3Rvb2woTW9ja1Rvb2woKSkKKyAgICAgICAgZXhwZWN0
ZWRfbG9ncyA9ICJSZXRyaWV2aW5nIGh0dHA6Ly9leGFtcGxlLmNvbS9mL2J1aWxkZXJzL1dlYmtp
dCBMaW51eC9yZXN1bHRzL2xheW91dC10ZXN0LXJlc3VsdHMvdXNlcnNjcmlwdHMvYW5vdGhlci10
ZXN0LWFjdHVhbC50eHQuXG4iCisgICAgICAgIGNvbW1hbmQuX3ByaW50X3NjbV9jaGFuZ2VzID0g
VHJ1ZQorICAgICAgICBjb21tYW5kLl9zY21fY2hhbmdlcyA9IHsnYWRkJzogW10sICdybSc6IFtd
fQorICAgICAgICBjb21tYW5kLl90b29sLl9zY20uZXhpc3RzID0gbGFtYmRhIHg6IEZhbHNlCisg
ICAgICAgIE91dHB1dENhcHR1cmUoKS5hc3NlcnRfb3V0cHV0cyhzZWxmLCBjb21tYW5kLl9yZWJh
c2VsaW5lX3Rlc3QsIFsiV2Via2l0IExpbnV4IiwgInVzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC5o
dG1sIiwgTm9uZSwgInR4dCJdLCBleHBlY3RlZF9sb2dzPWV4cGVjdGVkX2xvZ3MpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWxzKGNvbW1hbmQuX3NjbV9jaGFuZ2VzLCB7J2FkZCc6IFsnL21vY2st
Y2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0tbGludXgvdXNlcnNjcmlwdHMv
YW5vdGhlci10ZXN0LWV4cGVjdGVkLnR4dCddLCAncm0nOiBbXX0pCiAKICAgICBkZWYgdGVzdF9y
ZWJhc2VsaW5lX2FuZF9jb3B5X3Rlc3Qoc2VsZik6CiAgICAgICAgIGNvbW1hbmQgPSBSZWJhc2Vs
aW5lVGVzdCgpCkBAIC05OCwyMCArMTA4LDIwIEBAIFJldHJpZXZpbmcgaHR0cDovL2V4YW1wbGUu
Y29tL2YvYnVpbGRlcnMvV2Via2l0IE1hYzEwLjcvcmVzdWx0cy9sYXlvdXQtdGVzdC1yZXN1CiAg
ICAgICAgIGxpb25fcG9ydCA9IHRvb2wucG9ydF9mYWN0b3J5LmdldF9mcm9tX2J1aWxkZXJfbmFt
ZSgiV2Via2l0IE1hYzEwLjciKQogICAgICAgICB0b29sLmZpbGVzeXN0ZW0ud3JpdGVfdGV4dF9m
aWxlKG9zLnBhdGguam9pbihsaW9uX3BvcnQubGF5b3V0X3Rlc3RzX2RpcigpLCAidXNlcnNjcmlw
dHMvYW5vdGhlci10ZXN0LWV4cGVjdGVkLnR4dCIpLCAiRHVtbXkgZXhwZWN0ZWQgcmVzdWx0IikK
IAotICAgICAgICBleHBlY3RlZF9zdGRvdXQgPSAiIiJDb3B5aW5nIGJhc2VsaW5lIGZyb20gL21v
Y2stY2hlY2tvdXQvTGF5b3V0VGVzdHMvdXNlcnNjcmlwdHMvYW5vdGhlci10ZXN0LWV4cGVjdGVk
LnR4dCB0byAvbW9jay1jaGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS1tYWMt
c25vd2xlb3BhcmQvdXNlcnNjcmlwdHMvYW5vdGhlci10ZXN0LWV4cGVjdGVkLnR4dC4KKyAgICAg
ICAgZXhwZWN0ZWRfbG9ncyA9ICIiIkNvcHlpbmcgYmFzZWxpbmUgZnJvbSAvbW9jay1jaGVja291
dC9MYXlvdXRUZXN0cy91c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QtZXhwZWN0ZWQudHh0IHRvIC9t
b2NrLWNoZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLW1hYy1zbm93bGVvcGFy
ZC91c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QtZXhwZWN0ZWQudHh0LgogUmV0cmlldmluZyBodHRw
Oi8vZXhhbXBsZS5jb20vZi9idWlsZGVycy9XZWJraXQgTWFjMTAuNy9yZXN1bHRzL2xheW91dC10
ZXN0LXJlc3VsdHMvdXNlcnNjcmlwdHMvYW5vdGhlci10ZXN0LWFjdHVhbC50eHQuCiAiIiIKLSAg
ICAgICAgT3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYsIGNvbW1hbmQuX3JlYmFz
ZWxpbmVfdGVzdCwgWyJXZWJraXQgTWFjMTAuNyIsICJ1c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3Qu
aHRtbCIsIFsiY2hyb21pdW0tbWFjLXNub3dsZW9wYXJkIl0sICJ0eHQiXSwgZXhwZWN0ZWRfc3Rk
b3V0PWV4cGVjdGVkX3N0ZG91dCkKKyAgICAgICAgT3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRw
dXRzKHNlbGYsIGNvbW1hbmQuX3JlYmFzZWxpbmVfdGVzdCwgWyJXZWJraXQgTWFjMTAuNyIsICJ1
c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QuaHRtbCIsIFsiY2hyb21pdW0tbWFjLXNub3dsZW9wYXJk
Il0sICJ0eHQiXSwgZXhwZWN0ZWRfbG9ncz1leHBlY3RlZF9sb2dzKQogCiAgICAgZGVmIHRlc3Rf
cmViYXNlbGluZV9hbmRfY29weV90ZXN0X25vX2V4aXN0aW5nX3Jlc3VsdChzZWxmKToKICAgICAg
ICAgY29tbWFuZCA9IFJlYmFzZWxpbmVUZXN0KCkKICAgICAgICAgdG9vbCA9IE1vY2tUb29sKCkK
ICAgICAgICAgY29tbWFuZC5iaW5kX3RvX3Rvb2wodG9vbCkKIAotICAgICAgICBleHBlY3RlZF9z
dGRvdXQgPSAiIiJObyBleGlzdGluZyBiYXNlbGluZSBmb3IgdXNlcnNjcmlwdHMvYW5vdGhlci10
ZXN0Lmh0bWwuCisgICAgICAgIGV4cGVjdGVkX2xvZ3MgPSAiIiJObyBleGlzdGluZyBiYXNlbGlu
ZSBmb3IgdXNlcnNjcmlwdHMvYW5vdGhlci10ZXN0Lmh0bWwuCiBSZXRyaWV2aW5nIGh0dHA6Ly9l
eGFtcGxlLmNvbS9mL2J1aWxkZXJzL1dlYmtpdCBNYWMxMC43L3Jlc3VsdHMvbGF5b3V0LXRlc3Qt
cmVzdWx0cy91c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QtYWN0dWFsLnR4dC4KICIiIgotICAgICAg
ICBPdXRwdXRDYXB0dXJlKCkuYXNzZXJ0X291dHB1dHMoc2VsZiwgY29tbWFuZC5fcmViYXNlbGlu
ZV90ZXN0LCBbIldlYmtpdCBNYWMxMC43IiwgInVzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC5odG1s
IiwgWyJjaHJvbWl1bS1tYWMtc25vd2xlb3BhcmQiXSwgInR4dCJdLCBleHBlY3RlZF9zdGRvdXQ9
ZXhwZWN0ZWRfc3Rkb3V0KQorICAgICAgICBPdXRwdXRDYXB0dXJlKCkuYXNzZXJ0X291dHB1dHMo
c2VsZiwgY29tbWFuZC5fcmViYXNlbGluZV90ZXN0LCBbIldlYmtpdCBNYWMxMC43IiwgInVzZXJz
Y3JpcHRzL2Fub3RoZXItdGVzdC5odG1sIiwgWyJjaHJvbWl1bS1tYWMtc25vd2xlb3BhcmQiXSwg
InR4dCJdLCBleHBlY3RlZF9sb2dzPWV4cGVjdGVkX2xvZ3MpCiAKICAgICBkZWYgdGVzdF9yZWJh
c2VsaW5lX2FuZF9jb3B5X3Rlc3Rfd2l0aF9saW9uX3Jlc3VsdChzZWxmKToKICAgICAgICAgY29t
bWFuZCA9IFJlYmFzZWxpbmVUZXN0KCkKQEAgLTEyMSwxMSArMTMxLDExIEBAIFJldHJpZXZpbmcg
aHR0cDovL2V4YW1wbGUuY29tL2YvYnVpbGRlcnMvV2Via2l0IE1hYzEwLjcvcmVzdWx0cy9sYXlv
dXQtdGVzdC1yZXN1CiAgICAgICAgIGxpb25fcG9ydCA9IHRvb2wucG9ydF9mYWN0b3J5LmdldF9m
cm9tX2J1aWxkZXJfbmFtZSgiV2Via2l0IE1hYzEwLjciKQogICAgICAgICB0b29sLmZpbGVzeXN0
ZW0ud3JpdGVfdGV4dF9maWxlKG9zLnBhdGguam9pbihsaW9uX3BvcnQuYmFzZWxpbmVfcGF0aCgp
LCAidXNlcnNjcmlwdHMvYW5vdGhlci10ZXN0LWV4cGVjdGVkLnR4dCIpLCAiRHVtbXkgZXhwZWN0
ZWQgcmVzdWx0IikKIAotICAgICAgICBleHBlY3RlZF9zdGRvdXQgPSAiIiJDb3B5aW5nIGJhc2Vs
aW5lIGZyb20gL21vY2stY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0tbWFj
L3VzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC1leHBlY3RlZC50eHQgdG8gL21vY2stY2hlY2tvdXQv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0tbWFjLXNub3dsZW9wYXJkL3VzZXJzY3JpcHRz
L2Fub3RoZXItdGVzdC1leHBlY3RlZC50eHQuCisgICAgICAgIGV4cGVjdGVkX2xvZ3MgPSAiIiJD
b3B5aW5nIGJhc2VsaW5lIGZyb20gL21vY2stY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
Y2hyb21pdW0tbWFjL3VzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC1leHBlY3RlZC50eHQgdG8gL21v
Y2stY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0tbWFjLXNub3dsZW9wYXJk
L3VzZXJzY3JpcHRzL2Fub3RoZXItdGVzdC1leHBlY3RlZC50eHQuCiBDb3B5aW5nIGJhc2VsaW5l
IGZyb20gL21vY2stY2hlY2tvdXQvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0tbWFjL3Vz
ZXJzY3JpcHRzL2Fub3RoZXItdGVzdC1leHBlY3RlZC50eHQgdG8gL21vY2stY2hlY2tvdXQvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0tbWFjLWxlb3BhcmQvdXNlcnNjcmlwdHMvYW5vdGhl
ci10ZXN0LWV4cGVjdGVkLnR4dC4KIFJldHJpZXZpbmcgaHR0cDovL2V4YW1wbGUuY29tL2YvYnVp
bGRlcnMvV2Via2l0IE1hYzEwLjcvcmVzdWx0cy9sYXlvdXQtdGVzdC1yZXN1bHRzL3VzZXJzY3Jp
cHRzL2Fub3RoZXItdGVzdC1hY3R1YWwudHh0LgogIiIiCi0gICAgICAgIE91dHB1dENhcHR1cmUo
KS5hc3NlcnRfb3V0cHV0cyhzZWxmLCBjb21tYW5kLl9yZWJhc2VsaW5lX3Rlc3QsIFsiV2Via2l0
IE1hYzEwLjciLCAidXNlcnNjcmlwdHMvYW5vdGhlci10ZXN0Lmh0bWwiLCBbImNocm9taXVtLW1h
Yy1zbm93bGVvcGFyZCIsICJjaHJvbWl1bS1tYWMtbGVvcGFyZCJdLCAidHh0Il0sIGV4cGVjdGVk
X3N0ZG91dD1leHBlY3RlZF9zdGRvdXQpCisgICAgICAgIE91dHB1dENhcHR1cmUoKS5hc3NlcnRf
b3V0cHV0cyhzZWxmLCBjb21tYW5kLl9yZWJhc2VsaW5lX3Rlc3QsIFsiV2Via2l0IE1hYzEwLjci
LCAidXNlcnNjcmlwdHMvYW5vdGhlci10ZXN0Lmh0bWwiLCBbImNocm9taXVtLW1hYy1zbm93bGVv
cGFyZCIsICJjaHJvbWl1bS1tYWMtbGVvcGFyZCJdLCAidHh0Il0sIGV4cGVjdGVkX2xvZ3M9ZXhw
ZWN0ZWRfbG9ncykKIAogICAgIGRlZiB0ZXN0X3JlYmFzZWxpbmVfYW5kX2NvcHlfbm9fb3Zlcndy
aXRlX3Rlc3Qoc2VsZik6CiAgICAgICAgIGNvbW1hbmQgPSBSZWJhc2VsaW5lVGVzdCgpCkBAIC0x
MzgsMTAgKzE0OCwxMCBAQCBSZXRyaWV2aW5nIGh0dHA6Ly9leGFtcGxlLmNvbS9mL2J1aWxkZXJz
L1dlYmtpdCBNYWMxMC43L3Jlc3VsdHMvbGF5b3V0LXRlc3QtcmVzdQogICAgICAgICBzbm93bGVv
cGFyZF9wb3J0ID0gdG9vbC5wb3J0X2ZhY3RvcnkuZ2V0X2Zyb21fYnVpbGRlcl9uYW1lKCJXZWJr
aXQgTWFjMTAuNiIpCiAgICAgICAgIHRvb2wuZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUob3Mu
cGF0aC5qb2luKHNub3dsZW9wYXJkX3BvcnQuYmFzZWxpbmVfcGF0aCgpLCAidXNlcnNjcmlwdHMv
YW5vdGhlci10ZXN0LWV4cGVjdGVkLnR4dCIpLCAiRHVtbXkgZXhwZWN0ZWQgcmVzdWx0IikKIAot
ICAgICAgICBleHBlY3RlZF9zdGRvdXQgPSAiIiJFeGlzdGluZyBiYXNlbGluZSBhdCAvbW9jay1j
aGVja291dC9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS1tYWMtc25vd2xlb3BhcmQvdXNl
cnNjcmlwdHMvYW5vdGhlci10ZXN0LWV4cGVjdGVkLnR4dCwgbm90IGNvcHlpbmcgb3ZlciBpdC4K
KyAgICAgICAgZXhwZWN0ZWRfbG9ncyA9ICIiIkV4aXN0aW5nIGJhc2VsaW5lIGF0IC9tb2NrLWNo
ZWNrb3V0L0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLW1hYy1zbm93bGVvcGFyZC91c2Vy
c2NyaXB0cy9hbm90aGVyLXRlc3QtZXhwZWN0ZWQudHh0LCBub3QgY29weWluZyBvdmVyIGl0Lgog
UmV0cmlldmluZyBodHRwOi8vZXhhbXBsZS5jb20vZi9idWlsZGVycy9XZWJraXQgTWFjMTAuNy9y
ZXN1bHRzL2xheW91dC10ZXN0LXJlc3VsdHMvdXNlcnNjcmlwdHMvYW5vdGhlci10ZXN0LWFjdHVh
bC50eHQuCiAiIiIKLSAgICAgICAgT3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYs
IGNvbW1hbmQuX3JlYmFzZWxpbmVfdGVzdCwgWyJXZWJraXQgTWFjMTAuNyIsICJ1c2Vyc2NyaXB0
cy9hbm90aGVyLXRlc3QuaHRtbCIsIFsiY2hyb21pdW0tbWFjLXNub3dsZW9wYXJkIl0sICJ0eHQi
XSwgZXhwZWN0ZWRfc3Rkb3V0PWV4cGVjdGVkX3N0ZG91dCkKKyAgICAgICAgT3V0cHV0Q2FwdHVy
ZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYsIGNvbW1hbmQuX3JlYmFzZWxpbmVfdGVzdCwgWyJXZWJr
aXQgTWFjMTAuNyIsICJ1c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QuaHRtbCIsIFsiY2hyb21pdW0t
bWFjLXNub3dsZW9wYXJkIl0sICJ0eHQiXSwgZXhwZWN0ZWRfbG9ncz1leHBlY3RlZF9sb2dzKQog
CiAgICAgZGVmIHRlc3RfcmViYXNlbGluZV9leHBlY3RhdGlvbnMoc2VsZik6CiAgICAgICAgIGNv
bW1hbmQgPSBSZWJhc2VsaW5lRXhwZWN0YXRpb25zKCkKQEAgLTE1NSw3ICsxNjUsNyBAQCBSZXRy
aWV2aW5nIGh0dHA6Ly9leGFtcGxlLmNvbS9mL2J1aWxkZXJzL1dlYmtpdCBNYWMxMC43L3Jlc3Vs
dHMvbGF5b3V0LXRlc3QtcmVzdQogICAgICAgICAjIERvbid0IGVuYWJsZSBsb2dnaW5nIHVudGls
IGFmdGVyIHdlIGNyZWF0ZSB0aGUgbW9jayBleHBlY3RhdGlvbiBmaWxlcyBhcyBzb21lIFBvcnQu
X19pbml0X18ncyBydW4gc3ViY29tbWFuZHMuCiAgICAgICAgIHRvb2wuZXhlY3V0aXZlID0gTW9j
a0V4ZWN1dGl2ZShzaG91bGRfbG9nPVRydWUpCiAKLSAgICAgICAgZXhwZWN0ZWRfc3Rkb3V0ID0g
IiIiUmV0cmlldmluZyByZXN1bHRzIGZvciBjaHJvbWl1bS1saW51eC14ODYgZnJvbSBXZWJraXQg
TGludXggMzIuCisgICAgICAgIGV4cGVjdGVkX2xvZ3MgPSAiIiJSZXRyaWV2aW5nIHJlc3VsdHMg
Zm9yIGNocm9taXVtLWxpbnV4LXg4NiBmcm9tIFdlYmtpdCBMaW51eCAzMi4KICAgICB1c2Vyc2Ny
aXB0cy9hbm90aGVyLXRlc3QuaHRtbAogICAgIHVzZXJzY3JpcHRzL2ltYWdlcy5zdmcKIFJldHJp
ZXZpbmcgcmVzdWx0cyBmb3IgY2hyb21pdW0tbGludXgteDg2XzY0IGZyb20gV2Via2l0IExpbnV4
LgpAQCAtMjAwLDkgKzIxMCw5IEBAIE1PQ0sgcnVuX2NvbW1hbmQ6IFsnZWNobycsICdyZWJhc2Vs
aW5lLXRlc3QnLCAnV2Via2l0IFdpbicsICd1c2Vyc2NyaXB0cy9pbWFnZXMuCiAiIiIKIAogICAg
ICAgICBjb21tYW5kLl90ZXN0c190b19yZWJhc2VsaW5lID0gbGFtYmRhIHBvcnQ6IFsndXNlcnNj
cmlwdHMvYW5vdGhlci10ZXN0Lmh0bWwnLCAndXNlcnNjcmlwdHMvaW1hZ2VzLnN2ZyddCi0gICAg
ICAgIE91dHB1dENhcHR1cmUoKS5hc3NlcnRfb3V0cHV0cyhzZWxmLCBjb21tYW5kLmV4ZWN1dGUs
IFtNb2NrT3B0aW9ucyhvcHRpbWl6ZT1GYWxzZSksIFtdLCB0b29sXSwgZXhwZWN0ZWRfc3Rkb3V0
PWV4cGVjdGVkX3N0ZG91dCwgZXhwZWN0ZWRfc3RkZXJyPWV4cGVjdGVkX3N0ZGVycikKKyAgICAg
ICAgT3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYsIGNvbW1hbmQuZXhlY3V0ZSwg
W01vY2tPcHRpb25zKG9wdGltaXplPUZhbHNlKSwgW10sIHRvb2xdLCBleHBlY3RlZF9sb2dzPWV4
cGVjdGVkX2xvZ3MsIGV4cGVjdGVkX3N0ZGVycj1leHBlY3RlZF9zdGRlcnIpCiAKLSAgICAgICAg
ZXhwZWN0ZWRfc3Rkb3V0X3dpdGhfb3B0aW1pemUgPSBleHBlY3RlZF9zdGRvdXQgKyAoCisgICAg
ICAgIGV4cGVjdGVkX2xvZ3Nfd2l0aF9vcHRpbWl6ZSA9IGV4cGVjdGVkX2xvZ3MgKyAoCiAgICAg
ICAgICAgICAiT3B0aW1pemluZyBiYXNlbGluZXMgZm9yIHVzZXJzY3JpcHRzL2Fub3RoZXItdGVz
dC5odG1sLlxuIgogICAgICAgICAgICAgIk9wdGltaXppbmcgYmFzZWxpbmVzIGZvciB1c2Vyc2Ny
aXB0cy9pbWFnZXMuc3ZnLlxuIikKICAgICAgICAgZXhwZWN0ZWRfc3RkZXJyX3dpdGhfb3B0aW1p
emUgPSBleHBlY3RlZF9zdGRlcnIgKyAoCkBAIC0yMTAsNCArMjIwLDQgQEAgTU9DSyBydW5fY29t
bWFuZDogWydlY2hvJywgJ3JlYmFzZWxpbmUtdGVzdCcsICdXZWJraXQgV2luJywgJ3VzZXJzY3Jp
cHRzL2ltYWdlcy4KICAgICAgICAgICAgICJNT0NLIHJ1bl9jb21tYW5kOiBbJ2VjaG8nLCAnb3B0
aW1pemUtYmFzZWxpbmVzJywgJ3VzZXJzY3JpcHRzL2ltYWdlcy5zdmcnXSwgY3dkPS9tb2NrLWNo
ZWNrb3V0XG4iKQogCiAgICAgICAgIGNvbW1hbmQuX3Rlc3RzX3RvX3JlYmFzZWxpbmUgPSBsYW1i
ZGEgcG9ydDogWyd1c2Vyc2NyaXB0cy9hbm90aGVyLXRlc3QuaHRtbCcsICd1c2Vyc2NyaXB0cy9p
bWFnZXMuc3ZnJ10KLSAgICAgICAgT3V0cHV0Q2FwdHVyZSgpLmFzc2VydF9vdXRwdXRzKHNlbGYs
IGNvbW1hbmQuZXhlY3V0ZSwgW01vY2tPcHRpb25zKG9wdGltaXplPVRydWUpLCBbXSwgdG9vbF0s
IGV4cGVjdGVkX3N0ZG91dD1leHBlY3RlZF9zdGRvdXRfd2l0aF9vcHRpbWl6ZSwgZXhwZWN0ZWRf
c3RkZXJyPWV4cGVjdGVkX3N0ZGVycl93aXRoX29wdGltaXplKQorICAgICAgICBPdXRwdXRDYXB0
dXJlKCkuYXNzZXJ0X291dHB1dHMoc2VsZiwgY29tbWFuZC5leGVjdXRlLCBbTW9ja09wdGlvbnMo
b3B0aW1pemU9VHJ1ZSksIFtdLCB0b29sXSwgZXhwZWN0ZWRfbG9ncz1leHBlY3RlZF9sb2dzX3dp
dGhfb3B0aW1pemUsIGV4cGVjdGVkX3N0ZGVycj1leHBlY3RlZF9zdGRlcnJfd2l0aF9vcHRpbWl6
ZSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL2dhcmRl
bmluZ3NlcnZlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL2dhcmRl
bmluZ3NlcnZlci5weQppbmRleCAwOTY2MGY2MDk3N2JjNWUzMmZlOWE4NmVjZDUxMzY4NGU2NDRh
MzBmLi4zNjkwNzA5ODJiOWYxYmYzZGE5NTIzNjYyMzJiYzk4ODg5MTBiYzExIDEwMDY0NAotLS0g
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2VydmVycy9nYXJkZW5pbmdzZXJ2ZXIucHkK
KysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMvZ2FyZGVuaW5nc2VydmVy
LnB5CkBAIC0yMyw2ICsyMyw4IEBACiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKIGltcG9ydCBCYXNlSFRUUFNl
cnZlcgoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBqc29uCiBpbXBvcnQgb3MKIAogZnJvbSB3ZWJr
aXRweS5jb21tb24ubWVtb2l6ZWQgaW1wb3J0IG1lbW9pemVkCkBAIC0zMyw2ICszNSw5IEBAIGZy
b20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLm1vZGVscy50ZXN0X2NvbmZpZ3VyYXRpb24gaW1wb3J0
IFRlc3RDb25maWd1cmF0aW9uQ29uCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGlt
cG9ydCBidWlsZGVycwogCiAKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKKwor
CiBjbGFzcyBCdWlsZENvdmVyYWdlRXh0cmFwb2xhdG9yKG9iamVjdCk6CiAgICAgZGVmIF9faW5p
dF9fKHNlbGYsIHRlc3RfY29uZmlndXJhdGlvbl9jb252ZXJ0ZXIpOgogICAgICAgICBzZWxmLl90
ZXN0X2NvbmZpZ3VyYXRpb25fY29udmVydGVyID0gdGVzdF9jb25maWd1cmF0aW9uX2NvbnZlcnRl
cgpAQCAtMTcxLDE1ICsxNzYsNDMgQEAgY2xhc3MgR2FyZGVuaW5nSFRUUFJlcXVlc3RIYW5kbGVy
KFJlZmxlY3Rpb25IYW5kbGVyKToKICAgICAgICAgICAgICAgICBidWlsZGVyc190b19mYWxsYmFj
a19wYXRoc1tidWlsZGVyXSA9IGZhbGxiYWNrX3BhdGgKICAgICAgICAgcmV0dXJuIGJ1aWxkZXJz
X3RvX2ZhbGxiYWNrX3BhdGhzLmtleXMoKQogCi0gICAgZGVmIHJlYmFzZWxpbmVhbGwoc2VsZik6
Ci0gICAgICAgICMgRklYTUU6IE9wdGltaXplIHRoaXMgdG8gcnVuIGluIHBhcmFsbGVsLCBjYWNo
ZSB6aXBzLCBldGMuCi0gICAgICAgIHRlc3RfbGlzdCA9IHNlbGYuX3JlYWRfZW50aXR5X2JvZHlf
YXNfanNvbigpCisgICAgZGVmIF9yZWJhc2VsaW5lX2NvbW1hbmRzKHNlbGYsIHRlc3RfbGlzdCk6
CisgICAgICAgIHBhdGhfdG9fd2Via2l0X3BhdGNoID0gc2VsZi5zZXJ2ZXIudG9vbC5wYXRoKCkK
KyAgICAgICAgY3dkID0gc2VsZi5zZXJ2ZXIudG9vbC5zY20oKS5jaGVja291dF9yb290CisgICAg
ICAgIGNvbW1hbmRzID0gW10KKyAgICAgICAgZm9yIHRlc3QgaW4gdGVzdF9saXN0OgorICAgICAg
ICAgICAgZm9yIGJ1aWxkZXIgaW4gc2VsZi5fYnVpbGRlcnNfdG9fZmV0Y2hfZnJvbSh0ZXN0X2xp
c3RbdGVzdF0pOgorICAgICAgICAgICAgICAgIHN1ZmZpeGVzID0gJywnLmpvaW4odGVzdF9saXN0
W3Rlc3RdW2J1aWxkZXJdKQorICAgICAgICAgICAgICAgIGNtZF9saW5lID0gW3BhdGhfdG9fd2Vi
a2l0X3BhdGNoLCAncmViYXNlbGluZS10ZXN0JywgJy0tcHJpbnQtc2NtLWNoYW5nZXMnLCAnLS1z
dWZmaXhlcycsIHN1ZmZpeGVzLCBidWlsZGVyLCB0ZXN0XQorICAgICAgICAgICAgICAgIGNvbW1h
bmRzLmFwcGVuZCh0dXBsZShbY21kX2xpbmUsIGN3ZF0pKQorICAgICAgICByZXR1cm4gY29tbWFu
ZHMKKworICAgIGRlZiBfZmlsZXNfdG9fYWRkKHNlbGYsIGNvbW1hbmRfcmVzdWx0cyk6CisgICAg
ICAgIGZpbGVzX3RvX2FkZCA9IHNldCgpCisgICAgICAgIGZvciBvdXRwdXQgaW4gW3Jlc3VsdFsx
XSBmb3IgcmVzdWx0IGluIGNvbW1hbmRfcmVzdWx0c106CisgICAgICAgICAgICB0cnk6CisgICAg
ICAgICAgICAgICAgZmlsZXNfdG9fYWRkLnVwZGF0ZShqc29uLmxvYWRzKG91dHB1dClbJ2FkZCdd
KQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IsIGU6CisgICAgICAgICAgICAgICAgX2xv
Zy53YXJuaW5nKCciJXMiIGlzIG5vdCBhIEpTT04gb2JqZWN0LCBpZ25vcmluZycgJSBvdXRwdXQp
CisKKyAgICAgICAgcmV0dXJuIGxpc3QoZmlsZXNfdG9fYWRkKQorCisgICAgZGVmIF9vcHRpbWl6
ZV9iYXNlbGluZXMoc2VsZiwgdGVzdF9saXN0KToKKyAgICAgICAgIyBXZSBkb24ndCBydW4gdGhp
cyBpbiBwYXJhbGxlbCBiZWNhdXNlIG1vZGlmeWluZyB0aGUgU0NNIGluIHBhcmFsbGVsIGlzIHVu
cmVsaWFibGUuCiAgICAgICAgIGZvciB0ZXN0IGluIHRlc3RfbGlzdDoKICAgICAgICAgICAgIGFs
bF9zdWZmaXhlcyA9IHNldCgpCi0gICAgICAgICAgICBidWlsZGVycyA9IHNlbGYuX2J1aWxkZXJz
X3RvX2ZldGNoX2Zyb20odGVzdF9saXN0W3Rlc3RdKQotICAgICAgICAgICAgZm9yIGJ1aWxkZXIg
aW4gYnVpbGRlcnM6Ci0gICAgICAgICAgICAgICAgc3VmZml4ZXMgPSB0ZXN0X2xpc3RbdGVzdF1b
YnVpbGRlcl0KLSAgICAgICAgICAgICAgICBhbGxfc3VmZml4ZXMudXBkYXRlKHN1ZmZpeGVzKQot
ICAgICAgICAgICAgICAgIHNlbGYuX3J1bl93ZWJraXRfcGF0Y2goWydyZWJhc2VsaW5lLXRlc3Qn
LCAnLS1zdWZmaXhlcycsICcsJy5qb2luKHN1ZmZpeGVzKSwgYnVpbGRlciwgdGVzdF0pCisgICAg
ICAgICAgICBmb3IgYnVpbGRlciBpbiBzZWxmLl9idWlsZGVyc190b19mZXRjaF9mcm9tKHRlc3Rf
bGlzdFt0ZXN0XSk6CisgICAgICAgICAgICAgICAgYWxsX3N1ZmZpeGVzLnVwZGF0ZSh0ZXN0X2xp
c3RbdGVzdF1bYnVpbGRlcl0pCiAgICAgICAgICAgICBzZWxmLl9ydW5fd2Via2l0X3BhdGNoKFsn
b3B0aW1pemUtYmFzZWxpbmVzJywgJy0tc3VmZml4ZXMnLCAnLCcuam9pbihhbGxfc3VmZml4ZXMp
LCB0ZXN0XSkKKworICAgIGRlZiByZWJhc2VsaW5lYWxsKHNlbGYpOgorICAgICAgICB0ZXN0X2xp
c3QgPSBzZWxmLl9yZWFkX2VudGl0eV9ib2R5X2FzX2pzb24oKQorCisgICAgICAgIGNvbW1hbmRz
ID0gc2VsZi5fcmViYXNlbGluZV9jb21tYW5kcyh0ZXN0X2xpc3QpCisgICAgICAgIGNvbW1hbmRf
cmVzdWx0cyA9IHNlbGYuc2VydmVyLnRvb2wuZXhlY3V0aXZlLnJ1bl9pbl9wYXJhbGxlbChjb21t
YW5kcykKKworICAgICAgICBmaWxlc190b19hZGQgPSBzZWxmLl9maWxlc190b19hZGQoY29tbWFu
ZF9yZXN1bHRzKQorICAgICAgICBzZWxmLnNlcnZlci50b29sLnNjbSgpLmFkZF9saXN0KGxpc3Qo
ZmlsZXNfdG9fYWRkKSkKKworICAgICAgICBzZWxmLl9vcHRpbWl6ZV9iYXNlbGluZXModGVzdF9s
aXN0KQogICAgICAgICBzZWxmLl9zZXJ2ZV90ZXh0KCdzdWNjZXNzJykKZGlmZiAtLWdpdCBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL2dhcmRlbmluZ3NlcnZlcl91bml0dGVz
dC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zZXJ2ZXJzL2dhcmRlbmluZ3NlcnZl
cl91bml0dGVzdC5weQppbmRleCBlMTc5OGY2NWViYjI2NTA0ZWQ3ZjZiZWY2NzYzYTcxMTkzMjZh
MWVkLi5mYjIyNDYzZGE5OGFkOTc4YTljZjQ2Y2Q1NDAzZDE0Mzk0NjJlNzM0IDEwMDY0NAotLS0g
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc2VydmVycy9nYXJkZW5pbmdzZXJ2ZXJfdW5p
dHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3NlcnZlcnMvZ2FyZGVu
aW5nc2VydmVyX3VuaXR0ZXN0LnB5CkBAIC0yNyw2ICsyNyw3IEBACiAjIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAK
IGltcG9ydCBqc29uCitpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSB3ZWJraXRw
eS5jb21tb24uc3lzdGVtLm91dHB1dGNhcHR1cmUgaW1wb3J0IE91dHB1dENhcHR1cmUKQEAgLTE3
MCw4ICsxNzEsOCBAQCBjbGFzcyBHYXJkZW5pbmdFeHBlY3RhdGlvbnNVcGRhdGVyVGVzdCh1bml0
dGVzdC5UZXN0Q2FzZSk6CiAKIAogY2xhc3MgR2FyZGVuaW5nU2VydmVyVGVzdCh1bml0dGVzdC5U
ZXN0Q2FzZSk6Ci0gICAgZGVmIF9wb3N0X3RvX3BhdGgoc2VsZiwgcGF0aCwgYm9keT1Ob25lLCBl
eHBlY3RlZF9zdGRlcnI9Tm9uZSwgZXhwZWN0ZWRfc3Rkb3V0PU5vbmUpOgotICAgICAgICBoYW5k
bGVyID0gVGVzdEdhcmRlbmluZ0hUVFBSZXF1ZXN0SGFuZGxlcihNb2NrU2VydmVyKCkpCisgICAg
ZGVmIF9wb3N0X3RvX3BhdGgoc2VsZiwgcGF0aCwgYm9keT1Ob25lLCBleHBlY3RlZF9zdGRlcnI9
Tm9uZSwgZXhwZWN0ZWRfc3Rkb3V0PU5vbmUsIHNlcnZlcj1Ob25lKToKKyAgICAgICAgaGFuZGxl
ciA9IFRlc3RHYXJkZW5pbmdIVFRQUmVxdWVzdEhhbmRsZXIoc2VydmVyIG9yIE1vY2tTZXJ2ZXIo
KSkKICAgICAgICAgaGFuZGxlci5wYXRoID0gcGF0aAogICAgICAgICBoYW5kbGVyLmJvZHkgPSBi
b2R5CiAgICAgICAgIE91dHB1dENhcHR1cmUoKS5hc3NlcnRfb3V0cHV0cyhzZWxmLCBoYW5kbGVy
LmRvX1BPU1QsIGV4cGVjdGVkX3N0ZGVycj1leHBlY3RlZF9zdGRlcnIsIGV4cGVjdGVkX3N0ZG91
dD1leHBlY3RlZF9zdGRvdXQpCkBAIC0xODYsOSArMTg3LDE4IEBAIGNsYXNzIEdhcmRlbmluZ1Nl
cnZlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAgICAgIk1PQ0sgYnVpbGRlciI6
IHsicG9ydF9uYW1lIjogInRlc3QtbWFjLWxlb3BhcmQiLCAic3BlY2lmaWVycyI6IHNldChbIm1v
Y2stc3BlY2lmaWVyIl0pfSwKICAgICAgICAgICAgICJNT0NLIGJ1aWxkZXIgKERlYnVnKSI6IHsi
cG9ydF9uYW1lIjogInRlc3QtbWFjLWxlb3BhcmQiLCAic3BlY2lmaWVycyI6IHNldChbIm1vY2st
c3BlY2lmaWVyIiwgImRlYnVnIl0pfSwKICAgICAgICAgfQotICAgICAgICBleHBlY3RlZF9zdGRl
cnIgPSAiTU9DSyBydW5fY29tbWFuZDogWydlY2hvJywgJ3JlYmFzZWxpbmUtdGVzdCcsICctLXN1
ZmZpeGVzJywgdSclcycsIHUnJXMnLCB1J3VzZXItc2NyaXB0cy9hbm90aGVyLXRlc3QuaHRtbCdd
LCBjd2Q9L21vY2stY2hlY2tvdXRcbk1PQ0sgcnVuX2NvbW1hbmQ6IFsnZWNobycsICdvcHRpbWl6
ZS1iYXNlbGluZXMnLCAnLS1zdWZmaXhlcycsIHUnJXMnLCB1J3VzZXItc2NyaXB0cy9hbm90aGVy
LXRlc3QuaHRtbCddLCBjd2Q9L21vY2stY2hlY2tvdXRcbiIKKyAgICAgICAgZXhwZWN0ZWRfc3Rk
ZXJyID0gIk1PQ0sgcnVuX2NvbW1hbmQ6IFsnZWNobycsICdyZWJhc2VsaW5lLXRlc3QnLCAnLS1w
cmludC1zY20tY2hhbmdlcycsICctLXN1ZmZpeGVzJywgdSclcycsIHUnJXMnLCB1J3VzZXItc2Ny
aXB0cy9hbm90aGVyLXRlc3QuaHRtbCddLCBjd2Q9L21vY2stY2hlY2tvdXRcbk1PQ0sgcnVuX2Nv
bW1hbmQ6IFsnZWNobycsICdvcHRpbWl6ZS1iYXNlbGluZXMnLCAnLS1zdWZmaXhlcycsIHUnJXMn
LCB1J3VzZXItc2NyaXB0cy9hbm90aGVyLXRlc3QuaHRtbCddLCBjd2Q9L21vY2stY2hlY2tvdXRc
biIKICAgICAgICAgZXhwZWN0ZWRfc3Rkb3V0ID0gIj09IEJlZ2luIFJlc3BvbnNlID09XG5zdWNj
ZXNzXG49PSBFbmQgUmVzcG9uc2UgPT1cbiIKLSAgICAgICAgc2VsZi5fcG9zdF90b19wYXRoKCIv
cmViYXNlbGluZWFsbCIsIGJvZHk9J3sidXNlci1zY3JpcHRzL2Fub3RoZXItdGVzdC5odG1sIjp7
Ik1PQ0sgYnVpbGRlciI6IFsidHh0IiwicG5nIl19fScsIGV4cGVjdGVkX3N0ZGVycj1leHBlY3Rl
ZF9zdGRlcnIgJSAoJ3R4dCxwbmcnLCAnTU9DSyBidWlsZGVyJywgJ3R4dCxwbmcnKSwgZXhwZWN0
ZWRfc3Rkb3V0PWV4cGVjdGVkX3N0ZG91dCkKKyAgICAgICAgc2VydmVyID0gTW9ja1NlcnZlcigp
CisKKyAgICAgICAgc2VsZi5vdXRwdXQgPSBbJ3siYWRkIjogW10sICJybSI6IFtdfScsICcnXQor
CisgICAgICAgIGRlZiBydW5fY29tbWFuZChhcmdzLCBjd2Q9Tm9uZSwgKiprd2FyZ3MpOgorICAg
ICAgICAgICAgcHJpbnQgPj4gc3lzLnN0ZGVyciwgIk1PQ0sgcnVuX2NvbW1hbmQ6ICVzLCBjd2Q9
JXMiICUgKGFyZ3MsIGN3ZCkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLm91dHB1dC5wb3AoMCkK
KworICAgICAgICBzZXJ2ZXIudG9vbC5leGVjdXRpdmUucnVuX2NvbW1hbmQgPSBydW5fY29tbWFu
ZAorICAgICAgICBzZWxmLl9wb3N0X3RvX3BhdGgoIi9yZWJhc2VsaW5lYWxsIiwgYm9keT0neyJ1
c2VyLXNjcmlwdHMvYW5vdGhlci10ZXN0Lmh0bWwiOnsiTU9DSyBidWlsZGVyIjogWyJ0eHQiLCJw
bmciXX19JywgZXhwZWN0ZWRfc3RkZXJyPWV4cGVjdGVkX3N0ZGVyciAlICgndHh0LHBuZycsICdN
T0NLIGJ1aWxkZXInLCAndHh0LHBuZycpLCBleHBlY3RlZF9zdGRvdXQ9ZXhwZWN0ZWRfc3Rkb3V0
LCBzZXJ2ZXI9c2VydmVyKQogCiAgICAgICAgIHNlbGYuX3Bvc3RfdG9fcGF0aCgiL3JlYmFzZWxp
bmVhbGwiLCBib2R5PSd7InVzZXItc2NyaXB0cy9hbm90aGVyLXRlc3QuaHRtbCI6eyJNT0NLIGJ1
aWxkZXIgKERlYnVnKSI6IFsidHh0IiwicG5nIl19fScsIGV4cGVjdGVkX3N0ZGVycj1leHBlY3Rl
ZF9zdGRlcnIgJSAoJ3R4dCxwbmcnLCAnTU9DSyBidWlsZGVyIChEZWJ1ZyknLCAndHh0LHBuZycp
LCBleHBlY3RlZF9zdGRvdXQ9ZXhwZWN0ZWRfc3Rkb3V0KQogCg==
</data>
<flag name="review"
          id="150951"
          type_id="1"
          status="+"
          setter="ojan"
    />
          </attachment>
      

    </bug>

</bugzilla>