<?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>51451</bug_id>
          
          <creation_ts>2010-12-21 23:02:01 -0800</creation_ts>
          <short_desc>check-webkit-style should be able to parse function declaration parameters.</short_desc>
          <delta_ts>2010-12-26 14:18:49 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>49394</blocked>
    
    <blocked>51523</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="David Levin">levin</reporter>
          <assigned_to name="David Levin">levin</assigned_to>
          <cc>abarth</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric</cc>
    
    <cc>hamaji</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>325398</commentid>
    <comment_count>0</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-12-21 23:02:01 -0800</bug_when>
    <thetext>See summary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325399</commentid>
    <comment_count>1</comment_count>
      <attachid>77192</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-12-21 23:04:04 -0800</bug_when>
    <thetext>Created attachment 77192
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325413</commentid>
    <comment_count>2</comment_count>
      <attachid>77192</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-12-22 00:32:23 -0800</bug_when>
    <thetext>Comment on attachment 77192
Patch

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

&gt; Tools/Scripts/webkitpy/style/checkers/cpp.py:371
&gt; +        # to ensure only the parameters remain without the surrounding paranthesis.

typo: paranthesis

&gt; Tools/Scripts/webkitpy/style/checkers/cpp.py:1322
&gt; +

extra blank line</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325804</commentid>
    <comment_count>3</comment_count>
      <attachid>77192</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-12-22 17:09:42 -0800</bug_when>
    <thetext>Comment on attachment 77192
Patch

Making some improvements.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325810</commentid>
    <comment_count>4</comment_count>
      <attachid>77282</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-12-22 17:19:42 -0800</bug_when>
    <thetext>Created attachment 77282
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325811</commentid>
    <comment_count>5</comment_count>
      <attachid>77283</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-12-22 17:20:43 -0800</bug_when>
    <thetext>Created attachment 77283
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325812</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-22 17:20:53 -0800</bug_when>
    <thetext>Attachment 77282 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Tools/ChangeLog&apos;, u&apos;Tools/Scripts/webkitpy/style/checkers/cpp.py&apos;, u&apos;Tools/Scripts/webkitpy/style/checkers/cpp_unittest.py&apos;]&quot; exit_code: 1
Tools/Scripts/webkitpy/style/checkers/cpp.py:391:  whitespace before &apos;)&apos;  [pep8/E202] [5]
Total errors found: 1 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325909</commentid>
    <comment_count>7</comment_count>
      <attachid>77308</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-12-22 23:35:37 -0800</bug_when>
    <thetext>Created attachment 77308
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325977</commentid>
    <comment_count>8</comment_count>
      <attachid>77308</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-23 01:18:01 -0800</bug_when>
    <thetext>Comment on attachment 77308
Patch

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

Should we have a separate helper class for this? Seems like a lot of logic.  Or at least we could break thsi huge new function down into smaller parts.

&gt; Tools/Scripts/webkitpy/style/checkers/cpp.py:352
&gt; +    def get_parameter_list(self):

Do we really use get in names?

This function is also huge :((</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326096</commentid>
    <comment_count>9</comment_count>
      <attachid>77308</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-12-23 08:39:48 -0800</bug_when>
    <thetext>Comment on attachment 77308
Patch

Need to address comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326405</commentid>
    <comment_count>10</comment_count>
      <attachid>77391</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-12-23 18:11:41 -0800</bug_when>
    <thetext>Created attachment 77391
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326408</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-23 18:13:41 -0800</bug_when>
    <thetext>Attachment 77391 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Tools/ChangeLog&apos;, u&apos;Tools/Scripts/webkitpy/style/checkers/cpp.py&apos;, u&apos;Tools/Scripts/webkitpy/style/checkers/cpp_unittest.py&apos;]&quot; exit_code: 1
Tools/Scripts/webkitpy/style/checkers/cpp.py:310:  expected 2 blank lines, found 1  [pep8/E302] [5]
Total errors found: 1 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326413</commentid>
    <comment_count>12</comment_count>
      <attachid>77394</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-12-23 18:16:55 -0800</bug_when>
    <thetext>Created attachment 77394
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326414</commentid>
    <comment_count>13</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-12-23 18:20:34 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Attachment 77391 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Tools/ChangeLog&apos;, u&apos;Tools/Scripts/webkitpy/style/checkers/cpp.py&apos;, u&apos;Tools/Scripts/webkitpy/style/checkers/cpp_unittest.py&apos;]&quot; exit_code: 1
&gt; Tools/Scripts/webkitpy/style/checkers/cpp.py:310:  expected 2 blank lines, found 1  [pep8/E302] [5]
&gt; Total errors found: 1 in 3 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against check-webkit-style.

I should change the webkit-patch upload to warn you if you have local changes that aren&apos;t in the change or something like that :( (The style step warned me. I fixed it and then uploaded without committing first.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326415</commentid>
    <comment_count>14</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-12-23 18:21:02 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 77308 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=77308&amp;action=review
&gt; 
&gt; Should we have a separate helper class for this? Seems like a lot of logic.  Or at least we could break thsi huge new function down into smaller parts.
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/style/checkers/cpp.py:352
&gt; &gt; +    def get_parameter_list(self):
&gt; 
&gt; Do we really use get in names?

Oops. fixed.

&gt; This function is also huge :((

If you think things are still too huge or not understand, let me know and I&apos;ll work to make it better.

At least, it looks a lot better than before to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326422</commentid>
    <comment_count>15</comment_count>
      <attachid>77394</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-23 18:43:59 -0800</bug_when>
    <thetext>Comment on attachment 77394
Patch

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

I don&apos;t fully understand this, but I&apos;m also willing to rs=me.  This is definitely a very cool addition to our style-checker.

You might consider making it a generator instead.  It would simplify the code ever-so-slightly due to not needing current or current_parameter.

I guess the main part I don&apos;t undestand is PameterIterator.__init__

Tentative r+, but I&apos;d also happily go another round if you have it in you. :)

&gt; Tools/Scripts/webkitpy/style/checkers/cpp.py:322
&gt; +    def __init__(self, clean_lines, parameters_start, parameters_end):

I assume start/end are offsets in a string?

&gt; Tools/Scripts/webkitpy/style/checkers/cpp.py:327
&gt; +        # Form a single string with all parameters. Trimming the first and last lines
&gt; +        # to ensure only the parameters remain without the surrounding parenthesis.
&gt; +        parameters_lines = clean_lines.elided[self._starting_line:parameters_end[0] + 1]
&gt; +        parameters_lines[-1] = parameters_lines[-1][:parameters_end[1] - 1]

I&apos;m confused as to what this does? parameters_lines[-1] = parameters_lines[-1]?

&gt; Tools/Scripts/webkitpy/style/checkers/cpp.py:329
&gt; +        # Form a single string with all parameters. Trimming the first and last lines
&gt; +        # to ensure only the parameters remain without the surrounding parenthesis.
&gt; +        parameters_lines = clean_lines.elided[self._starting_line:parameters_end[0] + 1]
&gt; +        parameters_lines[-1] = parameters_lines[-1][:parameters_end[1] - 1]
&gt;  
&gt;  
&gt; +        parameters_lines[0] = parameters_lines[0][parameters_start[1] + 1:]
&gt; +        self._all_parameters = &apos; &apos;.join(parameters_lines)

This could be a separate function and unit tested.

&gt; Tools/Scripts/webkitpy/style/checkers/cpp.py:402
&gt; +        self._skeleton_parameters = skeleton_parameters

Cleaner woudl be to just return the skeleton parameters here and initialize the self. in teh caller.

Then this is also much easier to unit test.  Would be nice to see some unit tests for this function. :)

&gt; Tools/Scripts/webkitpy/style/checkers/cpp.py:449
&gt; +            parameter_parser = ParameterIterator(self._clean_lines, self.parameter_start, self.parameter_end)
&gt; +            while parameter_parser.next():

The python way would be a generator instead of an explicit current function. :)
http://docs.python.org/tutorial/classes.html#generators

But this is also fine as-is. :)

Then you would just do parameter_list(self._clean_lines, ...) and that would be it.  You could wrap it in tuple() if you wanted to convert it all at once.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326424</commentid>
    <comment_count>16</comment_count>
      <attachid>77394</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-12-23 18:46:00 -0800</bug_when>
    <thetext>Comment on attachment 77394
Patch

I&apos;ll address feedback and do another round.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326440</commentid>
    <comment_count>17</comment_count>
      <attachid>77394</attachid>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2010-12-23 19:28:24 -0800</bug_when>
    <thetext>Comment on attachment 77394
Patch

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

A few more comments in addition to Eric&apos;s.

&gt; Tools/Scripts/webkitpy/style/checkers/cpp.py:313
&gt; +    def __init__(self, parameter, type_name_index, line_number):

Is the type_name_index good name? I guess parameter_name_index would be better.

&gt; Tools/Scripts/webkitpy/style/checkers/cpp.py:316
&gt; +        self.name = sub(r&apos;=.*&apos;, &apos;&apos;, parameter[type_name_index:]).strip()

Do we need this line? It looks like line 386 is doing this job already.

&gt; Tools/Scripts/webkitpy/style/checkers/cpp.py:399
&gt; +        if skeleton_parameters.strip():

I couldn&apos;t understand the intention of this if-clause at first. We might want a comment for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326867</commentid>
    <comment_count>18</comment_count>
      <attachid>77451</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-12-26 00:42:17 -0800</bug_when>
    <thetext>Created attachment 77451
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326889</commentid>
    <comment_count>19</comment_count>
      <attachid>77456</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-12-26 09:26:34 -0800</bug_when>
    <thetext>Created attachment 77456
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326890</commentid>
    <comment_count>20</comment_count>
      <attachid>77456</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-12-26 09:27:39 -0800</bug_when>
    <thetext>Comment on attachment 77456
Patch

I believe that all feedback has been addressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326891</commentid>
    <comment_count>21</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-12-26 09:30:08 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 77394 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=77394&amp;action=review

&gt; &gt; Tools/Scripts/webkitpy/style/checkers/cpp.py:316
&gt; &gt; +        self.name = sub(r&apos;=.*&apos;, &apos;&apos;, parameter[type_name_index:]).strip()
&gt; 
&gt; Do we need this line? It looks like line 386 is doing this job already.

True. Line 386 did the same thing but that was for the purpose of creating the skeleton parameters. This is operating on the original parameters. At this point, the code operates on the original parameters in order to extra the names without the modifications done during the process of creating skeleton parameters. (Of course this part of the change was still useful.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326901</commentid>
    <comment_count>22</comment_count>
      <attachid>77456</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-26 11:25:30 -0800</bug_when>
    <thetext>Comment on attachment 77456
Patch

OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326905</commentid>
    <comment_count>23</comment_count>
      <attachid>77456</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-26 12:28:04 -0800</bug_when>
    <thetext>Comment on attachment 77456
Patch

Clearing flags on attachment: 77456

Committed r74670: &lt;http://trac.webkit.org/changeset/74670&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326906</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-26 12:28:12 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326925</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-26 14:18:49 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/74670 might have broken GTK Linux 32-bit Release
The following tests are not passing:
media/controls-strict.html</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77192</attachid>
            <date>2010-12-21 23:04:04 -0800</date>
            <delta_ts>2010-12-22 17:19:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51451-20101221230403.patch</filename>
            <type>text/plain</type>
            <size>12064</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAxNjIz
OTc0N2MxODhkMDExNzU1YTMwODAxODg0M2ZjYmVlZTRhNjFlLi44MTgyMzdiNGU3Y2YxMjMyZjdj
M2M5MzllNTQzNGQzOGEwYWZiZTJhIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTAtMTItMjEgIERhdmlkIExldmlu
ICA8bGV2aW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIGNoZWNrLXdlYmtpdC1zdHlsZSBzaG91bGQgYmUgYWJsZSB0byBwYXJz
ZSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBwYXJhbWV0ZXJzLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE0NTEKKworICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwLnB5OgorICAgICAgICAoX0Z1bmN0aW9uU3RhdGUuYmVn
aW4pOiBBZGRlZCBpbmZvcm1hdGlvbiB0byBhbGxvdyBkZXRlcm1pbmluZyB0aGUgcGFyYW1ldGVy
cworICAgICAgICBvbiBkZW1hbmQuCisgICAgICAgIChfRnVuY3Rpb25TdGF0ZS5nZXRfcGFyYW1l
dGVyX2xpc3QpOiBSZXR1cm5zIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXJzLgorICAgICAgICAoX0Z1
bmN0aW9uU3RhdGUuZ2V0X3BhcmFtZXRlcl9saXN0LnBhcnNlX3BhcmFtZXRlcl90eXBlX2FuZF9u
YW1lKTogTmVzdGVkCisgICAgICAgIGZ1bmN0aW9uIHdoaWNoIHBhcnNlcyBhIHNpbmdsZSBwYXJh
bWV0ZXIgaW50byBhIHR5cGUgYW5kIG5hbWUuCisgICAgICAgIChkZXRlY3RfZnVuY3Rpb25zKTog
RGV0ZXJtaW5lIHdoZXJlIHRoZSBwYXJhbWV0ZXJzIGVuZCBhbmQgcGFzcyB0aGF0IHRvCisgICAg
ICAgIF9GdW5jdGlvblN0YXRlLmJlZ2luLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5
bGUvY2hlY2tlcnMvY3BwX3VuaXR0ZXN0LnB5OgorICAgICAgICAoRnVuY3Rpb25EZXRlY3Rpb25U
ZXN0LnBlcmZvcm1fZnVuY3Rpb25fZGV0ZWN0aW9uKTogUmV0dXJuIHRoZSBmdW5jdGlvbiBzdGF0
ZQorICAgICAgICBzbyB0aGF0IHRoZSBjYWxsZXIgbWF5IHVzZSBpdCB0byBkbyBtb3JlIHRlc3Rz
LgorICAgICAgICAoRnVuY3Rpb25EZXRlY3Rpb25UZXN0LnRlc3RfcGFyYW1ldGVyX2xpc3QpOiBB
ZGRlZCB0ZXN0cyB0byB2ZXJpZnkgdGhlIHBhcmFtZXRlciBwYXJzaW5nLgorICAgICAgICAoQ2hl
Y2tGb3JGdW5jdGlvbkxlbmd0aHNUZXN0LnRlc3RfZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2RlZmlu
aXRpb25fc2V2ZXJpdHkxX2Zvcl9iYWRfdGVzdF9kb2VzbnRfYnJlYWspOiBSZW1vdmVkCisgICAg
ICAgIGJlY2F1c2UgdGhlIGVycm9yLiBUaGUgdGVzdCBpcyBhYm91dCB0aGUgYmFkIGZ1bmN0aW9u
IG5hbWUuIEZpeGluZyB0aGUgbmFtZSBtYWtlcyB0aGUgdGVzdCBleGFjdGx5IGxpa2UKKyAgICAg
ICAgdGVzdF9mdW5jdGlvbl9sZW5ndGhfY2hlY2tfZGVmaW5pdGlvbl9zZXZlcml0eTFfZm9yX3Rl
c3QuCisKIDIwMTAtMTItMjAgIERhdmlkIExldmluICA8bGV2aW5AY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IFNoaW5pY2hpcm8gSGFtYWppLgpkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy9jcHAucHkgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcC5weQppbmRleCAzZmZhZWI5ZGY0N2ZlNGM0ODg3MmJh
MTM2MzdiZGY2NThkNGYwMzBkLi4wNzNhNDExNGQ2YzExZjYxOGRhNjI3YjhiZTRmMzFkZmIyMzk5
YmExIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2Nw
cC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcC5weQpA
QCAtMzI5LDcgKzMyOSw3IEBAIGNsYXNzIF9GdW5jdGlvblN0YXRlKG9iamVjdCk6CiAgICAgICAg
IHNlbGYuYm9keV9zdGFydF9saW5lX251bWJlciA9IC0xMDAwCiAgICAgICAgIHNlbGYuZW5kaW5n
X2xpbmVfbnVtYmVyID0gLTEwMDAKIAotICAgIGRlZiBiZWdpbihzZWxmLCBmdW5jdGlvbl9uYW1l
LCBib2R5X3N0YXJ0X2xpbmVfbnVtYmVyLCBlbmRpbmdfbGluZV9udW1iZXIsIGlzX2RlY2xhcmF0
aW9uKToKKyAgICBkZWYgYmVnaW4oc2VsZiwgZnVuY3Rpb25fbmFtZSwgYm9keV9zdGFydF9saW5l
X251bWJlciwgZW5kaW5nX2xpbmVfbnVtYmVyLCBpc19kZWNsYXJhdGlvbiwgcGFyYW1ldGVyX3N0
YXJ0LCBwYXJhbWV0ZXJfZW5kLCBjbGVhbl9saW5lcyk6CiAgICAgICAgICIiIlN0YXJ0IGFuYWx5
emluZyBmdW5jdGlvbiBib2R5LgogCiAgICAgICAgIEFyZ3M6CkBAIC0zNDQsNiArMzQ0LDgzIEBA
IGNsYXNzIF9GdW5jdGlvblN0YXRlKG9iamVjdCk6CiAgICAgICAgIHNlbGYuYm9keV9zdGFydF9s
aW5lX251bWJlciA9IGJvZHlfc3RhcnRfbGluZV9udW1iZXIKICAgICAgICAgc2VsZi5lbmRpbmdf
bGluZV9udW1iZXIgPSBlbmRpbmdfbGluZV9udW1iZXIKICAgICAgICAgc2VsZi5pc19kZWNsYXJh
dGlvbiA9IGlzX2RlY2xhcmF0aW9uCisgICAgICAgIHNlbGYucGFyYW1ldGVyX3N0YXJ0ID0gcGFy
YW1ldGVyX3N0YXJ0CisgICAgICAgIHNlbGYucGFyYW1ldGVyX2VuZCA9IHBhcmFtZXRlcl9lbmQK
KyAgICAgICAgc2VsZi5fcGFyYW1ldGVyX2xpc3QgPSBOb25lCisgICAgICAgIHNlbGYuX2NsZWFu
X2xpbmVzID0gY2xlYW5fbGluZXMKKworICAgIGRlZiBnZXRfcGFyYW1ldGVyX2xpc3Qoc2VsZik6
CisgICAgICAgIGlmIHNlbGYuX3BhcmFtZXRlcl9saXN0OgorICAgICAgICAgICAgcmV0dXJuIHNl
bGYuX3BhcmFtZXRlcl9saXN0CisKKyAgICAgICAgZGVmIHBhcnNlX3BhcmFtZXRlcl90eXBlX2Fu
ZF9uYW1lKGFsbF9wYXJhbWV0ZXJzLCBzaW1wbGlmaWVkX3BhcmFtZXRlcnMsIHN0YXJ0X2luZGV4
LCBlbmRfaW5kZXgpOgorICAgICAgICAgICAgY3VycmVudF9wYXJhbWV0ZXIgPSBhbGxfcGFyYW1l
dGVyc1tzdGFydF9pbmRleDplbmRfaW5kZXhdCisgICAgICAgICAgICBjdXJyZW50X3NpbXBsaWZp
ZWRfcGFyYW1ldGVyID0gc2ltcGxpZmllZF9wYXJhbWV0ZXJzW3N0YXJ0X2luZGV4OmVuZF9pbmRl
eF0KKworICAgICAgICAgICAgIyBUaGUgZmlyc3Qgc3BhY2UgZnJvbSB0aGUgcmlnaHQgaW4gdGhl
IHNpbXBsaWZpZWQgcGFyYW1ldGVyIGlzIHdoZXJlIHRoZSBwYXJhbWV0ZXIgbmFtZSBzdGFydC4K
KyAgICAgICAgICAgIGJlZm9yZV90eXBlX25hbWVfaW5kZXggPSBjdXJyZW50X3NpbXBsaWZpZWRf
cGFyYW1ldGVyLnJzdHJpcCgpLnJmaW5kKCIgIikKKyAgICAgICAgICAgIGlmIGJlZm9yZV90eXBl
X25hbWVfaW5kZXggPT0gLTE6CisgICAgICAgICAgICAgICAgYmVmb3JlX3R5cGVfbmFtZV9pbmRl
eCA9IGxlbihjdXJyZW50X3BhcmFtZXRlcikKKyAgICAgICAgICAgIHBhcmFtX3R5cGUgPSBjdXJy
ZW50X3BhcmFtZXRlcls6YmVmb3JlX3R5cGVfbmFtZV9pbmRleF0uc3RyaXAoKQorCisgICAgICAg
ICAgICAjIFJlbW92ZSBldmVyeXRoaW5nIGFmdGVyIGEgPSBpbiB0aGUgcGFyYW1ldGVyIG5hbWUg
KGUuZyAiaW50IGkgPSBpbnQoNSkiKS4KKyAgICAgICAgICAgIHBhcmFtX25hbWUgPSBzdWIocic9
LionLCAnJywgY3VycmVudF9wYXJhbWV0ZXJbYmVmb3JlX3R5cGVfbmFtZV9pbmRleCArIDE6XSku
c3RyaXAoKQorICAgICAgICAgICAgcmV0dXJuIChwYXJhbV90eXBlLCBwYXJhbV9uYW1lKQorCisg
ICAgICAgICMgRm9ybSBhIHNpbmdsZSBzdHJpbmcgd2l0aCBhbGwgcGFyYW1ldGVycy4gVHJpbW1p
bmcgdGhlIGZpcnN0IGFuZCBsYXN0IGxpbmVzCisgICAgICAgICMgdG8gZW5zdXJlIG9ubHkgdGhl
IHBhcmFtZXRlcnMgcmVtYWluIHdpdGhvdXQgdGhlIHN1cnJvdW5kaW5nIHBhcmFudGhlc2lzLgor
ICAgICAgICBwYXJhbWV0ZXJfbGluZXMgPSBzZWxmLl9jbGVhbl9saW5lcy5lbGlkZWRbc2VsZi5w
YXJhbWV0ZXJfc3RhcnRbMF06c2VsZi5wYXJhbWV0ZXJfZW5kWzBdICsgMV0KKyAgICAgICAgcGFy
YW1ldGVyX2xpbmVzWy0xXSA9IHBhcmFtZXRlcl9saW5lc1stMV1bOnNlbGYucGFyYW1ldGVyX2Vu
ZFsxXSAtIDFdCisgICAgICAgIHBhcmFtZXRlcl9saW5lc1swXSA9IHBhcmFtZXRlcl9saW5lc1sw
XVtzZWxmLnBhcmFtZXRlcl9zdGFydFsxXSArIDE6XQorICAgICAgICBhbGxfcGFyYW1ldGVycyA9
ICcgJy5qb2luKHBhcmFtZXRlcl9saW5lcykKKworICAgICAgICAjIFN0b3JlIHRoZSBsZW5ndGhz
IG9mIGVhY2ggbGluZSAoYWRkaW5nIDEgZHVlIHRvIHRoZSBzcGFjZSBhZGRlZCBkdXJpbmcgdGhl
IGpvaW4pIHRvCisgICAgICAgICMgbWFrZSBpdCBlYXNpZXIgdG8gZGV0ZXJtaW5lIHdoYXQgbGlu
ZSBlYWNoIHBhcmFtZXRlciBpcyBvbiB3aGVuIHRoZXkgYXJlIHBhcnNlZC4KKyAgICAgICAgbGlu
ZV9sZW5ndGhzID0gW2xlbihsaW5lKSArIDEgZm9yIGxpbmUgaW4gcGFyYW1ldGVyX2xpbmVzXQor
CisgICAgICAgICMgUmVtb3ZlIGl0ZW1zIHRoYXQgbWFrZSBpdCBoYXJkIHRvIGRvIHNpbXBsZSBw
YXJzaW5nIG9mIHRoZSBwYXJhbWV0ZXJzLgorICAgICAgICBhbGxfc2ltcGxpZmljYXRpb25zID0g
KAorICAgICAgICAgICAgIyBSZW1vdmUgdGVtcGxhdGUgcGFyYW1ldGVycywgZnVuY3Rpb24gZGVj
bGFyYXRpb24gcGFyYW1ldGVycywgZXRjLgorICAgICAgICAgICAgcicoPFtePl0qPz4pfChcKFte
XCldKj9cKSl8KFx7W15cfV0qP1x9KScsCisgICAgICAgICAgICAjIFJlbW92ZSBldmVyeXRoaW5n
IGFmdGVyIGFuID0uCisgICAgICAgICAgICByJz1bXixdKicpCisgICAgICAgIHNpbXBsaWZpZWRf
cGFyYW1ldGVycyA9IGFsbF9wYXJhbWV0ZXJzCisgICAgICAgIGZvciBzaW1wbGlmaWNhdGlvbiBp
biBhbGxfc2ltcGxpZmljYXRpb25zOgorICAgICAgICAgICAgc2ltcGxpZmllZF9wYXJhbWV0ZXJz
ID0gaXRlcmF0aXZlbHlfcmVwbGFjZV9tYXRjaGVzX3dpdGhfY2hhcihzaW1wbGlmaWNhdGlvbiwg
JyAnLCBzaW1wbGlmaWVkX3BhcmFtZXRlcnMpCisKKyAgICAgICAgIyBBZGQgYSBjb21tYSBhZnRl
ciB0aGUgbGFzdCBwYXJhbWV0ZXIgc28gdGhhdCBlYWNoIHBhcmFtZXRlciBlbmRzIHdpdGggYSBj
b21tYS4KKyAgICAgICAgaWYgc2ltcGxpZmllZF9wYXJhbWV0ZXJzLnN0cmlwKCk6CisgICAgICAg
ICAgICBzaW1wbGlmaWVkX3BhcmFtZXRlcnMgKz0gJywnCisgICAgICAgICAgICBsaW5lX2xlbmd0
aHNbLTFdICs9IDEKKworICAgICAgICAjIEZvcm0gdGhlIGxpc3Qgb2YgdGhlIHBhcmFtZXRlcnMu
CisgICAgICAgIHNlbGYuX3BhcmFtZXRlcl9saXN0ID0gW10KKyAgICAgICAgcHJldmlvdXNfcGFy
YW1ldGVyX2luZGV4ID0gMAorICAgICAgICBwcmV2aW91c19saW5lX2xlbmd0aHMgPSAwCisgICAg
ICAgIGN1cnJlbnRfcGFyYW1ldGVyX2xpbmUgPSAwCisgICAgICAgIHdoaWxlIFRydWU6CisgICAg
ICAgICAgICAjIEZpbmQgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBwYXJhbWV0ZXIuCisgICAgICAg
ICAgICBuZXh0X2NvbW1hX2luZGV4ID0gc2ltcGxpZmllZF9wYXJhbWV0ZXJzLmZpbmQoJywnLCAg
cHJldmlvdXNfcGFyYW1ldGVyX2luZGV4KQorICAgICAgICAgICAgaWYgbmV4dF9jb21tYV9pbmRl
eCA9PSAtMTogICMgTm8gY29tbWEgbWVhbnMgdGhhdCBhbGwgcGFyYW1ldGVycyBoYXZlIGJlZW4g
cGFyc2VkLgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgICMgSXMgdGhlIGNv
bW1hIG9uIGEgbmV3IGxpbmU/CisgICAgICAgICAgICB3aGlsZSBuZXh0X2NvbW1hX2luZGV4ID49
IHByZXZpb3VzX2xpbmVfbGVuZ3RocyArIGxpbmVfbGVuZ3Roc1tjdXJyZW50X3BhcmFtZXRlcl9s
aW5lXToKKyAgICAgICAgICAgICAgICBwcmV2aW91c19saW5lX2xlbmd0aHMgKz0gbGluZV9sZW5n
dGhzW2N1cnJlbnRfcGFyYW1ldGVyX2xpbmVdCisgICAgICAgICAgICAgICAgY3VycmVudF9wYXJh
bWV0ZXJfbGluZSArPSAxCisKKyAgICAgICAgICAgICMgUGFyc2UgdGhlIHBhcmFtZXRlciBpbnRv
IGEgdHlwZSBhbmQgcGFyYW1ldGVyIG5hbWUuCisgICAgICAgICAgICBwYXJhbWV0ZXIgPSBsaXN0
KHBhcnNlX3BhcmFtZXRlcl90eXBlX2FuZF9uYW1lKGFsbF9wYXJhbWV0ZXJzLCBzaW1wbGlmaWVk
X3BhcmFtZXRlcnMsIHByZXZpb3VzX3BhcmFtZXRlcl9pbmRleCwgbmV4dF9jb21tYV9pbmRleCkp
CisgICAgICAgICAgICAjIEluY2x1ZGUgdGhlIGxpbmUgbnVibWVyIHRvby4KKyAgICAgICAgICAg
IHBhcmFtZXRlci5hcHBlbmQoY3VycmVudF9wYXJhbWV0ZXJfbGluZSArIHNlbGYucGFyYW1ldGVy
X3N0YXJ0WzBdKQorICAgICAgICAgICAgc2VsZi5fcGFyYW1ldGVyX2xpc3QuYXBwZW5kKHR1cGxl
KHBhcmFtZXRlcikpCisKKyAgICAgICAgICAgICMgTW92ZSBvbiB0byB0aGUgbmV4dCBwYXJhbWV0
ZXIgKHdoaWNoIGlzIGp1c3QgYWZ0ZXIgdGhlIHByZXZpb3VzIGNvbW1hIGZvdW5kKS4KKyAgICAg
ICAgICAgIHByZXZpb3VzX3BhcmFtZXRlcl9pbmRleCA9IG5leHRfY29tbWFfaW5kZXggKyAxCisK
KyAgICAgICAgIyBTdG9yZSB0aGUgZmluYWwgcmVzdWx0IGFzIGEgdHVwbGUgc2luY2UgdGhhdCBp
cyBpbW11dGFibGUuCisgICAgICAgIHNlbGYuX3BhcmFtZXRlcl9saXN0ID0gdHVwbGUoc2VsZi5f
cGFyYW1ldGVyX2xpc3QpCisgICAgICAgIHJldHVybiBzZWxmLl9wYXJhbWV0ZXJfbGlzdAogCiAg
ICAgZGVmIGNvdW50KHNlbGYsIGxpbmVfbnVtYmVyKToKICAgICAgICAgIiIiQ291bnQgbGluZSBp
biBjdXJyZW50IGZ1bmN0aW9uIGJvZHkuIiIiCkBAIC0xMjI4LDEzICsxMzA1LDIyIEBAIGRlZiBk
ZXRlY3RfZnVuY3Rpb25zKGNsZWFuX2xpbmVzLCBsaW5lX251bWJlciwgZnVuY3Rpb25fc3RhdGUs
IGVycm9yKToKICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKz0gcGFyYW1ldGVyX3JlZ2V4
cC5ncm91cCgxKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBmdW5jdGlvbiAr
PSAnKCknCisKKyAgICAgICAgICAgIHBhcmFtZXRlcl9zdGFydCA9IChsaW5lX251bWJlciwgbWF0
Y2hfZnVuY3Rpb24uZW5kKDEpKQorICAgICAgICAgICAgY2xvc2VfcmVzdWx0ID0gY2xvc2VfZXhw
cmVzc2lvbihjbGVhbl9saW5lcywgbGluZV9udW1iZXIsIHBhcmFtZXRlcl9zdGFydFsxXSkKKyAg
ICAgICAgICAgIGlmIGNsb3NlX3Jlc3VsdFsxXSA9PSBsZW4oY2xlYW5fbGluZXMuZWxpZGVkKToK
KyAgICAgICAgICAgICAgICAjIE5vIGVuZCB3YXMgZm91bmQuCisgICAgICAgICAgICAgICAgcmV0
dXJuCisgICAgICAgICAgICBwYXJhbWV0ZXJfZW5kID0gKGNsb3NlX3Jlc3VsdFsxXSwgY2xvc2Vf
cmVzdWx0WzJdKQorCiAgICAgICAgICAgICBpc19kZWNsYXJhdGlvbiA9IGJvb2woc2VhcmNoKHIn
Xltee10qOycsIHN0YXJ0X2xpbmUpKQogICAgICAgICAgICAgaWYgaXNfZGVjbGFyYXRpb246CiAg
ICAgICAgICAgICAgICAgZW5kaW5nX2xpbmVfbnVtYmVyID0gc3RhcnRfbGluZV9udW1iZXIKICAg
ICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgb3Blbl9icmFjZV9pbmRleCA9IHN0YXJ0
X2xpbmUuZmluZCgneycpCiAgICAgICAgICAgICAgICAgZW5kaW5nX2xpbmVfbnVtYmVyID0gY2xv
c2VfZXhwcmVzc2lvbihjbGVhbl9saW5lcywgc3RhcnRfbGluZV9udW1iZXIsIG9wZW5fYnJhY2Vf
aW5kZXgpWzFdCi0gICAgICAgICAgICBmdW5jdGlvbl9zdGF0ZS5iZWdpbihmdW5jdGlvbiwgc3Rh
cnRfbGluZV9udW1iZXIsIGVuZGluZ19saW5lX251bWJlciwgaXNfZGVjbGFyYXRpb24pCisKKyAg
ICAgICAgICAgIGZ1bmN0aW9uX3N0YXRlLmJlZ2luKGZ1bmN0aW9uLCBzdGFydF9saW5lX251bWJl
ciwgZW5kaW5nX2xpbmVfbnVtYmVyLCBpc19kZWNsYXJhdGlvbiwgcGFyYW1ldGVyX3N0YXJ0LCBw
YXJhbWV0ZXJfZW5kLCBjbGVhbl9saW5lcykKICAgICAgICAgICAgIHJldHVybgogCiAgICAgIyBO
byBib2R5IGZvciB0aGUgZnVuY3Rpb24gKG9yIGV2aWRlbmNlIG9mIGEgbm9uLWZ1bmN0aW9uKSB3
YXMgZm91bmQuCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNr
ZXJzL2NwcF91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tl
cnMvY3BwX3VuaXR0ZXN0LnB5CmluZGV4IGQyYzI1NzA1ZjNkZDQxZDgwODMwNGMzYzJhMjg3MzNi
YzhjNTI5MTkuLjAwZTViMTlhNmZlOGJiODYzNWMyNjAzYzA0ZThjYTZlOGI5MDA4MDggMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwX3VuaXR0ZXN0
LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwX3VuaXR0
ZXN0LnB5CkBAIC0yNDUsNiArMjQ1LDcgQEAgY2xhc3MgRnVuY3Rpb25EZXRlY3Rpb25UZXN0KENw
cFN0eWxlVGVzdEJhc2UpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmdW5jdGlvbl9zdGF0
ZS5ib2R5X3N0YXJ0X2xpbmVfbnVtYmVyLCBmdW5jdGlvbl9pbmZvcm1hdGlvblsnYm9keV9zdGFy
dF9saW5lX251bWJlciddKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmdW5jdGlvbl9zdGF0
ZS5lbmRpbmdfbGluZV9udW1iZXIsIGZ1bmN0aW9uX2luZm9ybWF0aW9uWydlbmRpbmdfbGluZV9u
dW1iZXInXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZnVuY3Rpb25fc3RhdGUuaXNfZGVj
bGFyYXRpb24sIGZ1bmN0aW9uX2luZm9ybWF0aW9uWydpc19kZWNsYXJhdGlvbiddKQorICAgICAg
ICByZXR1cm4gZnVuY3Rpb25fc3RhdGUKIAogICAgIGRlZiB0ZXN0X2Jhc2ljX2Z1bmN0aW9uX2Rl
dGVjdGlvbihzZWxmKToKICAgICAgICAgc2VsZi5wZXJmb3JtX2Z1bmN0aW9uX2RldGVjdGlvbigK
QEAgLTI3OSw2ICsyODAsNDUgQEAgY2xhc3MgRnVuY3Rpb25EZXRlY3Rpb25UZXN0KENwcFN0eWxl
VGVzdEJhc2UpOgogICAgICAgICAjIFNpbXBsZSB0ZXN0IGNhc2Ugd2l0aCBzb21ldGhpbmcgdGhh
dCBpcyBub3QgYSBmdW5jdGlvbi4KICAgICAgICAgc2VsZi5wZXJmb3JtX2Z1bmN0aW9uX2RldGVj
dGlvbihbJ2NsYXNzIFN0dWZmOyddLCBOb25lKQogCisgICAgZGVmIHRlc3RfcGFyYW1ldGVyX2xp
c3Qoc2VsZik6CisgICAgICAgICMgQSBmdW5jdGlvbiB3aXRoIG5vIGFyZ3VtZW50cy4KKyAgICAg
ICAgZnVuY3Rpb25fc3RhdGUgPSBzZWxmLnBlcmZvcm1fZnVuY3Rpb25fZGV0ZWN0aW9uKAorICAg
ICAgICAgICAgWyd2b2lkIGZ1bmN0aW9uTmFtZSgpOyddLAorICAgICAgICAgICAgeyduYW1lJzog
J2Z1bmN0aW9uTmFtZScsCisgICAgICAgICAgICAgJ2JvZHlfc3RhcnRfbGluZV9udW1iZXInOiAw
LAorICAgICAgICAgICAgICdlbmRpbmdfbGluZV9udW1iZXInOiAwLAorICAgICAgICAgICAgICdp
c19kZWNsYXJhdGlvbic6IFRydWV9KQorICAgICAgICBwYXJhbWV0ZXJfbGlzdCA9IGZ1bmN0aW9u
X3N0YXRlLmdldF9wYXJhbWV0ZXJfbGlzdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxl
bihwYXJhbWV0ZXJfbGlzdCksIDApCisKKyAgICAgICAgIyBBIGZ1bmN0aW9uIHdpdGggb25lIGFy
Z3VtZW50LgorICAgICAgICBmdW5jdGlvbl9zdGF0ZSA9IHNlbGYucGVyZm9ybV9mdW5jdGlvbl9k
ZXRlY3Rpb24oCisgICAgICAgICAgICBbJ3ZvaWQgZnVuY3Rpb25OYW1lKGludCk7J10sCisgICAg
ICAgICAgICB7J25hbWUnOiAnZnVuY3Rpb25OYW1lJywKKyAgICAgICAgICAgICAnYm9keV9zdGFy
dF9saW5lX251bWJlcic6IDAsCisgICAgICAgICAgICAgJ2VuZGluZ19saW5lX251bWJlcic6IDAs
CisgICAgICAgICAgICAgJ2lzX2RlY2xhcmF0aW9uJzogVHJ1ZX0pCisgICAgICAgIHBhcmFtZXRl
cl9saXN0ID0gZnVuY3Rpb25fc3RhdGUuZ2V0X3BhcmFtZXRlcl9saXN0KCkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbHMobGVuKHBhcmFtZXRlcl9saXN0KSwgMSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbHMocGFyYW1ldGVyX2xpc3RbMF0sICgnaW50JywgJycsIDApKQorCisgICAgICAgICMg
VHJ5IHBhcnNpbmcgYSBmdW5jdGlvbiB3aXRoIGEgdmVyeSBjb21wbGV4IGRlZmluaXRpb24uCisg
ICAgICAgIGZ1bmN0aW9uX3N0YXRlID0gc2VsZi5wZXJmb3JtX2Z1bmN0aW9uX2RldGVjdGlvbigK
KyAgICAgICAgICAgIFsnQW5vdGhlclRlbXBsYXRlPENsYXNzMSwgQ2xhc3MyPiBhRnVuY3Rpb25O
YW1lKFBhc3NSZWZQdHI8TXlDbGFzcz4gcGFyYW1OYW1lLCcsCisgICAgICAgICAgICAgJ2NvbnN0
IE90aGVyMUNsYXNzJiBmb28sJywKKyAgICAgICAgICAgICAnY29uc3QgQ29tcGxleFRlbXBsYXRl
PENsYXNzMSwgTmVzdGVkVGVtcGxhdGU8UDEsIFAyPiA+KiBjb25zdCAqIHBhcmFtID0gbmV3IENv
bXBsZXhUZW1wbGF0ZTxDbGFzczEsIE5lc3RlZFRlbXBsYXRlPFAxLCBQMj4gPigzNCwgNDIpLCcs
CisgICAgICAgICAgICAgJ2ludCogbXlDb3VudCA9IDApOyddLAorICAgICAgICAgICAgeyduYW1l
JzogJ2FGdW5jdGlvbk5hbWUnLAorICAgICAgICAgICAgICdib2R5X3N0YXJ0X2xpbmVfbnVtYmVy
JzogMywKKyAgICAgICAgICAgICAnZW5kaW5nX2xpbmVfbnVtYmVyJzogMywKKyAgICAgICAgICAg
ICAnaXNfZGVjbGFyYXRpb24nOiBUcnVlfSkKKyAgICAgICAgcGFyYW1ldGVyX2xpc3QgPSBmdW5j
dGlvbl9zdGF0ZS5nZXRfcGFyYW1ldGVyX2xpc3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
cyhsZW4ocGFyYW1ldGVyX2xpc3QpLCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwYXJh
bWV0ZXJfbGlzdFswXSwgKCdQYXNzUmVmUHRyPE15Q2xhc3M+JywgJ3BhcmFtTmFtZScsIDApKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwYXJhbWV0ZXJfbGlzdFsxXSwgKCdjb25zdCBPdGhl
cjFDbGFzcyYnLCAnZm9vJywgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBhcmFtZXRl
cl9saXN0WzJdLCAoJ2NvbnN0IENvbXBsZXhUZW1wbGF0ZTxDbGFzczEsIE5lc3RlZFRlbXBsYXRl
PFAxLCBQMj4gPiogY29uc3QgKicsICdwYXJhbScsIDIpKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFscyhwYXJhbWV0ZXJfbGlzdFszXSwgKCdpbnQqJywgJ215Q291bnQnLCAzKSkKKwogY2xhc3Mg
Q3BwU3R5bGVUZXN0KENwcFN0eWxlVGVzdEJhc2UpOgogCiAgICAgIyBUZXN0IGdldCBsaW5lIHdp
ZHRoLgpAQCAtMjU0NCwxNCArMjU4NCwxMiBAQCBjbGFzcyBDaGVja0ZvckZ1bmN0aW9uTGVuZ3Ro
c1Rlc3QoQ3BwU3R5bGVUZXN0QmFzZSk6CiAgICAgICAgIGVycm9yX2xldmVsID0gMQogICAgICAg
ICBlcnJvcl9saW5lcyA9IHNlbGYudHJpZ2dlcl90ZXN0X2xpbmVzKGVycm9yX2xldmVsKSArIDEK
ICAgICAgICAgdHJpZ2dlcl9sZXZlbCA9IHNlbGYudHJpZ2dlcl90ZXN0X2xpbmVzKHNlbGYubWlu
X2NvbmZpZGVuY2UpCisgICAgICAgICMgU2luY2UgdGhlIGZ1bmN0aW9uIG5hbWUgaXNuJ3QgdmFs
aWQsIHRoZSBmdW5jdGlvbiBkZXRlY3Rpb24gYWxnb3JpdGhtCisgICAgICAgICMgd2lsbCBza2lw
IGl0LCBzbyBubyBlcnJvciBpcyBwcm9kdWNlZC4KICAgICAgICAgc2VsZi5hc3NlcnRfZnVuY3Rp
b25fbGVuZ3Roc19jaGVjaygKICAgICAgICAgICAgICgnVEVTVF9GKCcKICAgICAgICAgICAgICAr
IHNlbGYuZnVuY3Rpb25fYm9keShlcnJvcl9saW5lcykpLAotICAgICAgICAgICAgKCdTbWFsbCBh
bmQgZm9jdXNlZCBmdW5jdGlvbnMgYXJlIHByZWZlcnJlZDogJwotICAgICAgICAgICAgICdURVNU
X0YgaGFzICVkIG5vbi1jb21tZW50IGxpbmVzICcKLSAgICAgICAgICAgICAnKGVycm9yIHRyaWdn
ZXJlZCBieSBleGNlZWRpbmcgJWQgbGluZXMpLicKLSAgICAgICAgICAgICAnICBbcmVhZGFiaWxp
dHkvZm5fc2l6ZV0gWyVkXScpCi0gICAgICAgICAgICAlIChlcnJvcl9saW5lcywgdHJpZ2dlcl9s
ZXZlbCwgZXJyb3JfbGV2ZWwpKQorICAgICAgICAgICAgJycpCiAKICAgICBkZWYgdGVzdF9mdW5j
dGlvbl9sZW5ndGhfY2hlY2tfZGVmaW5pdGlvbl9zZXZlcml0eTFfd2l0aF9lbWJlZGRlZF9ub19s
aW50cyhzZWxmKToKICAgICAgICAgZXJyb3JfbGV2ZWwgPSAxCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77282</attachid>
            <date>2010-12-22 17:19:42 -0800</date>
            <delta_ts>2010-12-22 17:20:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51451-20101222171940.patch</filename>
            <type>text/plain</type>
            <size>16240</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBjZjMw
NDUxYmFhZDNiMzM4NzcwZWFjOGU2ODg1ODAzZDY4MWExZTdjLi40NTliYjY3MzI5OTU2MTczZTVj
Y2U0MTgwYmU2MDMwMDk4YWY1NTBiIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTAtMTItMjEgIERhdmlkIExldmlu
ICA8bGV2aW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIGNoZWNrLXdlYmtpdC1zdHlsZSBzaG91bGQgYmUgYWJsZSB0byBwYXJz
ZSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBwYXJhbWV0ZXJzLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE0NTEKKworICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwLnB5OgorICAgICAgICAoX0Z1bmN0aW9uU3RhdGUuYmVn
aW4pOiBBZGRlZCBpbmZvcm1hdGlvbiB0byBhbGxvdyBkZXRlcm1pbmluZyB0aGUgcGFyYW1ldGVy
cworICAgICAgICBvbiBkZW1hbmQuCisgICAgICAgIChfRnVuY3Rpb25TdGF0ZS5nZXRfcGFyYW1l
dGVyX2xpc3QpOiBSZXR1cm5zIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXJzLgorICAgICAgICAoX0Z1
bmN0aW9uU3RhdGUuZ2V0X3BhcmFtZXRlcl9saXN0LnBhcnNlX3BhcmFtZXRlcl90eXBlX2FuZF9u
YW1lKTogTmVzdGVkCisgICAgICAgIGZ1bmN0aW9uIHdoaWNoIHBhcnNlcyBhIHNpbmdsZSBwYXJh
bWV0ZXIgaW50byBhIHR5cGUgYW5kIG5hbWUuCisgICAgICAgIChkZXRlY3RfZnVuY3Rpb25zKTog
SW1wcm92ZSBmdW5jdGlvbiBkZXRlY3Rpb24gZm9yIG9wZXJhdG9yIGZ1bmN0aW9ucyBhbmQKKyAg
ICAgICAgZGV0ZXJtaW5lIHdoZXJlIHRoZSBwYXJhbWV0ZXJzIGVuZCBhbmQgcGFzcyB0aGF0IHRv
IF9GdW5jdGlvblN0YXRlLmJlZ2luLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUv
Y2hlY2tlcnMvY3BwX3VuaXR0ZXN0LnB5OgorICAgICAgICAoRnVuY3Rpb25EZXRlY3Rpb25UZXN0
LnBlcmZvcm1fZnVuY3Rpb25fZGV0ZWN0aW9uKTogUmV0dXJuIHRoZSBmdW5jdGlvbiBzdGF0ZQor
ICAgICAgICBzbyB0aGF0IHRoZSBjYWxsZXIgbWF5IHVzZSBpdCB0byBkbyBtb3JlIHRlc3RzLgor
ICAgICAgICAoRnVuY3Rpb25EZXRlY3Rpb25UZXN0LnRlc3RfZnVuY3Rpb25fZGVjbGFyYXRpb25f
ZGV0ZWN0aW9uKTogQWRkZWQgbW9yZSBmdW5jdGlvbgorICAgICAgICBkZXRlY3Rpb24gdGVzdCB0
byB2ZXJpZnkgdGhhdCB3ZSBjYXRjaCB0aGUgb3BlcmF0b3IgZnVuY3Rpb25zLgorICAgICAgICAo
RnVuY3Rpb25EZXRlY3Rpb25UZXN0LnRlc3RfaWdub3JlX21hY3Jvcyk6IFZlcmlmeSB0aGF0IGZ1
bmN0aW9uIGRldGVjdGlvbiBpZ25vcmVzIG1hY3Jvcy4KKyAgICAgICAgKEZ1bmN0aW9uRGV0ZWN0
aW9uVGVzdC50ZXN0X3BhcmFtZXRlcl9saXN0KTogQWRkZWQgdGVzdHMgdG8gdmVyaWZ5IHRoZSBw
YXJhbWV0ZXIgcGFyc2luZy4KKyAgICAgICAgKENoZWNrRm9yRnVuY3Rpb25MZW5ndGhzVGVzdC50
ZXN0X2Z1bmN0aW9uX2xlbmd0aF9jaGVja19kZWZpbml0aW9uX3NldmVyaXR5MV9mb3JfYmFkX3Rl
c3RfZG9lc250X2JyZWFrKTogUmVtb3ZlZAorICAgICAgICBiZWNhdXNlIHRoZSBlcnJvci4gVGhl
IHRlc3QgaXMgYWJvdXQgdGhlIGJhZCBmdW5jdGlvbiBuYW1lLiBGaXhpbmcgdGhlIG5hbWUgbWFr
ZXMgdGhlIHRlc3QgZXhhY3RseSBsaWtlCisgICAgICAgIHRlc3RfZnVuY3Rpb25fbGVuZ3RoX2No
ZWNrX2RlZmluaXRpb25fc2V2ZXJpdHkxX2Zvcl90ZXN0LgorCiAyMDEwLTEyLTIyICBEYXZpZCBM
ZXZpbiAgPGxldmluQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaGluaWNo
aXJvIEhhbWFqaS4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hl
Y2tlcnMvY3BwLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy9jcHAu
cHkKaW5kZXggOTRlNWJkZGE0Mzk4ZTFiYzU1ZWU3MDk5MTBmMjg1Y2EzYjUyYzVlYi4uNTE3MjRl
NmU4MjYyNTE0NzZmYjhjOTM1NTI2MGJmMzRkMzUyYWYzYiAxMDA2NDQKLS0tIGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy9jcHAucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9zdHlsZS9jaGVja2Vycy9jcHAucHkKQEAgLTMyOSw3ICszMjksNyBAQCBjbGFzcyBf
RnVuY3Rpb25TdGF0ZShvYmplY3QpOgogICAgICAgICBzZWxmLmJvZHlfc3RhcnRfbGluZV9udW1i
ZXIgPSAtMTAwMAogICAgICAgICBzZWxmLmVuZGluZ19saW5lX251bWJlciA9IC0xMDAwCiAKLSAg
ICBkZWYgYmVnaW4oc2VsZiwgZnVuY3Rpb25fbmFtZSwgYm9keV9zdGFydF9saW5lX251bWJlciwg
ZW5kaW5nX2xpbmVfbnVtYmVyLCBpc19kZWNsYXJhdGlvbik6CisgICAgZGVmIGJlZ2luKHNlbGYs
IGZ1bmN0aW9uX25hbWUsIGJvZHlfc3RhcnRfbGluZV9udW1iZXIsIGVuZGluZ19saW5lX251bWJl
ciwgaXNfZGVjbGFyYXRpb24sIHBhcmFtZXRlcl9zdGFydCwgcGFyYW1ldGVyX2VuZCwgY2xlYW5f
bGluZXMpOgogICAgICAgICAiIiJTdGFydCBhbmFseXppbmcgZnVuY3Rpb24gYm9keS4KIAogICAg
ICAgICBBcmdzOgpAQCAtMzQ0LDYgKzM0NCw4OSBAQCBjbGFzcyBfRnVuY3Rpb25TdGF0ZShvYmpl
Y3QpOgogICAgICAgICBzZWxmLmJvZHlfc3RhcnRfbGluZV9udW1iZXIgPSBib2R5X3N0YXJ0X2xp
bmVfbnVtYmVyCiAgICAgICAgIHNlbGYuZW5kaW5nX2xpbmVfbnVtYmVyID0gZW5kaW5nX2xpbmVf
bnVtYmVyCiAgICAgICAgIHNlbGYuaXNfZGVjbGFyYXRpb24gPSBpc19kZWNsYXJhdGlvbgorICAg
ICAgICBzZWxmLnBhcmFtZXRlcl9zdGFydCA9IHBhcmFtZXRlcl9zdGFydAorICAgICAgICBzZWxm
LnBhcmFtZXRlcl9lbmQgPSBwYXJhbWV0ZXJfZW5kCisgICAgICAgIHNlbGYuX3BhcmFtZXRlcl9s
aXN0ID0gTm9uZQorICAgICAgICBzZWxmLl9jbGVhbl9saW5lcyA9IGNsZWFuX2xpbmVzCisKKyAg
ICBkZWYgZ2V0X3BhcmFtZXRlcl9saXN0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9wYXJhbWV0
ZXJfbGlzdDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9wYXJhbWV0ZXJfbGlzdAorCisgICAg
ICAgIGRlZiBwYXJzZV9wYXJhbWV0ZXJfdHlwZV9hbmRfbmFtZShhbGxfcGFyYW1ldGVycywgc2lt
cGxpZmllZF9wYXJhbWV0ZXJzLCBzdGFydF9pbmRleCwgZW5kX2luZGV4KToKKyAgICAgICAgICAg
IGN1cnJlbnRfcGFyYW1ldGVyID0gYWxsX3BhcmFtZXRlcnNbc3RhcnRfaW5kZXg6ZW5kX2luZGV4
XQorICAgICAgICAgICAgY3VycmVudF9zaW1wbGlmaWVkX3BhcmFtZXRlciA9IHNpbXBsaWZpZWRf
cGFyYW1ldGVyc1tzdGFydF9pbmRleDplbmRfaW5kZXhdCisKKyAgICAgICAgICAgICMgVGhlIGZp
cnN0IHNwYWNlIGZyb20gdGhlIHJpZ2h0IGluIHRoZSBzaW1wbGlmaWVkIHBhcmFtZXRlciBpcyB3
aGVyZSB0aGUgcGFyYW1ldGVyIG5hbWUgc3RhcnQKKyAgICAgICAgICAgICMgdW5sZXNzIHRoZSBm
aXJzdCBzcGFjZSBpcyBiZWZvcmUgYW55IGNvbnRlbnQgaW4gdGhlIHNpbXBsaWZpZWQgcGFyYW1l
dGVyLgorICAgICAgICAgICAgYmVmb3JlX3R5cGVfbmFtZV9pbmRleCA9IGN1cnJlbnRfc2ltcGxp
ZmllZF9wYXJhbWV0ZXIucnN0cmlwKCkucmZpbmQoJyAnKQorICAgICAgICAgICAgaWYgYmVmb3Jl
X3R5cGVfbmFtZV9pbmRleCA9PSAtMSBvciBub3QgY3VycmVudF9zaW1wbGlmaWVkX3BhcmFtZXRl
cls6YmVmb3JlX3R5cGVfbmFtZV9pbmRleF0uc3RyaXAoKToKKyAgICAgICAgICAgICAgICBiZWZv
cmVfdHlwZV9uYW1lX2luZGV4ID0gbGVuKGN1cnJlbnRfcGFyYW1ldGVyKQorICAgICAgICAgICAg
cGFyYW1fdHlwZSA9IGN1cnJlbnRfcGFyYW1ldGVyWzpiZWZvcmVfdHlwZV9uYW1lX2luZGV4XS5z
dHJpcCgpCisKKyAgICAgICAgICAgICMgUmVtb3ZlIGV2ZXJ5dGhpbmcgYWZ0ZXIgYSA9IGluIHRo
ZSBwYXJhbWV0ZXIgbmFtZSAoZS5nICdpbnQgaSA9IGludCg1KScpLgorICAgICAgICAgICAgcGFy
YW1fbmFtZSA9IHN1YihyJz0uKicsICcnLCBjdXJyZW50X3BhcmFtZXRlcltiZWZvcmVfdHlwZV9u
YW1lX2luZGV4ICsgMTpdKS5zdHJpcCgpCisgICAgICAgICAgICByZXR1cm4gKHBhcmFtX3R5cGUs
IHBhcmFtX25hbWUpCisKKyAgICAgICAgIyBGb3JtIGEgc2luZ2xlIHN0cmluZyB3aXRoIGFsbCBw
YXJhbWV0ZXJzLiBUcmltbWluZyB0aGUgZmlyc3QgYW5kIGxhc3QgbGluZXMKKyAgICAgICAgIyB0
byBlbnN1cmUgb25seSB0aGUgcGFyYW1ldGVycyByZW1haW4gd2l0aG91dCB0aGUgc3Vycm91bmRp
bmcgcGFyZW50aGVzaXMuCisgICAgICAgIHBhcmFtZXRlcl9saW5lcyA9IHNlbGYuX2NsZWFuX2xp
bmVzLmVsaWRlZFtzZWxmLnBhcmFtZXRlcl9zdGFydFswXTpzZWxmLnBhcmFtZXRlcl9lbmRbMF0g
KyAxXQorICAgICAgICBwYXJhbWV0ZXJfbGluZXNbLTFdID0gcGFyYW1ldGVyX2xpbmVzWy0xXVs6
c2VsZi5wYXJhbWV0ZXJfZW5kWzFdIC0gMV0KKyAgICAgICAgcGFyYW1ldGVyX2xpbmVzWzBdID0g
cGFyYW1ldGVyX2xpbmVzWzBdW3NlbGYucGFyYW1ldGVyX3N0YXJ0WzFdICsgMTpdCisgICAgICAg
IGFsbF9wYXJhbWV0ZXJzID0gJyAnLmpvaW4ocGFyYW1ldGVyX2xpbmVzKQorCisgICAgICAgICMg
U3RvcmUgdGhlIGxlbmd0aHMgb2YgZWFjaCBsaW5lIChhZGRpbmcgMSBkdWUgdG8gdGhlIHNwYWNl
IGFkZGVkIGR1cmluZyB0aGUgam9pbikgdG8KKyAgICAgICAgIyBtYWtlIGl0IGVhc2llciB0byBk
ZXRlcm1pbmUgd2hhdCBsaW5lIGVhY2ggcGFyYW1ldGVyIGlzIG9uIHdoZW4gdGhleSBhcmUgcGFy
c2VkLgorICAgICAgICBsaW5lX2xlbmd0aHMgPSBbbGVuKGxpbmUpICsgMSBmb3IgbGluZSBpbiBw
YXJhbWV0ZXJfbGluZXNdCisKKyAgICAgICAgIyBSZW1vdmUgaXRlbXMgdGhhdCBtYWtlIGl0IGhh
cmQgdG8gZG8gc2ltcGxlIHBhcnNpbmcgb2YgdGhlIHBhcmFtZXRlcnMuCisgICAgICAgIGFsbF9z
aW1wbGlmaWNhdGlvbnMgPSAoCisgICAgICAgICAgICAjIFJlbW92ZSB0ZW1wbGF0ZSBwYXJhbWV0
ZXJzLCBmdW5jdGlvbiBkZWNsYXJhdGlvbiBwYXJhbWV0ZXJzLCBldGMuCisgICAgICAgICAgICBy
Jyg8W14+XSo/Pil8KFwoW15cKV0qP1wpKXwoXHtbXlx9XSo/XH0pJywKKyAgICAgICAgICAgICMg
UmVtb3ZlIGV2ZXJ5dGhpbmcgYWZ0ZXIgYW4gPS4KKyAgICAgICAgICAgIHInPVteLF0qJywKKyAg
ICAgICAgICAgICMgUmVtb3ZlIG1vZGlmaWVycyBsaWtlICYsICoKKyAgICAgICAgICAgIHInW15B
LVphLXowLTksIF0rJywKKyAgICAgICAgICAgICMgUmVtb3ZlIG1vZGlmaWVycyBsaWtlIGxvbmcg
YW5kIGNvbnN0LgorICAgICAgICAgICAgcidcYihsb25nfGNvbnN0fHNob3J0KVxzKyg/PVtBLVph
LXpdKScKKyAgICAgICAgICAgICkKKyAgICAgICAgc2ltcGxpZmllZF9wYXJhbWV0ZXJzID0gYWxs
X3BhcmFtZXRlcnMKKyAgICAgICAgZm9yIHNpbXBsaWZpY2F0aW9uIGluIGFsbF9zaW1wbGlmaWNh
dGlvbnM6CisgICAgICAgICAgICBzaW1wbGlmaWVkX3BhcmFtZXRlcnMgPSBpdGVyYXRpdmVseV9y
ZXBsYWNlX21hdGNoZXNfd2l0aF9jaGFyKHNpbXBsaWZpY2F0aW9uLCAnICcsIHNpbXBsaWZpZWRf
cGFyYW1ldGVycykKKworICAgICAgICAjIEFkZCBhIGNvbW1hIGFmdGVyIHRoZSBsYXN0IHBhcmFt
ZXRlciBzbyB0aGF0IGVhY2ggcGFyYW1ldGVyIGVuZHMgd2l0aCBhIGNvbW1hLgorICAgICAgICBp
ZiBzaW1wbGlmaWVkX3BhcmFtZXRlcnMuc3RyaXAoKToKKyAgICAgICAgICAgIHNpbXBsaWZpZWRf
cGFyYW1ldGVycyArPSAnLCcKKyAgICAgICAgICAgIGxpbmVfbGVuZ3Roc1stMV0gKz0gMQorCisg
ICAgICAgICMgRm9ybSB0aGUgbGlzdCBvZiB0aGUgcGFyYW1ldGVycy4KKyAgICAgICAgc2VsZi5f
cGFyYW1ldGVyX2xpc3QgPSBbXQorICAgICAgICBwcmV2aW91c19wYXJhbWV0ZXJfaW5kZXggPSAw
CisgICAgICAgIHByZXZpb3VzX2xpbmVfbGVuZ3RocyA9IDAKKyAgICAgICAgY3VycmVudF9wYXJh
bWV0ZXJfbGluZSA9IDAKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICMgRmluZCB0
aGUgZW5kIG9mIHRoZSBjdXJyZW50IHBhcmFtZXRlci4KKyAgICAgICAgICAgIG5leHRfY29tbWFf
aW5kZXggPSBzaW1wbGlmaWVkX3BhcmFtZXRlcnMuZmluZCgnLCcsICBwcmV2aW91c19wYXJhbWV0
ZXJfaW5kZXgpCisgICAgICAgICAgICBpZiBuZXh0X2NvbW1hX2luZGV4ID09IC0xOiAgIyBObyBj
b21tYSBtZWFucyB0aGF0IGFsbCBwYXJhbWV0ZXJzIGhhdmUgYmVlbiBwYXJzZWQuCisgICAgICAg
ICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgIyBJcyB0aGUgY29tbWEgb24gYSBuZXcgbGlu
ZT8KKyAgICAgICAgICAgIHdoaWxlIG5leHRfY29tbWFfaW5kZXggPj0gcHJldmlvdXNfbGluZV9s
ZW5ndGhzICsgbGluZV9sZW5ndGhzW2N1cnJlbnRfcGFyYW1ldGVyX2xpbmVdOgorICAgICAgICAg
ICAgICAgIHByZXZpb3VzX2xpbmVfbGVuZ3RocyArPSBsaW5lX2xlbmd0aHNbY3VycmVudF9wYXJh
bWV0ZXJfbGluZV0KKyAgICAgICAgICAgICAgICBjdXJyZW50X3BhcmFtZXRlcl9saW5lICs9IDEK
KworICAgICAgICAgICAgIyBQYXJzZSB0aGUgcGFyYW1ldGVyIGludG8gYSB0eXBlIGFuZCBwYXJh
bWV0ZXIgbmFtZS4KKyAgICAgICAgICAgIHBhcmFtZXRlciA9IGxpc3QocGFyc2VfcGFyYW1ldGVy
X3R5cGVfYW5kX25hbWUoYWxsX3BhcmFtZXRlcnMsIHNpbXBsaWZpZWRfcGFyYW1ldGVycywgcHJl
dmlvdXNfcGFyYW1ldGVyX2luZGV4LCBuZXh0X2NvbW1hX2luZGV4KSkKKyAgICAgICAgICAgICMg
SW5jbHVkZSB0aGUgbGluZSBudWJtZXIgdG9vLgorICAgICAgICAgICAgcGFyYW1ldGVyLmFwcGVu
ZChjdXJyZW50X3BhcmFtZXRlcl9saW5lICsgc2VsZi5wYXJhbWV0ZXJfc3RhcnRbMF0pCisgICAg
ICAgICAgICBzZWxmLl9wYXJhbWV0ZXJfbGlzdC5hcHBlbmQodHVwbGUocGFyYW1ldGVyKSkKKwor
ICAgICAgICAgICAgIyBNb3ZlIG9uIHRvIHRoZSBuZXh0IHBhcmFtZXRlciAod2hpY2ggaXMganVz
dCBhZnRlciB0aGUgcHJldmlvdXMgY29tbWEgZm91bmQpLgorICAgICAgICAgICAgcHJldmlvdXNf
cGFyYW1ldGVyX2luZGV4ID0gbmV4dF9jb21tYV9pbmRleCArIDEKKworICAgICAgICAjIFN0b3Jl
IHRoZSBmaW5hbCByZXN1bHQgYXMgYSB0dXBsZSBzaW5jZSB0aGF0IGlzIGltbXV0YWJsZS4KKyAg
ICAgICAgc2VsZi5fcGFyYW1ldGVyX2xpc3QgPSB0dXBsZShzZWxmLl9wYXJhbWV0ZXJfbGlzdCkK
KyAgICAgICAgcmV0dXJuIHNlbGYuX3BhcmFtZXRlcl9saXN0CiAKICAgICBkZWYgY291bnQoc2Vs
ZiwgbGluZV9udW1iZXIpOgogICAgICAgICAiIiJDb3VudCBsaW5lIGluIGN1cnJlbnQgZnVuY3Rp
b24gYm9keS4iIiIKQEAgLTEyMTMsNyArMTI5NiwxMSBAQCBkZWYgZGV0ZWN0X2Z1bmN0aW9ucyhj
bGVhbl9saW5lcywgbGluZV9udW1iZXIsIGZ1bmN0aW9uX3N0YXRlLCBlcnJvcik6CiAgICAgcmF3
ID0gY2xlYW5fbGluZXMucmF3X2xpbmVzCiAgICAgcmF3X2xpbmUgPSByYXdbbGluZV9udW1iZXJd
CiAKLSAgICByZWdleHAgPSByJ1xzKihcdyhcd3w6OnxcKnxcJnxcc3w8fD58LHx+KSopXCgnICAj
IGRlY2xzICogJiBzcGFjZTo6bmFtZSggLi4uCisgICAgIyBMaW5lcyBlbmRpbmcgd2l0aCBhIFwg
aW5kaWNhdGUgYSBtYWNyby4gRG9uJ3QgdHJ5IHRvIGNoZWNrIHRoZW0uCisgICAgaWYgcmF3X2xp
bmUuZW5kc3dpdGgoJ1xcJyk6CisgICAgICAgIHJldHVybgorCisgICAgcmVnZXhwID0gcidccyoo
XHcoXHd8Ojp8XCp8XCZ8XHN8PHw+fCx8fnwob3BlcmF0b3JccyooL3wtfD18IXxcKykrKSkqKVwo
JyAgIyBkZWNscyAqICYgc3BhY2U6Om5hbWUoIC4uLgogICAgIG1hdGNoX3Jlc3VsdCA9IG1hdGNo
KHJlZ2V4cCwgbGluZSkKICAgICBpZiBub3QgbWF0Y2hfcmVzdWx0OgogICAgICAgICByZXR1cm4K
QEAgLTEyMzIsNyArMTMxOSw3IEBAIGRlZiBkZXRlY3RfZnVuY3Rpb25zKGNsZWFuX2xpbmVzLCBs
aW5lX251bWJlciwgZnVuY3Rpb25fc3RhdGUsIGVycm9yKToKICAgICAgICAgICAgICMgUmVwbGFj
ZSB0ZW1wbGF0ZSBjb25zdHJ1Y3RzIHdpdGggXyBzbyB0aGF0IG5vIHNwYWNlcyByZW1haW4gaW4g
dGhlIGZ1bmN0aW9uIG5hbWUsCiAgICAgICAgICAgICAjIHdoaWxlIGtlZXBpbmcgdGhlIGNvbHVt
biBudW1iZXJzIG9mIG90aGVyIGNoYXJhY3RlcnMgdGhlIHNhbWUgYXMgImxpbmUiLgogICAgICAg
ICAgICAgbGluZV93aXRoX25vX3RlbXBsYXRlcyA9IGl0ZXJhdGl2ZWx5X3JlcGxhY2VfbWF0Y2hl
c193aXRoX2NoYXIocic8W148Pl0qPicsICdfJywgbGluZSkKLSAgICAgICAgICAgIG1hdGNoX2Z1
bmN0aW9uID0gc2VhcmNoKHInKChcd3w6fDx8PnwsfH4pKilcKCcsIGxpbmVfd2l0aF9ub190ZW1w
bGF0ZXMpCisgICAgICAgICAgICBtYXRjaF9mdW5jdGlvbiA9IHNlYXJjaChyJygoXHd8Onw8fD58
LHx+fChvcGVyYXRvclxzKigvfC18PXwhfFwrKSspKSopXCgnLCBsaW5lX3dpdGhfbm9fdGVtcGxh
dGVzKQogICAgICAgICAgICAgaWYgbm90IG1hdGNoX2Z1bmN0aW9uOgogICAgICAgICAgICAgICAg
IHJldHVybiAgIyBUaGUgJygnIG11c3QgaGF2ZSBiZWVuIGluc2lkZSBvZiBhIHRlbXBsYXRlLgog
CkBAIC0xMjQ2LDEzICsxMzMzLDIxIEBAIGRlZiBkZXRlY3RfZnVuY3Rpb25zKGNsZWFuX2xpbmVz
LCBsaW5lX251bWJlciwgZnVuY3Rpb25fc3RhdGUsIGVycm9yKToKICAgICAgICAgICAgICAgICAg
ICAgZnVuY3Rpb24gKz0gcGFyYW1ldGVyX3JlZ2V4cC5ncm91cCgxKQogICAgICAgICAgICAgZWxz
ZToKICAgICAgICAgICAgICAgICBmdW5jdGlvbiArPSAnKCknCisKKyAgICAgICAgICAgIHBhcmFt
ZXRlcl9zdGFydCA9IChsaW5lX251bWJlciwgbWF0Y2hfZnVuY3Rpb24uZW5kKDEpKQorICAgICAg
ICAgICAgY2xvc2VfcmVzdWx0ID0gY2xvc2VfZXhwcmVzc2lvbihjbGVhbl9saW5lcywgbGluZV9u
dW1iZXIsIHBhcmFtZXRlcl9zdGFydFsxXSkKKyAgICAgICAgICAgIGlmIGNsb3NlX3Jlc3VsdFsx
XSA9PSBsZW4oY2xlYW5fbGluZXMuZWxpZGVkKToKKyAgICAgICAgICAgICAgICAjIE5vIGVuZCB3
YXMgZm91bmQuCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBwYXJhbWV0ZXJf
ZW5kID0gKGNsb3NlX3Jlc3VsdFsxXSwgY2xvc2VfcmVzdWx0WzJdKQorCiAgICAgICAgICAgICBp
c19kZWNsYXJhdGlvbiA9IGJvb2woc2VhcmNoKHInXltee10qOycsIHN0YXJ0X2xpbmUpKQogICAg
ICAgICAgICAgaWYgaXNfZGVjbGFyYXRpb246CiAgICAgICAgICAgICAgICAgZW5kaW5nX2xpbmVf
bnVtYmVyID0gc3RhcnRfbGluZV9udW1iZXIKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAg
ICAgICAgb3Blbl9icmFjZV9pbmRleCA9IHN0YXJ0X2xpbmUuZmluZCgneycpCiAgICAgICAgICAg
ICAgICAgZW5kaW5nX2xpbmVfbnVtYmVyID0gY2xvc2VfZXhwcmVzc2lvbihjbGVhbl9saW5lcywg
c3RhcnRfbGluZV9udW1iZXIsIG9wZW5fYnJhY2VfaW5kZXgpWzFdCi0gICAgICAgICAgICBmdW5j
dGlvbl9zdGF0ZS5iZWdpbihmdW5jdGlvbiwgc3RhcnRfbGluZV9udW1iZXIsIGVuZGluZ19saW5l
X251bWJlciwgaXNfZGVjbGFyYXRpb24pCisgICAgICAgICAgICBmdW5jdGlvbl9zdGF0ZS5iZWdp
bihmdW5jdGlvbiwgc3RhcnRfbGluZV9udW1iZXIsIGVuZGluZ19saW5lX251bWJlciwgaXNfZGVj
bGFyYXRpb24sIHBhcmFtZXRlcl9zdGFydCwgcGFyYW1ldGVyX2VuZCwgY2xlYW5fbGluZXMpCiAg
ICAgICAgICAgICByZXR1cm4KIAogICAgICMgTm8gYm9keSBmb3IgdGhlIGZ1bmN0aW9uIChvciBl
dmlkZW5jZSBvZiBhIG5vbi1mdW5jdGlvbikgd2FzIGZvdW5kLgpkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy9jcHBfdW5pdHRlc3QucHkgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcF91bml0dGVzdC5weQppbmRleCA3MGRm
MWVhNWVjY2UxODI3ODliZDBkNjBjOTQ0OWY5OWZmMDkxYTQ2Li5mMDk3NjU2NmVkYjA4ZmJlNTcy
ZDlkMGZhZDdlMTRjMmRmMGNkZjM3IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3N0eWxlL2NoZWNrZXJzL2NwcF91bml0dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3N0eWxlL2NoZWNrZXJzL2NwcF91bml0dGVzdC5weQpAQCAtMjUwLDYgKzI1MCw3IEBAIGNs
YXNzIEZ1bmN0aW9uRGV0ZWN0aW9uVGVzdChDcHBTdHlsZVRlc3RCYXNlKToKICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbHMoZnVuY3Rpb25fc3RhdGUuYm9keV9zdGFydF9saW5lX251bWJlciwgZnVu
Y3Rpb25faW5mb3JtYXRpb25bJ2JvZHlfc3RhcnRfbGluZV9udW1iZXInXSkKICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbHMoZnVuY3Rpb25fc3RhdGUuZW5kaW5nX2xpbmVfbnVtYmVyLCBmdW5jdGlv
bl9pbmZvcm1hdGlvblsnZW5kaW5nX2xpbmVfbnVtYmVyJ10pCiAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKGZ1bmN0aW9uX3N0YXRlLmlzX2RlY2xhcmF0aW9uLCBmdW5jdGlvbl9pbmZvcm1hdGlv
blsnaXNfZGVjbGFyYXRpb24nXSkKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uX3N0YXRlCiAKICAg
ICBkZWYgdGVzdF9iYXNpY19mdW5jdGlvbl9kZXRlY3Rpb24oc2VsZik6CiAgICAgICAgIHNlbGYu
cGVyZm9ybV9mdW5jdGlvbl9kZXRlY3Rpb24oCkBAIC0yNjgsNiArMjY5LDM3IEBAIGNsYXNzIEZ1
bmN0aW9uRGV0ZWN0aW9uVGVzdChDcHBTdHlsZVRlc3RCYXNlKToKICAgICAgICAgICAgICAnZW5k
aW5nX2xpbmVfbnVtYmVyJzogMCwKICAgICAgICAgICAgICAnaXNfZGVjbGFyYXRpb24nOiBUcnVl
fSkKIAorICAgICAgICBzZWxmLnBlcmZvcm1fZnVuY3Rpb25fZGV0ZWN0aW9uKAorICAgICAgICAg
ICAgWydDaGVja2VkSW50PFQ+IG9wZXJhdG9yIC8oY29uc3QgQ2hlY2tlZEludDxUPiAmbGhzLCBj
b25zdCBDaGVja2VkSW50PFQ+ICZyaHMpOyddLAorICAgICAgICAgICAgeyduYW1lJzogJ29wZXJh
dG9yIC8nLAorICAgICAgICAgICAgICdib2R5X3N0YXJ0X2xpbmVfbnVtYmVyJzogMCwKKyAgICAg
ICAgICAgICAnZW5kaW5nX2xpbmVfbnVtYmVyJzogMCwKKyAgICAgICAgICAgICAnaXNfZGVjbGFy
YXRpb24nOiBUcnVlfSkKKworICAgICAgICBzZWxmLnBlcmZvcm1fZnVuY3Rpb25fZGV0ZWN0aW9u
KAorICAgICAgICAgICAgWydDaGVja2VkSW50PFQ+IG9wZXJhdG9yIC0oY29uc3QgQ2hlY2tlZElu
dDxUPiAmbGhzLCBjb25zdCBDaGVja2VkSW50PFQ+ICZyaHMpOyddLAorICAgICAgICAgICAgeydu
YW1lJzogJ29wZXJhdG9yIC0nLAorICAgICAgICAgICAgICdib2R5X3N0YXJ0X2xpbmVfbnVtYmVy
JzogMCwKKyAgICAgICAgICAgICAnZW5kaW5nX2xpbmVfbnVtYmVyJzogMCwKKyAgICAgICAgICAg
ICdpc19kZWNsYXJhdGlvbic6IFRydWV9KQorCisgICAgICAgIHNlbGYucGVyZm9ybV9mdW5jdGlv
bl9kZXRlY3Rpb24oCisgICAgICAgICAgICBbJ0NoZWNrZWRJbnQ8VD4gb3BlcmF0b3IgIT0oY29u
c3QgQ2hlY2tlZEludDxUPiAmbGhzLCBjb25zdCBDaGVja2VkSW50PFQ+ICZyaHMpOyddLAorICAg
ICAgICAgICAgeyduYW1lJzogJ29wZXJhdG9yICE9JywKKyAgICAgICAgICAgICAnYm9keV9zdGFy
dF9saW5lX251bWJlcic6IDAsCisgICAgICAgICAgICAgJ2VuZGluZ19saW5lX251bWJlcic6IDAs
CisgICAgICAgICAgICAgJ2lzX2RlY2xhcmF0aW9uJzogVHJ1ZX0pCisKKyAgICAgICAgc2VsZi5w
ZXJmb3JtX2Z1bmN0aW9uX2RldGVjdGlvbigKKyAgICAgICAgICAgIFsnQ2hlY2tlZEludDxUPiBv
cGVyYXRvciArKGNvbnN0IENoZWNrZWRJbnQ8VD4gJmxocywgY29uc3QgQ2hlY2tlZEludDxUPiAm
cmhzKTsnXSwKKyAgICAgICAgICAgIHsnbmFtZSc6ICdvcGVyYXRvciArJywKKyAgICAgICAgICAg
ICAnYm9keV9zdGFydF9saW5lX251bWJlcic6IDAsCisgICAgICAgICAgICAgJ2VuZGluZ19saW5l
X251bWJlcic6IDAsCisgICAgICAgICAgICAgJ2lzX2RlY2xhcmF0aW9uJzogVHJ1ZX0pCisKKyAg
ICBkZWYgdGVzdF9pZ25vcmVfbWFjcm9zKHNlbGYpOgorICAgICAgICBzZWxmLnBlcmZvcm1fZnVu
Y3Rpb25fZGV0ZWN0aW9uKFsndm9pZCBhRnVuY3Rpb25OYW1lKGludCk7IFxcJ10sIE5vbmUpCisK
ICAgICBkZWYgdGVzdF9ub25fZnVuY3Rpb25zKHNlbGYpOgogICAgICAgICAjIFRoaXMgY2FzZSBl
eHBvc2VkIGFuIGVycm9yIGJlY2F1c2UgdGhlIG9wZW4gYnJhY2Ugd2FzIGluIHF1b3Rlcy4KICAg
ICAgICAgc2VsZi5wZXJmb3JtX2Z1bmN0aW9uX2RldGVjdGlvbigKQEAgLTI4NCw2ICszMTYsNTgg
QEAgY2xhc3MgRnVuY3Rpb25EZXRlY3Rpb25UZXN0KENwcFN0eWxlVGVzdEJhc2UpOgogICAgICAg
ICAjIFNpbXBsZSB0ZXN0IGNhc2Ugd2l0aCBzb21ldGhpbmcgdGhhdCBpcyBub3QgYSBmdW5jdGlv
bi4KICAgICAgICAgc2VsZi5wZXJmb3JtX2Z1bmN0aW9uX2RldGVjdGlvbihbJ2NsYXNzIFN0dWZm
OyddLCBOb25lKQogCisgICAgZGVmIHRlc3RfcGFyYW1ldGVyX2xpc3Qoc2VsZik6CisgICAgICAg
ICMgQSBmdW5jdGlvbiB3aXRoIG5vIGFyZ3VtZW50cy4KKyAgICAgICAgZnVuY3Rpb25fc3RhdGUg
PSBzZWxmLnBlcmZvcm1fZnVuY3Rpb25fZGV0ZWN0aW9uKAorICAgICAgICAgICAgWyd2b2lkIGZ1
bmN0aW9uTmFtZSgpOyddLAorICAgICAgICAgICAgeyduYW1lJzogJ2Z1bmN0aW9uTmFtZScsCisg
ICAgICAgICAgICAgJ2JvZHlfc3RhcnRfbGluZV9udW1iZXInOiAwLAorICAgICAgICAgICAgICdl
bmRpbmdfbGluZV9udW1iZXInOiAwLAorICAgICAgICAgICAgICdpc19kZWNsYXJhdGlvbic6IFRy
dWV9KQorICAgICAgICBwYXJhbWV0ZXJfbGlzdCA9IGZ1bmN0aW9uX3N0YXRlLmdldF9wYXJhbWV0
ZXJfbGlzdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihwYXJhbWV0ZXJfbGlzdCks
IDApCisKKyAgICAgICAgIyBBIGZ1bmN0aW9uIHdpdGggb25lIGFyZ3VtZW50LgorICAgICAgICBm
dW5jdGlvbl9zdGF0ZSA9IHNlbGYucGVyZm9ybV9mdW5jdGlvbl9kZXRlY3Rpb24oCisgICAgICAg
ICAgICBbJ3ZvaWQgZnVuY3Rpb25OYW1lKGludCk7J10sCisgICAgICAgICAgICB7J25hbWUnOiAn
ZnVuY3Rpb25OYW1lJywKKyAgICAgICAgICAgICAnYm9keV9zdGFydF9saW5lX251bWJlcic6IDAs
CisgICAgICAgICAgICAgJ2VuZGluZ19saW5lX251bWJlcic6IDAsCisgICAgICAgICAgICAgJ2lz
X2RlY2xhcmF0aW9uJzogVHJ1ZX0pCisgICAgICAgIHBhcmFtZXRlcl9saXN0ID0gZnVuY3Rpb25f
c3RhdGUuZ2V0X3BhcmFtZXRlcl9saXN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVu
KHBhcmFtZXRlcl9saXN0KSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocGFyYW1ldGVy
X2xpc3RbMF0sICgnaW50JywgJycsIDApKQorCisgICAgICAgICMgU29tZSBwYXJhbWV0ZXIgdHlw
ZSB3aXRoIG1vZGlmaWVycyBhbmQgbm8gcGFyYW1ldGVyIG5hbWVzLgorICAgICAgICBmdW5jdGlv
bl9zdGF0ZSA9IHNlbGYucGVyZm9ybV9mdW5jdGlvbl9kZXRlY3Rpb24oCisgICAgICAgICAgICBb
J3ZpcnR1YWwgdm9pZCBkZXRlcm1pbmVBUklBRHJvcEVmZmVjdHMoVmVjdG9yPFN0cmluZz4qJiwg
Y29uc3QgbG9uZyBpbnQqJik7J10sCisgICAgICAgICAgICB7J25hbWUnOiAnZGV0ZXJtaW5lQVJJ
QURyb3BFZmZlY3RzJywKKyAgICAgICAgICAgICAnYm9keV9zdGFydF9saW5lX251bWJlcic6IDAs
CisgICAgICAgICAgICAgJ2VuZGluZ19saW5lX251bWJlcic6IDAsCisgICAgICAgICAgICAgJ2lz
X2RlY2xhcmF0aW9uJzogVHJ1ZX0pCisgICAgICAgIHBhcmFtZXRlcl9saXN0ID0gZnVuY3Rpb25f
c3RhdGUuZ2V0X3BhcmFtZXRlcl9saXN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVu
KHBhcmFtZXRlcl9saXN0KSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocGFyYW1ldGVy
X2xpc3RbMF0sICgnVmVjdG9yPFN0cmluZz4qJicsICcnLCAwKSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbHMocGFyYW1ldGVyX2xpc3RbMV0sICgnY29uc3QgbG9uZyBpbnQqJicsICcnLCAwKSkK
KworICAgICAgICAjIFRyeSBwYXJzaW5nIGEgZnVuY3Rpb24gd2l0aCBhIHZlcnkgY29tcGxleCBk
ZWZpbml0aW9uLgorICAgICAgICBmdW5jdGlvbl9zdGF0ZSA9IHNlbGYucGVyZm9ybV9mdW5jdGlv
bl9kZXRlY3Rpb24oCisgICAgICAgICAgICBbJ0Fub3RoZXJUZW1wbGF0ZTxDbGFzczEsIENsYXNz
Mj4gYUZ1bmN0aW9uTmFtZShQYXNzUmVmUHRyPE15Q2xhc3M+IHBhcmFtTmFtZSwnLAorICAgICAg
ICAgICAgICdjb25zdCBPdGhlcjFDbGFzcyYgZm9vLCcsCisgICAgICAgICAgICAgJ2NvbnN0IENv
bXBsZXhUZW1wbGF0ZTxDbGFzczEsIE5lc3RlZFRlbXBsYXRlPFAxLCBQMj4gPiogY29uc3QgKiBw
YXJhbSA9IG5ldyBDb21wbGV4VGVtcGxhdGU8Q2xhc3MxLCBOZXN0ZWRUZW1wbGF0ZTxQMSwgUDI+
ID4oMzQsIDQyKSwnLAorICAgICAgICAgICAgICdpbnQqIG15Q291bnQgPSAwKTsnXSwKKyAgICAg
ICAgICAgIHsnbmFtZSc6ICdhRnVuY3Rpb25OYW1lJywKKyAgICAgICAgICAgICAnYm9keV9zdGFy
dF9saW5lX251bWJlcic6IDMsCisgICAgICAgICAgICAgJ2VuZGluZ19saW5lX251bWJlcic6IDMs
CisgICAgICAgICAgICAgJ2lzX2RlY2xhcmF0aW9uJzogVHJ1ZX0pCisgICAgICAgIHBhcmFtZXRl
cl9saXN0ID0gZnVuY3Rpb25fc3RhdGUuZ2V0X3BhcmFtZXRlcl9saXN0KCkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbHMobGVuKHBhcmFtZXRlcl9saXN0KSwgNCkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbHMocGFyYW1ldGVyX2xpc3RbMF0sICgnUGFzc1JlZlB0cjxNeUNsYXNzPicsICdwYXJh
bU5hbWUnLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocGFyYW1ldGVyX2xpc3RbMV0s
ICgnY29uc3QgT3RoZXIxQ2xhc3MmJywgJ2ZvbycsIDEpKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFscyhwYXJhbWV0ZXJfbGlzdFsyXSwgKCdjb25zdCBDb21wbGV4VGVtcGxhdGU8Q2xhc3MxLCBO
ZXN0ZWRUZW1wbGF0ZTxQMSwgUDI+ID4qIGNvbnN0IConLCAncGFyYW0nLCAyKSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbHMocGFyYW1ldGVyX2xpc3RbM10sICgnaW50KicsICdteUNvdW50Jywg
MykpCisKKwogY2xhc3MgQ3BwU3R5bGVUZXN0KENwcFN0eWxlVGVzdEJhc2UpOgogCiAgICAgIyBU
ZXN0IGdldCBsaW5lIHdpZHRoLgpAQCAtMjU0OSwxNCArMjYzMywxMiBAQCBjbGFzcyBDaGVja0Zv
ckZ1bmN0aW9uTGVuZ3Roc1Rlc3QoQ3BwU3R5bGVUZXN0QmFzZSk6CiAgICAgICAgIGVycm9yX2xl
dmVsID0gMQogICAgICAgICBlcnJvcl9saW5lcyA9IHNlbGYudHJpZ2dlcl90ZXN0X2xpbmVzKGVy
cm9yX2xldmVsKSArIDEKICAgICAgICAgdHJpZ2dlcl9sZXZlbCA9IHNlbGYudHJpZ2dlcl90ZXN0
X2xpbmVzKHNlbGYubWluX2NvbmZpZGVuY2UpCisgICAgICAgICMgU2luY2UgdGhlIGZ1bmN0aW9u
IG5hbWUgaXNuJ3QgdmFsaWQsIHRoZSBmdW5jdGlvbiBkZXRlY3Rpb24gYWxnb3JpdGhtCisgICAg
ICAgICMgd2lsbCBza2lwIGl0LCBzbyBubyBlcnJvciBpcyBwcm9kdWNlZC4KICAgICAgICAgc2Vs
Zi5hc3NlcnRfZnVuY3Rpb25fbGVuZ3Roc19jaGVjaygKICAgICAgICAgICAgICgnVEVTVF9GKCcK
ICAgICAgICAgICAgICArIHNlbGYuZnVuY3Rpb25fYm9keShlcnJvcl9saW5lcykpLAotICAgICAg
ICAgICAgKCdTbWFsbCBhbmQgZm9jdXNlZCBmdW5jdGlvbnMgYXJlIHByZWZlcnJlZDogJwotICAg
ICAgICAgICAgICdURVNUX0YgaGFzICVkIG5vbi1jb21tZW50IGxpbmVzICcKLSAgICAgICAgICAg
ICAnKGVycm9yIHRyaWdnZXJlZCBieSBleGNlZWRpbmcgJWQgbGluZXMpLicKLSAgICAgICAgICAg
ICAnICBbcmVhZGFiaWxpdHkvZm5fc2l6ZV0gWyVkXScpCi0gICAgICAgICAgICAlIChlcnJvcl9s
aW5lcywgdHJpZ2dlcl9sZXZlbCwgZXJyb3JfbGV2ZWwpKQorICAgICAgICAgICAgJycpCiAKICAg
ICBkZWYgdGVzdF9mdW5jdGlvbl9sZW5ndGhfY2hlY2tfZGVmaW5pdGlvbl9zZXZlcml0eTFfd2l0
aF9lbWJlZGRlZF9ub19saW50cyhzZWxmKToKICAgICAgICAgZXJyb3JfbGV2ZWwgPSAxCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77283</attachid>
            <date>2010-12-22 17:20:43 -0800</date>
            <delta_ts>2010-12-22 23:35:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51451-20101222172041.patch</filename>
            <type>text/plain</type>
            <size>16226</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBjZjMw
NDUxYmFhZDNiMzM4NzcwZWFjOGU2ODg1ODAzZDY4MWExZTdjLi40NTliYjY3MzI5OTU2MTczZTVj
Y2U0MTgwYmU2MDMwMDk4YWY1NTBiIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTAtMTItMjEgIERhdmlkIExldmlu
ICA8bGV2aW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIGNoZWNrLXdlYmtpdC1zdHlsZSBzaG91bGQgYmUgYWJsZSB0byBwYXJz
ZSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBwYXJhbWV0ZXJzLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE0NTEKKworICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwLnB5OgorICAgICAgICAoX0Z1bmN0aW9uU3RhdGUuYmVn
aW4pOiBBZGRlZCBpbmZvcm1hdGlvbiB0byBhbGxvdyBkZXRlcm1pbmluZyB0aGUgcGFyYW1ldGVy
cworICAgICAgICBvbiBkZW1hbmQuCisgICAgICAgIChfRnVuY3Rpb25TdGF0ZS5nZXRfcGFyYW1l
dGVyX2xpc3QpOiBSZXR1cm5zIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXJzLgorICAgICAgICAoX0Z1
bmN0aW9uU3RhdGUuZ2V0X3BhcmFtZXRlcl9saXN0LnBhcnNlX3BhcmFtZXRlcl90eXBlX2FuZF9u
YW1lKTogTmVzdGVkCisgICAgICAgIGZ1bmN0aW9uIHdoaWNoIHBhcnNlcyBhIHNpbmdsZSBwYXJh
bWV0ZXIgaW50byBhIHR5cGUgYW5kIG5hbWUuCisgICAgICAgIChkZXRlY3RfZnVuY3Rpb25zKTog
SW1wcm92ZSBmdW5jdGlvbiBkZXRlY3Rpb24gZm9yIG9wZXJhdG9yIGZ1bmN0aW9ucyBhbmQKKyAg
ICAgICAgZGV0ZXJtaW5lIHdoZXJlIHRoZSBwYXJhbWV0ZXJzIGVuZCBhbmQgcGFzcyB0aGF0IHRv
IF9GdW5jdGlvblN0YXRlLmJlZ2luLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUv
Y2hlY2tlcnMvY3BwX3VuaXR0ZXN0LnB5OgorICAgICAgICAoRnVuY3Rpb25EZXRlY3Rpb25UZXN0
LnBlcmZvcm1fZnVuY3Rpb25fZGV0ZWN0aW9uKTogUmV0dXJuIHRoZSBmdW5jdGlvbiBzdGF0ZQor
ICAgICAgICBzbyB0aGF0IHRoZSBjYWxsZXIgbWF5IHVzZSBpdCB0byBkbyBtb3JlIHRlc3RzLgor
ICAgICAgICAoRnVuY3Rpb25EZXRlY3Rpb25UZXN0LnRlc3RfZnVuY3Rpb25fZGVjbGFyYXRpb25f
ZGV0ZWN0aW9uKTogQWRkZWQgbW9yZSBmdW5jdGlvbgorICAgICAgICBkZXRlY3Rpb24gdGVzdCB0
byB2ZXJpZnkgdGhhdCB3ZSBjYXRjaCB0aGUgb3BlcmF0b3IgZnVuY3Rpb25zLgorICAgICAgICAo
RnVuY3Rpb25EZXRlY3Rpb25UZXN0LnRlc3RfaWdub3JlX21hY3Jvcyk6IFZlcmlmeSB0aGF0IGZ1
bmN0aW9uIGRldGVjdGlvbiBpZ25vcmVzIG1hY3Jvcy4KKyAgICAgICAgKEZ1bmN0aW9uRGV0ZWN0
aW9uVGVzdC50ZXN0X3BhcmFtZXRlcl9saXN0KTogQWRkZWQgdGVzdHMgdG8gdmVyaWZ5IHRoZSBw
YXJhbWV0ZXIgcGFyc2luZy4KKyAgICAgICAgKENoZWNrRm9yRnVuY3Rpb25MZW5ndGhzVGVzdC50
ZXN0X2Z1bmN0aW9uX2xlbmd0aF9jaGVja19kZWZpbml0aW9uX3NldmVyaXR5MV9mb3JfYmFkX3Rl
c3RfZG9lc250X2JyZWFrKTogUmVtb3ZlZAorICAgICAgICBiZWNhdXNlIHRoZSBlcnJvci4gVGhl
IHRlc3QgaXMgYWJvdXQgdGhlIGJhZCBmdW5jdGlvbiBuYW1lLiBGaXhpbmcgdGhlIG5hbWUgbWFr
ZXMgdGhlIHRlc3QgZXhhY3RseSBsaWtlCisgICAgICAgIHRlc3RfZnVuY3Rpb25fbGVuZ3RoX2No
ZWNrX2RlZmluaXRpb25fc2V2ZXJpdHkxX2Zvcl90ZXN0LgorCiAyMDEwLTEyLTIyICBEYXZpZCBM
ZXZpbiAgPGxldmluQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaGluaWNo
aXJvIEhhbWFqaS4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hl
Y2tlcnMvY3BwLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy9jcHAu
cHkKaW5kZXggOTRlNWJkZGE0Mzk4ZTFiYzU1ZWU3MDk5MTBmMjg1Y2EzYjUyYzVlYi4uMmU2MGRj
OTYzMTA3MWI2ZmU0ZGI2Yzc5OTcwZTQ1OTYzOGE3ZTY4MyAxMDA2NDQKLS0tIGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy9jcHAucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9zdHlsZS9jaGVja2Vycy9jcHAucHkKQEAgLTMyOSw3ICszMjksNyBAQCBjbGFzcyBf
RnVuY3Rpb25TdGF0ZShvYmplY3QpOgogICAgICAgICBzZWxmLmJvZHlfc3RhcnRfbGluZV9udW1i
ZXIgPSAtMTAwMAogICAgICAgICBzZWxmLmVuZGluZ19saW5lX251bWJlciA9IC0xMDAwCiAKLSAg
ICBkZWYgYmVnaW4oc2VsZiwgZnVuY3Rpb25fbmFtZSwgYm9keV9zdGFydF9saW5lX251bWJlciwg
ZW5kaW5nX2xpbmVfbnVtYmVyLCBpc19kZWNsYXJhdGlvbik6CisgICAgZGVmIGJlZ2luKHNlbGYs
IGZ1bmN0aW9uX25hbWUsIGJvZHlfc3RhcnRfbGluZV9udW1iZXIsIGVuZGluZ19saW5lX251bWJl
ciwgaXNfZGVjbGFyYXRpb24sIHBhcmFtZXRlcl9zdGFydCwgcGFyYW1ldGVyX2VuZCwgY2xlYW5f
bGluZXMpOgogICAgICAgICAiIiJTdGFydCBhbmFseXppbmcgZnVuY3Rpb24gYm9keS4KIAogICAg
ICAgICBBcmdzOgpAQCAtMzQ0LDYgKzM0NCw4OCBAQCBjbGFzcyBfRnVuY3Rpb25TdGF0ZShvYmpl
Y3QpOgogICAgICAgICBzZWxmLmJvZHlfc3RhcnRfbGluZV9udW1iZXIgPSBib2R5X3N0YXJ0X2xp
bmVfbnVtYmVyCiAgICAgICAgIHNlbGYuZW5kaW5nX2xpbmVfbnVtYmVyID0gZW5kaW5nX2xpbmVf
bnVtYmVyCiAgICAgICAgIHNlbGYuaXNfZGVjbGFyYXRpb24gPSBpc19kZWNsYXJhdGlvbgorICAg
ICAgICBzZWxmLnBhcmFtZXRlcl9zdGFydCA9IHBhcmFtZXRlcl9zdGFydAorICAgICAgICBzZWxm
LnBhcmFtZXRlcl9lbmQgPSBwYXJhbWV0ZXJfZW5kCisgICAgICAgIHNlbGYuX3BhcmFtZXRlcl9s
aXN0ID0gTm9uZQorICAgICAgICBzZWxmLl9jbGVhbl9saW5lcyA9IGNsZWFuX2xpbmVzCisKKyAg
ICBkZWYgZ2V0X3BhcmFtZXRlcl9saXN0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9wYXJhbWV0
ZXJfbGlzdDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9wYXJhbWV0ZXJfbGlzdAorCisgICAg
ICAgIGRlZiBwYXJzZV9wYXJhbWV0ZXJfdHlwZV9hbmRfbmFtZShhbGxfcGFyYW1ldGVycywgc2lt
cGxpZmllZF9wYXJhbWV0ZXJzLCBzdGFydF9pbmRleCwgZW5kX2luZGV4KToKKyAgICAgICAgICAg
IGN1cnJlbnRfcGFyYW1ldGVyID0gYWxsX3BhcmFtZXRlcnNbc3RhcnRfaW5kZXg6ZW5kX2luZGV4
XQorICAgICAgICAgICAgY3VycmVudF9zaW1wbGlmaWVkX3BhcmFtZXRlciA9IHNpbXBsaWZpZWRf
cGFyYW1ldGVyc1tzdGFydF9pbmRleDplbmRfaW5kZXhdCisKKyAgICAgICAgICAgICMgVGhlIGZp
cnN0IHNwYWNlIGZyb20gdGhlIHJpZ2h0IGluIHRoZSBzaW1wbGlmaWVkIHBhcmFtZXRlciBpcyB3
aGVyZSB0aGUgcGFyYW1ldGVyIG5hbWUgc3RhcnQKKyAgICAgICAgICAgICMgdW5sZXNzIHRoZSBm
aXJzdCBzcGFjZSBpcyBiZWZvcmUgYW55IGNvbnRlbnQgaW4gdGhlIHNpbXBsaWZpZWQgcGFyYW1l
dGVyLgorICAgICAgICAgICAgYmVmb3JlX3R5cGVfbmFtZV9pbmRleCA9IGN1cnJlbnRfc2ltcGxp
ZmllZF9wYXJhbWV0ZXIucnN0cmlwKCkucmZpbmQoJyAnKQorICAgICAgICAgICAgaWYgYmVmb3Jl
X3R5cGVfbmFtZV9pbmRleCA9PSAtMSBvciBub3QgY3VycmVudF9zaW1wbGlmaWVkX3BhcmFtZXRl
cls6YmVmb3JlX3R5cGVfbmFtZV9pbmRleF0uc3RyaXAoKToKKyAgICAgICAgICAgICAgICBiZWZv
cmVfdHlwZV9uYW1lX2luZGV4ID0gbGVuKGN1cnJlbnRfcGFyYW1ldGVyKQorICAgICAgICAgICAg
cGFyYW1fdHlwZSA9IGN1cnJlbnRfcGFyYW1ldGVyWzpiZWZvcmVfdHlwZV9uYW1lX2luZGV4XS5z
dHJpcCgpCisKKyAgICAgICAgICAgICMgUmVtb3ZlIGV2ZXJ5dGhpbmcgYWZ0ZXIgYSA9IGluIHRo
ZSBwYXJhbWV0ZXIgbmFtZSAoZS5nICdpbnQgaSA9IGludCg1KScpLgorICAgICAgICAgICAgcGFy
YW1fbmFtZSA9IHN1YihyJz0uKicsICcnLCBjdXJyZW50X3BhcmFtZXRlcltiZWZvcmVfdHlwZV9u
YW1lX2luZGV4ICsgMTpdKS5zdHJpcCgpCisgICAgICAgICAgICByZXR1cm4gKHBhcmFtX3R5cGUs
IHBhcmFtX25hbWUpCisKKyAgICAgICAgIyBGb3JtIGEgc2luZ2xlIHN0cmluZyB3aXRoIGFsbCBw
YXJhbWV0ZXJzLiBUcmltbWluZyB0aGUgZmlyc3QgYW5kIGxhc3QgbGluZXMKKyAgICAgICAgIyB0
byBlbnN1cmUgb25seSB0aGUgcGFyYW1ldGVycyByZW1haW4gd2l0aG91dCB0aGUgc3Vycm91bmRp
bmcgcGFyZW50aGVzaXMuCisgICAgICAgIHBhcmFtZXRlcl9saW5lcyA9IHNlbGYuX2NsZWFuX2xp
bmVzLmVsaWRlZFtzZWxmLnBhcmFtZXRlcl9zdGFydFswXTpzZWxmLnBhcmFtZXRlcl9lbmRbMF0g
KyAxXQorICAgICAgICBwYXJhbWV0ZXJfbGluZXNbLTFdID0gcGFyYW1ldGVyX2xpbmVzWy0xXVs6
c2VsZi5wYXJhbWV0ZXJfZW5kWzFdIC0gMV0KKyAgICAgICAgcGFyYW1ldGVyX2xpbmVzWzBdID0g
cGFyYW1ldGVyX2xpbmVzWzBdW3NlbGYucGFyYW1ldGVyX3N0YXJ0WzFdICsgMTpdCisgICAgICAg
IGFsbF9wYXJhbWV0ZXJzID0gJyAnLmpvaW4ocGFyYW1ldGVyX2xpbmVzKQorCisgICAgICAgICMg
U3RvcmUgdGhlIGxlbmd0aHMgb2YgZWFjaCBsaW5lIChhZGRpbmcgMSBkdWUgdG8gdGhlIHNwYWNl
IGFkZGVkIGR1cmluZyB0aGUgam9pbikgdG8KKyAgICAgICAgIyBtYWtlIGl0IGVhc2llciB0byBk
ZXRlcm1pbmUgd2hhdCBsaW5lIGVhY2ggcGFyYW1ldGVyIGlzIG9uIHdoZW4gdGhleSBhcmUgcGFy
c2VkLgorICAgICAgICBsaW5lX2xlbmd0aHMgPSBbbGVuKGxpbmUpICsgMSBmb3IgbGluZSBpbiBw
YXJhbWV0ZXJfbGluZXNdCisKKyAgICAgICAgIyBSZW1vdmUgaXRlbXMgdGhhdCBtYWtlIGl0IGhh
cmQgdG8gZG8gc2ltcGxlIHBhcnNpbmcgb2YgdGhlIHBhcmFtZXRlcnMuCisgICAgICAgIGFsbF9z
aW1wbGlmaWNhdGlvbnMgPSAoCisgICAgICAgICAgICAjIFJlbW92ZSB0ZW1wbGF0ZSBwYXJhbWV0
ZXJzLCBmdW5jdGlvbiBkZWNsYXJhdGlvbiBwYXJhbWV0ZXJzLCBldGMuCisgICAgICAgICAgICBy
Jyg8W14+XSo/Pil8KFwoW15cKV0qP1wpKXwoXHtbXlx9XSo/XH0pJywKKyAgICAgICAgICAgICMg
UmVtb3ZlIGV2ZXJ5dGhpbmcgYWZ0ZXIgYW4gPS4KKyAgICAgICAgICAgIHInPVteLF0qJywKKyAg
ICAgICAgICAgICMgUmVtb3ZlIG1vZGlmaWVycyBsaWtlICYsICoKKyAgICAgICAgICAgIHInW15B
LVphLXowLTksIF0rJywKKyAgICAgICAgICAgICMgUmVtb3ZlIG1vZGlmaWVycyBsaWtlIGxvbmcg
YW5kIGNvbnN0LgorICAgICAgICAgICAgcidcYihsb25nfGNvbnN0fHNob3J0KVxzKyg/PVtBLVph
LXpdKScpCisgICAgICAgIHNpbXBsaWZpZWRfcGFyYW1ldGVycyA9IGFsbF9wYXJhbWV0ZXJzCisg
ICAgICAgIGZvciBzaW1wbGlmaWNhdGlvbiBpbiBhbGxfc2ltcGxpZmljYXRpb25zOgorICAgICAg
ICAgICAgc2ltcGxpZmllZF9wYXJhbWV0ZXJzID0gaXRlcmF0aXZlbHlfcmVwbGFjZV9tYXRjaGVz
X3dpdGhfY2hhcihzaW1wbGlmaWNhdGlvbiwgJyAnLCBzaW1wbGlmaWVkX3BhcmFtZXRlcnMpCisK
KyAgICAgICAgIyBBZGQgYSBjb21tYSBhZnRlciB0aGUgbGFzdCBwYXJhbWV0ZXIgc28gdGhhdCBl
YWNoIHBhcmFtZXRlciBlbmRzIHdpdGggYSBjb21tYS4KKyAgICAgICAgaWYgc2ltcGxpZmllZF9w
YXJhbWV0ZXJzLnN0cmlwKCk6CisgICAgICAgICAgICBzaW1wbGlmaWVkX3BhcmFtZXRlcnMgKz0g
JywnCisgICAgICAgICAgICBsaW5lX2xlbmd0aHNbLTFdICs9IDEKKworICAgICAgICAjIEZvcm0g
dGhlIGxpc3Qgb2YgdGhlIHBhcmFtZXRlcnMuCisgICAgICAgIHNlbGYuX3BhcmFtZXRlcl9saXN0
ID0gW10KKyAgICAgICAgcHJldmlvdXNfcGFyYW1ldGVyX2luZGV4ID0gMAorICAgICAgICBwcmV2
aW91c19saW5lX2xlbmd0aHMgPSAwCisgICAgICAgIGN1cnJlbnRfcGFyYW1ldGVyX2xpbmUgPSAw
CisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAjIEZpbmQgdGhlIGVuZCBvZiB0aGUg
Y3VycmVudCBwYXJhbWV0ZXIuCisgICAgICAgICAgICBuZXh0X2NvbW1hX2luZGV4ID0gc2ltcGxp
ZmllZF9wYXJhbWV0ZXJzLmZpbmQoJywnLCAgcHJldmlvdXNfcGFyYW1ldGVyX2luZGV4KQorICAg
ICAgICAgICAgaWYgbmV4dF9jb21tYV9pbmRleCA9PSAtMTogICMgTm8gY29tbWEgbWVhbnMgdGhh
dCBhbGwgcGFyYW1ldGVycyBoYXZlIGJlZW4gcGFyc2VkLgorICAgICAgICAgICAgICAgIGJyZWFr
CisKKyAgICAgICAgICAgICMgSXMgdGhlIGNvbW1hIG9uIGEgbmV3IGxpbmU/CisgICAgICAgICAg
ICB3aGlsZSBuZXh0X2NvbW1hX2luZGV4ID49IHByZXZpb3VzX2xpbmVfbGVuZ3RocyArIGxpbmVf
bGVuZ3Roc1tjdXJyZW50X3BhcmFtZXRlcl9saW5lXToKKyAgICAgICAgICAgICAgICBwcmV2aW91
c19saW5lX2xlbmd0aHMgKz0gbGluZV9sZW5ndGhzW2N1cnJlbnRfcGFyYW1ldGVyX2xpbmVdCisg
ICAgICAgICAgICAgICAgY3VycmVudF9wYXJhbWV0ZXJfbGluZSArPSAxCisKKyAgICAgICAgICAg
ICMgUGFyc2UgdGhlIHBhcmFtZXRlciBpbnRvIGEgdHlwZSBhbmQgcGFyYW1ldGVyIG5hbWUuCisg
ICAgICAgICAgICBwYXJhbWV0ZXIgPSBsaXN0KHBhcnNlX3BhcmFtZXRlcl90eXBlX2FuZF9uYW1l
KGFsbF9wYXJhbWV0ZXJzLCBzaW1wbGlmaWVkX3BhcmFtZXRlcnMsIHByZXZpb3VzX3BhcmFtZXRl
cl9pbmRleCwgbmV4dF9jb21tYV9pbmRleCkpCisgICAgICAgICAgICAjIEluY2x1ZGUgdGhlIGxp
bmUgbnVibWVyIHRvby4KKyAgICAgICAgICAgIHBhcmFtZXRlci5hcHBlbmQoY3VycmVudF9wYXJh
bWV0ZXJfbGluZSArIHNlbGYucGFyYW1ldGVyX3N0YXJ0WzBdKQorICAgICAgICAgICAgc2VsZi5f
cGFyYW1ldGVyX2xpc3QuYXBwZW5kKHR1cGxlKHBhcmFtZXRlcikpCisKKyAgICAgICAgICAgICMg
TW92ZSBvbiB0byB0aGUgbmV4dCBwYXJhbWV0ZXIgKHdoaWNoIGlzIGp1c3QgYWZ0ZXIgdGhlIHBy
ZXZpb3VzIGNvbW1hIGZvdW5kKS4KKyAgICAgICAgICAgIHByZXZpb3VzX3BhcmFtZXRlcl9pbmRl
eCA9IG5leHRfY29tbWFfaW5kZXggKyAxCisKKyAgICAgICAgIyBTdG9yZSB0aGUgZmluYWwgcmVz
dWx0IGFzIGEgdHVwbGUgc2luY2UgdGhhdCBpcyBpbW11dGFibGUuCisgICAgICAgIHNlbGYuX3Bh
cmFtZXRlcl9saXN0ID0gdHVwbGUoc2VsZi5fcGFyYW1ldGVyX2xpc3QpCisgICAgICAgIHJldHVy
biBzZWxmLl9wYXJhbWV0ZXJfbGlzdAogCiAgICAgZGVmIGNvdW50KHNlbGYsIGxpbmVfbnVtYmVy
KToKICAgICAgICAgIiIiQ291bnQgbGluZSBpbiBjdXJyZW50IGZ1bmN0aW9uIGJvZHkuIiIiCkBA
IC0xMjEzLDcgKzEyOTUsMTEgQEAgZGVmIGRldGVjdF9mdW5jdGlvbnMoY2xlYW5fbGluZXMsIGxp
bmVfbnVtYmVyLCBmdW5jdGlvbl9zdGF0ZSwgZXJyb3IpOgogICAgIHJhdyA9IGNsZWFuX2xpbmVz
LnJhd19saW5lcwogICAgIHJhd19saW5lID0gcmF3W2xpbmVfbnVtYmVyXQogCi0gICAgcmVnZXhw
ID0gcidccyooXHcoXHd8Ojp8XCp8XCZ8XHN8PHw+fCx8fikqKVwoJyAgIyBkZWNscyAqICYgc3Bh
Y2U6Om5hbWUoIC4uLgorICAgICMgTGluZXMgZW5kaW5nIHdpdGggYSBcIGluZGljYXRlIGEgbWFj
cm8uIERvbid0IHRyeSB0byBjaGVjayB0aGVtLgorICAgIGlmIHJhd19saW5lLmVuZHN3aXRoKCdc
XCcpOgorICAgICAgICByZXR1cm4KKworICAgIHJlZ2V4cCA9IHInXHMqKFx3KFx3fDo6fFwqfFwm
fFxzfDx8PnwsfH58KG9wZXJhdG9yXHMqKC98LXw9fCF8XCspKykpKilcKCcgICMgZGVjbHMgKiAm
IHNwYWNlOjpuYW1lKCAuLi4KICAgICBtYXRjaF9yZXN1bHQgPSBtYXRjaChyZWdleHAsIGxpbmUp
CiAgICAgaWYgbm90IG1hdGNoX3Jlc3VsdDoKICAgICAgICAgcmV0dXJuCkBAIC0xMjMyLDcgKzEz
MTgsNyBAQCBkZWYgZGV0ZWN0X2Z1bmN0aW9ucyhjbGVhbl9saW5lcywgbGluZV9udW1iZXIsIGZ1
bmN0aW9uX3N0YXRlLCBlcnJvcik6CiAgICAgICAgICAgICAjIFJlcGxhY2UgdGVtcGxhdGUgY29u
c3RydWN0cyB3aXRoIF8gc28gdGhhdCBubyBzcGFjZXMgcmVtYWluIGluIHRoZSBmdW5jdGlvbiBu
YW1lLAogICAgICAgICAgICAgIyB3aGlsZSBrZWVwaW5nIHRoZSBjb2x1bW4gbnVtYmVycyBvZiBv
dGhlciBjaGFyYWN0ZXJzIHRoZSBzYW1lIGFzICJsaW5lIi4KICAgICAgICAgICAgIGxpbmVfd2l0
aF9ub190ZW1wbGF0ZXMgPSBpdGVyYXRpdmVseV9yZXBsYWNlX21hdGNoZXNfd2l0aF9jaGFyKHIn
PFtePD5dKj4nLCAnXycsIGxpbmUpCi0gICAgICAgICAgICBtYXRjaF9mdW5jdGlvbiA9IHNlYXJj
aChyJygoXHd8Onw8fD58LHx+KSopXCgnLCBsaW5lX3dpdGhfbm9fdGVtcGxhdGVzKQorICAgICAg
ICAgICAgbWF0Y2hfZnVuY3Rpb24gPSBzZWFyY2gocicoKFx3fDp8PHw+fCx8fnwob3BlcmF0b3Jc
cyooL3wtfD18IXxcKykrKSkqKVwoJywgbGluZV93aXRoX25vX3RlbXBsYXRlcykKICAgICAgICAg
ICAgIGlmIG5vdCBtYXRjaF9mdW5jdGlvbjoKICAgICAgICAgICAgICAgICByZXR1cm4gICMgVGhl
ICcoJyBtdXN0IGhhdmUgYmVlbiBpbnNpZGUgb2YgYSB0ZW1wbGF0ZS4KIApAQCAtMTI0NiwxMyAr
MTMzMiwyMSBAQCBkZWYgZGV0ZWN0X2Z1bmN0aW9ucyhjbGVhbl9saW5lcywgbGluZV9udW1iZXIs
IGZ1bmN0aW9uX3N0YXRlLCBlcnJvcik6CiAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICs9
IHBhcmFtZXRlcl9yZWdleHAuZ3JvdXAoMSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAg
ICAgICAgZnVuY3Rpb24gKz0gJygpJworCisgICAgICAgICAgICBwYXJhbWV0ZXJfc3RhcnQgPSAo
bGluZV9udW1iZXIsIG1hdGNoX2Z1bmN0aW9uLmVuZCgxKSkKKyAgICAgICAgICAgIGNsb3NlX3Jl
c3VsdCA9IGNsb3NlX2V4cHJlc3Npb24oY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBwYXJhbWV0
ZXJfc3RhcnRbMV0pCisgICAgICAgICAgICBpZiBjbG9zZV9yZXN1bHRbMV0gPT0gbGVuKGNsZWFu
X2xpbmVzLmVsaWRlZCk6CisgICAgICAgICAgICAgICAgIyBObyBlbmQgd2FzIGZvdW5kLgorICAg
ICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgcGFyYW1ldGVyX2VuZCA9IChjbG9zZV9y
ZXN1bHRbMV0sIGNsb3NlX3Jlc3VsdFsyXSkKKwogICAgICAgICAgICAgaXNfZGVjbGFyYXRpb24g
PSBib29sKHNlYXJjaChyJ15bXntdKjsnLCBzdGFydF9saW5lKSkKICAgICAgICAgICAgIGlmIGlz
X2RlY2xhcmF0aW9uOgogICAgICAgICAgICAgICAgIGVuZGluZ19saW5lX251bWJlciA9IHN0YXJ0
X2xpbmVfbnVtYmVyCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIG9wZW5fYnJh
Y2VfaW5kZXggPSBzdGFydF9saW5lLmZpbmQoJ3snKQogICAgICAgICAgICAgICAgIGVuZGluZ19s
aW5lX251bWJlciA9IGNsb3NlX2V4cHJlc3Npb24oY2xlYW5fbGluZXMsIHN0YXJ0X2xpbmVfbnVt
YmVyLCBvcGVuX2JyYWNlX2luZGV4KVsxXQotICAgICAgICAgICAgZnVuY3Rpb25fc3RhdGUuYmVn
aW4oZnVuY3Rpb24sIHN0YXJ0X2xpbmVfbnVtYmVyLCBlbmRpbmdfbGluZV9udW1iZXIsIGlzX2Rl
Y2xhcmF0aW9uKQorICAgICAgICAgICAgZnVuY3Rpb25fc3RhdGUuYmVnaW4oZnVuY3Rpb24sIHN0
YXJ0X2xpbmVfbnVtYmVyLCBlbmRpbmdfbGluZV9udW1iZXIsIGlzX2RlY2xhcmF0aW9uLCBwYXJh
bWV0ZXJfc3RhcnQsIHBhcmFtZXRlcl9lbmQsIGNsZWFuX2xpbmVzKQogICAgICAgICAgICAgcmV0
dXJuCiAKICAgICAjIE5vIGJvZHkgZm9yIHRoZSBmdW5jdGlvbiAob3IgZXZpZGVuY2Ugb2YgYSBu
b24tZnVuY3Rpb24pIHdhcyBmb3VuZC4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvc3R5bGUvY2hlY2tlcnMvY3BwX3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9zdHlsZS9jaGVja2Vycy9jcHBfdW5pdHRlc3QucHkKaW5kZXggNzBkZjFlYTVlY2NlMTgyNzg5
YmQwZDYwYzk0NDlmOTlmZjA5MWE0Ni4uZjA5NzY1NjZlZGIwOGZiZTU3MmQ5ZDBmYWQ3ZTE0YzJk
ZjBjZGYzNyAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vy
cy9jcHBfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVj
a2Vycy9jcHBfdW5pdHRlc3QucHkKQEAgLTI1MCw2ICsyNTAsNyBAQCBjbGFzcyBGdW5jdGlvbkRl
dGVjdGlvblRlc3QoQ3BwU3R5bGVUZXN0QmFzZSk6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxz
KGZ1bmN0aW9uX3N0YXRlLmJvZHlfc3RhcnRfbGluZV9udW1iZXIsIGZ1bmN0aW9uX2luZm9ybWF0
aW9uWydib2R5X3N0YXJ0X2xpbmVfbnVtYmVyJ10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxz
KGZ1bmN0aW9uX3N0YXRlLmVuZGluZ19saW5lX251bWJlciwgZnVuY3Rpb25faW5mb3JtYXRpb25b
J2VuZGluZ19saW5lX251bWJlciddKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmdW5jdGlv
bl9zdGF0ZS5pc19kZWNsYXJhdGlvbiwgZnVuY3Rpb25faW5mb3JtYXRpb25bJ2lzX2RlY2xhcmF0
aW9uJ10pCisgICAgICAgIHJldHVybiBmdW5jdGlvbl9zdGF0ZQogCiAgICAgZGVmIHRlc3RfYmFz
aWNfZnVuY3Rpb25fZGV0ZWN0aW9uKHNlbGYpOgogICAgICAgICBzZWxmLnBlcmZvcm1fZnVuY3Rp
b25fZGV0ZWN0aW9uKApAQCAtMjY4LDYgKzI2OSwzNyBAQCBjbGFzcyBGdW5jdGlvbkRldGVjdGlv
blRlc3QoQ3BwU3R5bGVUZXN0QmFzZSk6CiAgICAgICAgICAgICAgJ2VuZGluZ19saW5lX251bWJl
cic6IDAsCiAgICAgICAgICAgICAgJ2lzX2RlY2xhcmF0aW9uJzogVHJ1ZX0pCiAKKyAgICAgICAg
c2VsZi5wZXJmb3JtX2Z1bmN0aW9uX2RldGVjdGlvbigKKyAgICAgICAgICAgIFsnQ2hlY2tlZElu
dDxUPiBvcGVyYXRvciAvKGNvbnN0IENoZWNrZWRJbnQ8VD4gJmxocywgY29uc3QgQ2hlY2tlZElu
dDxUPiAmcmhzKTsnXSwKKyAgICAgICAgICAgIHsnbmFtZSc6ICdvcGVyYXRvciAvJywKKyAgICAg
ICAgICAgICAnYm9keV9zdGFydF9saW5lX251bWJlcic6IDAsCisgICAgICAgICAgICAgJ2VuZGlu
Z19saW5lX251bWJlcic6IDAsCisgICAgICAgICAgICAgJ2lzX2RlY2xhcmF0aW9uJzogVHJ1ZX0p
CisKKyAgICAgICAgc2VsZi5wZXJmb3JtX2Z1bmN0aW9uX2RldGVjdGlvbigKKyAgICAgICAgICAg
IFsnQ2hlY2tlZEludDxUPiBvcGVyYXRvciAtKGNvbnN0IENoZWNrZWRJbnQ8VD4gJmxocywgY29u
c3QgQ2hlY2tlZEludDxUPiAmcmhzKTsnXSwKKyAgICAgICAgICAgIHsnbmFtZSc6ICdvcGVyYXRv
ciAtJywKKyAgICAgICAgICAgICAnYm9keV9zdGFydF9saW5lX251bWJlcic6IDAsCisgICAgICAg
ICAgICAgJ2VuZGluZ19saW5lX251bWJlcic6IDAsCisgICAgICAgICAgICAnaXNfZGVjbGFyYXRp
b24nOiBUcnVlfSkKKworICAgICAgICBzZWxmLnBlcmZvcm1fZnVuY3Rpb25fZGV0ZWN0aW9uKAor
ICAgICAgICAgICAgWydDaGVja2VkSW50PFQ+IG9wZXJhdG9yICE9KGNvbnN0IENoZWNrZWRJbnQ8
VD4gJmxocywgY29uc3QgQ2hlY2tlZEludDxUPiAmcmhzKTsnXSwKKyAgICAgICAgICAgIHsnbmFt
ZSc6ICdvcGVyYXRvciAhPScsCisgICAgICAgICAgICAgJ2JvZHlfc3RhcnRfbGluZV9udW1iZXIn
OiAwLAorICAgICAgICAgICAgICdlbmRpbmdfbGluZV9udW1iZXInOiAwLAorICAgICAgICAgICAg
ICdpc19kZWNsYXJhdGlvbic6IFRydWV9KQorCisgICAgICAgIHNlbGYucGVyZm9ybV9mdW5jdGlv
bl9kZXRlY3Rpb24oCisgICAgICAgICAgICBbJ0NoZWNrZWRJbnQ8VD4gb3BlcmF0b3IgKyhjb25z
dCBDaGVja2VkSW50PFQ+ICZsaHMsIGNvbnN0IENoZWNrZWRJbnQ8VD4gJnJocyk7J10sCisgICAg
ICAgICAgICB7J25hbWUnOiAnb3BlcmF0b3IgKycsCisgICAgICAgICAgICAgJ2JvZHlfc3RhcnRf
bGluZV9udW1iZXInOiAwLAorICAgICAgICAgICAgICdlbmRpbmdfbGluZV9udW1iZXInOiAwLAor
ICAgICAgICAgICAgICdpc19kZWNsYXJhdGlvbic6IFRydWV9KQorCisgICAgZGVmIHRlc3RfaWdu
b3JlX21hY3JvcyhzZWxmKToKKyAgICAgICAgc2VsZi5wZXJmb3JtX2Z1bmN0aW9uX2RldGVjdGlv
bihbJ3ZvaWQgYUZ1bmN0aW9uTmFtZShpbnQpOyBcXCddLCBOb25lKQorCiAgICAgZGVmIHRlc3Rf
bm9uX2Z1bmN0aW9ucyhzZWxmKToKICAgICAgICAgIyBUaGlzIGNhc2UgZXhwb3NlZCBhbiBlcnJv
ciBiZWNhdXNlIHRoZSBvcGVuIGJyYWNlIHdhcyBpbiBxdW90ZXMuCiAgICAgICAgIHNlbGYucGVy
Zm9ybV9mdW5jdGlvbl9kZXRlY3Rpb24oCkBAIC0yODQsNiArMzE2LDU4IEBAIGNsYXNzIEZ1bmN0
aW9uRGV0ZWN0aW9uVGVzdChDcHBTdHlsZVRlc3RCYXNlKToKICAgICAgICAgIyBTaW1wbGUgdGVz
dCBjYXNlIHdpdGggc29tZXRoaW5nIHRoYXQgaXMgbm90IGEgZnVuY3Rpb24uCiAgICAgICAgIHNl
bGYucGVyZm9ybV9mdW5jdGlvbl9kZXRlY3Rpb24oWydjbGFzcyBTdHVmZjsnXSwgTm9uZSkKIAor
ICAgIGRlZiB0ZXN0X3BhcmFtZXRlcl9saXN0KHNlbGYpOgorICAgICAgICAjIEEgZnVuY3Rpb24g
d2l0aCBubyBhcmd1bWVudHMuCisgICAgICAgIGZ1bmN0aW9uX3N0YXRlID0gc2VsZi5wZXJmb3Jt
X2Z1bmN0aW9uX2RldGVjdGlvbigKKyAgICAgICAgICAgIFsndm9pZCBmdW5jdGlvbk5hbWUoKTsn
XSwKKyAgICAgICAgICAgIHsnbmFtZSc6ICdmdW5jdGlvbk5hbWUnLAorICAgICAgICAgICAgICdi
b2R5X3N0YXJ0X2xpbmVfbnVtYmVyJzogMCwKKyAgICAgICAgICAgICAnZW5kaW5nX2xpbmVfbnVt
YmVyJzogMCwKKyAgICAgICAgICAgICAnaXNfZGVjbGFyYXRpb24nOiBUcnVlfSkKKyAgICAgICAg
cGFyYW1ldGVyX2xpc3QgPSBmdW5jdGlvbl9zdGF0ZS5nZXRfcGFyYW1ldGVyX2xpc3QoKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4ocGFyYW1ldGVyX2xpc3QpLCAwKQorCisgICAgICAg
ICMgQSBmdW5jdGlvbiB3aXRoIG9uZSBhcmd1bWVudC4KKyAgICAgICAgZnVuY3Rpb25fc3RhdGUg
PSBzZWxmLnBlcmZvcm1fZnVuY3Rpb25fZGV0ZWN0aW9uKAorICAgICAgICAgICAgWyd2b2lkIGZ1
bmN0aW9uTmFtZShpbnQpOyddLAorICAgICAgICAgICAgeyduYW1lJzogJ2Z1bmN0aW9uTmFtZScs
CisgICAgICAgICAgICAgJ2JvZHlfc3RhcnRfbGluZV9udW1iZXInOiAwLAorICAgICAgICAgICAg
ICdlbmRpbmdfbGluZV9udW1iZXInOiAwLAorICAgICAgICAgICAgICdpc19kZWNsYXJhdGlvbic6
IFRydWV9KQorICAgICAgICBwYXJhbWV0ZXJfbGlzdCA9IGZ1bmN0aW9uX3N0YXRlLmdldF9wYXJh
bWV0ZXJfbGlzdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihwYXJhbWV0ZXJfbGlz
dCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBhcmFtZXRlcl9saXN0WzBdLCAoJ2lu
dCcsICcnLCAwKSkKKworICAgICAgICAjIFNvbWUgcGFyYW1ldGVyIHR5cGUgd2l0aCBtb2RpZmll
cnMgYW5kIG5vIHBhcmFtZXRlciBuYW1lcy4KKyAgICAgICAgZnVuY3Rpb25fc3RhdGUgPSBzZWxm
LnBlcmZvcm1fZnVuY3Rpb25fZGV0ZWN0aW9uKAorICAgICAgICAgICAgWyd2aXJ0dWFsIHZvaWQg
ZGV0ZXJtaW5lQVJJQURyb3BFZmZlY3RzKFZlY3RvcjxTdHJpbmc+KiYsIGNvbnN0IGxvbmcgaW50
KiYpOyddLAorICAgICAgICAgICAgeyduYW1lJzogJ2RldGVybWluZUFSSUFEcm9wRWZmZWN0cycs
CisgICAgICAgICAgICAgJ2JvZHlfc3RhcnRfbGluZV9udW1iZXInOiAwLAorICAgICAgICAgICAg
ICdlbmRpbmdfbGluZV9udW1iZXInOiAwLAorICAgICAgICAgICAgICdpc19kZWNsYXJhdGlvbic6
IFRydWV9KQorICAgICAgICBwYXJhbWV0ZXJfbGlzdCA9IGZ1bmN0aW9uX3N0YXRlLmdldF9wYXJh
bWV0ZXJfbGlzdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihwYXJhbWV0ZXJfbGlz
dCksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBhcmFtZXRlcl9saXN0WzBdLCAoJ1Zl
Y3RvcjxTdHJpbmc+KiYnLCAnJywgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBhcmFt
ZXRlcl9saXN0WzFdLCAoJ2NvbnN0IGxvbmcgaW50KiYnLCAnJywgMCkpCisKKyAgICAgICAgIyBU
cnkgcGFyc2luZyBhIGZ1bmN0aW9uIHdpdGggYSB2ZXJ5IGNvbXBsZXggZGVmaW5pdGlvbi4KKyAg
ICAgICAgZnVuY3Rpb25fc3RhdGUgPSBzZWxmLnBlcmZvcm1fZnVuY3Rpb25fZGV0ZWN0aW9uKAor
ICAgICAgICAgICAgWydBbm90aGVyVGVtcGxhdGU8Q2xhc3MxLCBDbGFzczI+IGFGdW5jdGlvbk5h
bWUoUGFzc1JlZlB0cjxNeUNsYXNzPiBwYXJhbU5hbWUsJywKKyAgICAgICAgICAgICAnY29uc3Qg
T3RoZXIxQ2xhc3MmIGZvbywnLAorICAgICAgICAgICAgICdjb25zdCBDb21wbGV4VGVtcGxhdGU8
Q2xhc3MxLCBOZXN0ZWRUZW1wbGF0ZTxQMSwgUDI+ID4qIGNvbnN0ICogcGFyYW0gPSBuZXcgQ29t
cGxleFRlbXBsYXRlPENsYXNzMSwgTmVzdGVkVGVtcGxhdGU8UDEsIFAyPiA+KDM0LCA0MiksJywK
KyAgICAgICAgICAgICAnaW50KiBteUNvdW50ID0gMCk7J10sCisgICAgICAgICAgICB7J25hbWUn
OiAnYUZ1bmN0aW9uTmFtZScsCisgICAgICAgICAgICAgJ2JvZHlfc3RhcnRfbGluZV9udW1iZXIn
OiAzLAorICAgICAgICAgICAgICdlbmRpbmdfbGluZV9udW1iZXInOiAzLAorICAgICAgICAgICAg
ICdpc19kZWNsYXJhdGlvbic6IFRydWV9KQorICAgICAgICBwYXJhbWV0ZXJfbGlzdCA9IGZ1bmN0
aW9uX3N0YXRlLmdldF9wYXJhbWV0ZXJfbGlzdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxz
KGxlbihwYXJhbWV0ZXJfbGlzdCksIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBhcmFt
ZXRlcl9saXN0WzBdLCAoJ1Bhc3NSZWZQdHI8TXlDbGFzcz4nLCAncGFyYW1OYW1lJywgMCkpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBhcmFtZXRlcl9saXN0WzFdLCAoJ2NvbnN0IE90aGVy
MUNsYXNzJicsICdmb28nLCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocGFyYW1ldGVy
X2xpc3RbMl0sICgnY29uc3QgQ29tcGxleFRlbXBsYXRlPENsYXNzMSwgTmVzdGVkVGVtcGxhdGU8
UDEsIFAyPiA+KiBjb25zdCAqJywgJ3BhcmFtJywgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWxzKHBhcmFtZXRlcl9saXN0WzNdLCAoJ2ludConLCAnbXlDb3VudCcsIDMpKQorCisKIGNsYXNz
IENwcFN0eWxlVGVzdChDcHBTdHlsZVRlc3RCYXNlKToKIAogICAgICMgVGVzdCBnZXQgbGluZSB3
aWR0aC4KQEAgLTI1NDksMTQgKzI2MzMsMTIgQEAgY2xhc3MgQ2hlY2tGb3JGdW5jdGlvbkxlbmd0
aHNUZXN0KENwcFN0eWxlVGVzdEJhc2UpOgogICAgICAgICBlcnJvcl9sZXZlbCA9IDEKICAgICAg
ICAgZXJyb3JfbGluZXMgPSBzZWxmLnRyaWdnZXJfdGVzdF9saW5lcyhlcnJvcl9sZXZlbCkgKyAx
CiAgICAgICAgIHRyaWdnZXJfbGV2ZWwgPSBzZWxmLnRyaWdnZXJfdGVzdF9saW5lcyhzZWxmLm1p
bl9jb25maWRlbmNlKQorICAgICAgICAjIFNpbmNlIHRoZSBmdW5jdGlvbiBuYW1lIGlzbid0IHZh
bGlkLCB0aGUgZnVuY3Rpb24gZGV0ZWN0aW9uIGFsZ29yaXRobQorICAgICAgICAjIHdpbGwgc2tp
cCBpdCwgc28gbm8gZXJyb3IgaXMgcHJvZHVjZWQuCiAgICAgICAgIHNlbGYuYXNzZXJ0X2Z1bmN0
aW9uX2xlbmd0aHNfY2hlY2soCiAgICAgICAgICAgICAoJ1RFU1RfRignCiAgICAgICAgICAgICAg
KyBzZWxmLmZ1bmN0aW9uX2JvZHkoZXJyb3JfbGluZXMpKSwKLSAgICAgICAgICAgICgnU21hbGwg
YW5kIGZvY3VzZWQgZnVuY3Rpb25zIGFyZSBwcmVmZXJyZWQ6ICcKLSAgICAgICAgICAgICAnVEVT
VF9GIGhhcyAlZCBub24tY29tbWVudCBsaW5lcyAnCi0gICAgICAgICAgICAgJyhlcnJvciB0cmln
Z2VyZWQgYnkgZXhjZWVkaW5nICVkIGxpbmVzKS4nCi0gICAgICAgICAgICAgJyAgW3JlYWRhYmls
aXR5L2ZuX3NpemVdIFslZF0nKQotICAgICAgICAgICAgJSAoZXJyb3JfbGluZXMsIHRyaWdnZXJf
bGV2ZWwsIGVycm9yX2xldmVsKSkKKyAgICAgICAgICAgICcnKQogCiAgICAgZGVmIHRlc3RfZnVu
Y3Rpb25fbGVuZ3RoX2NoZWNrX2RlZmluaXRpb25fc2V2ZXJpdHkxX3dpdGhfZW1iZWRkZWRfbm9f
bGludHMoc2VsZik6CiAgICAgICAgIGVycm9yX2xldmVsID0gMQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77308</attachid>
            <date>2010-12-22 23:35:37 -0800</date>
            <delta_ts>2010-12-23 18:11:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51451-20101222233536.patch</filename>
            <type>text/plain</type>
            <size>16958</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBjZjMw
NDUxYmFhZDNiMzM4NzcwZWFjOGU2ODg1ODAzZDY4MWExZTdjLi40NTliYjY3MzI5OTU2MTczZTVj
Y2U0MTgwYmU2MDMwMDk4YWY1NTBiIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTAtMTItMjEgIERhdmlkIExldmlu
ICA8bGV2aW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIGNoZWNrLXdlYmtpdC1zdHlsZSBzaG91bGQgYmUgYWJsZSB0byBwYXJz
ZSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBwYXJhbWV0ZXJzLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE0NTEKKworICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwLnB5OgorICAgICAgICAoX0Z1bmN0aW9uU3RhdGUuYmVn
aW4pOiBBZGRlZCBpbmZvcm1hdGlvbiB0byBhbGxvdyBkZXRlcm1pbmluZyB0aGUgcGFyYW1ldGVy
cworICAgICAgICBvbiBkZW1hbmQuCisgICAgICAgIChfRnVuY3Rpb25TdGF0ZS5nZXRfcGFyYW1l
dGVyX2xpc3QpOiBSZXR1cm5zIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXJzLgorICAgICAgICAoX0Z1
bmN0aW9uU3RhdGUuZ2V0X3BhcmFtZXRlcl9saXN0LnBhcnNlX3BhcmFtZXRlcl90eXBlX2FuZF9u
YW1lKTogTmVzdGVkCisgICAgICAgIGZ1bmN0aW9uIHdoaWNoIHBhcnNlcyBhIHNpbmdsZSBwYXJh
bWV0ZXIgaW50byBhIHR5cGUgYW5kIG5hbWUuCisgICAgICAgIChkZXRlY3RfZnVuY3Rpb25zKTog
SW1wcm92ZSBmdW5jdGlvbiBkZXRlY3Rpb24gZm9yIG9wZXJhdG9yIGZ1bmN0aW9ucyBhbmQKKyAg
ICAgICAgZGV0ZXJtaW5lIHdoZXJlIHRoZSBwYXJhbWV0ZXJzIGVuZCBhbmQgcGFzcyB0aGF0IHRv
IF9GdW5jdGlvblN0YXRlLmJlZ2luLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUv
Y2hlY2tlcnMvY3BwX3VuaXR0ZXN0LnB5OgorICAgICAgICAoRnVuY3Rpb25EZXRlY3Rpb25UZXN0
LnBlcmZvcm1fZnVuY3Rpb25fZGV0ZWN0aW9uKTogUmV0dXJuIHRoZSBmdW5jdGlvbiBzdGF0ZQor
ICAgICAgICBzbyB0aGF0IHRoZSBjYWxsZXIgbWF5IHVzZSBpdCB0byBkbyBtb3JlIHRlc3RzLgor
ICAgICAgICAoRnVuY3Rpb25EZXRlY3Rpb25UZXN0LnRlc3RfZnVuY3Rpb25fZGVjbGFyYXRpb25f
ZGV0ZWN0aW9uKTogQWRkZWQgbW9yZSBmdW5jdGlvbgorICAgICAgICBkZXRlY3Rpb24gdGVzdCB0
byB2ZXJpZnkgdGhhdCB3ZSBjYXRjaCB0aGUgb3BlcmF0b3IgZnVuY3Rpb25zLgorICAgICAgICAo
RnVuY3Rpb25EZXRlY3Rpb25UZXN0LnRlc3RfaWdub3JlX21hY3Jvcyk6IFZlcmlmeSB0aGF0IGZ1
bmN0aW9uIGRldGVjdGlvbiBpZ25vcmVzIG1hY3Jvcy4KKyAgICAgICAgKEZ1bmN0aW9uRGV0ZWN0
aW9uVGVzdC50ZXN0X3BhcmFtZXRlcl9saXN0KTogQWRkZWQgdGVzdHMgdG8gdmVyaWZ5IHRoZSBw
YXJhbWV0ZXIgcGFyc2luZy4KKyAgICAgICAgKENoZWNrRm9yRnVuY3Rpb25MZW5ndGhzVGVzdC50
ZXN0X2Z1bmN0aW9uX2xlbmd0aF9jaGVja19kZWZpbml0aW9uX3NldmVyaXR5MV9mb3JfYmFkX3Rl
c3RfZG9lc250X2JyZWFrKTogUmVtb3ZlZAorICAgICAgICBiZWNhdXNlIHRoZSBlcnJvci4gVGhl
IHRlc3QgaXMgYWJvdXQgdGhlIGJhZCBmdW5jdGlvbiBuYW1lLiBGaXhpbmcgdGhlIG5hbWUgbWFr
ZXMgdGhlIHRlc3QgZXhhY3RseSBsaWtlCisgICAgICAgIHRlc3RfZnVuY3Rpb25fbGVuZ3RoX2No
ZWNrX2RlZmluaXRpb25fc2V2ZXJpdHkxX2Zvcl90ZXN0LgorCiAyMDEwLTEyLTIyICBEYXZpZCBM
ZXZpbiAgPGxldmluQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaGluaWNo
aXJvIEhhbWFqaS4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hl
Y2tlcnMvY3BwLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy9jcHAu
cHkKaW5kZXggOTRlNWJkZGE0Mzk4ZTFiYzU1ZWU3MDk5MTBmMjg1Y2EzYjUyYzVlYi4uN2YwYWJk
Njc4Mzg1MTQyZjAwMGNmN2RjMDY4ZjRiYWYyZGMyM2EyMCAxMDA2NDQKLS0tIGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy9jcHAucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9zdHlsZS9jaGVja2Vycy9jcHAucHkKQEAgLTEsNyArMSw3IEBACiAjIS91c3IvYmlu
L3B5dGhvbgogIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KICMKLSMgQ29weXJpZ2h0IChDKSAyMDA5
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAwOSwg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyBDb3B5cmlnaHQgKEMpIDIw
MDkgVG9yY2ggTW9iaWxlIEluYy4KICMgQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICMgQ29weXJpZ2h0IChDKSAyMDEwIENocmlzIEplcmRvbmVrIChj
amVyZG9uZWtAd2Via2l0Lm9yZykKQEAgLTMyOSw3ICszMjksNyBAQCBjbGFzcyBfRnVuY3Rpb25T
dGF0ZShvYmplY3QpOgogICAgICAgICBzZWxmLmJvZHlfc3RhcnRfbGluZV9udW1iZXIgPSAtMTAw
MAogICAgICAgICBzZWxmLmVuZGluZ19saW5lX251bWJlciA9IC0xMDAwCiAKLSAgICBkZWYgYmVn
aW4oc2VsZiwgZnVuY3Rpb25fbmFtZSwgYm9keV9zdGFydF9saW5lX251bWJlciwgZW5kaW5nX2xp
bmVfbnVtYmVyLCBpc19kZWNsYXJhdGlvbik6CisgICAgZGVmIGJlZ2luKHNlbGYsIGZ1bmN0aW9u
X25hbWUsIGJvZHlfc3RhcnRfbGluZV9udW1iZXIsIGVuZGluZ19saW5lX251bWJlciwgaXNfZGVj
bGFyYXRpb24sIHBhcmFtZXRlcl9zdGFydCwgcGFyYW1ldGVyX2VuZCwgY2xlYW5fbGluZXMpOgog
ICAgICAgICAiIiJTdGFydCBhbmFseXppbmcgZnVuY3Rpb24gYm9keS4KIAogICAgICAgICBBcmdz
OgpAQCAtMzQ0LDYgKzM0NCw5MCBAQCBjbGFzcyBfRnVuY3Rpb25TdGF0ZShvYmplY3QpOgogICAg
ICAgICBzZWxmLmJvZHlfc3RhcnRfbGluZV9udW1iZXIgPSBib2R5X3N0YXJ0X2xpbmVfbnVtYmVy
CiAgICAgICAgIHNlbGYuZW5kaW5nX2xpbmVfbnVtYmVyID0gZW5kaW5nX2xpbmVfbnVtYmVyCiAg
ICAgICAgIHNlbGYuaXNfZGVjbGFyYXRpb24gPSBpc19kZWNsYXJhdGlvbgorICAgICAgICBzZWxm
LnBhcmFtZXRlcl9zdGFydCA9IHBhcmFtZXRlcl9zdGFydAorICAgICAgICBzZWxmLnBhcmFtZXRl
cl9lbmQgPSBwYXJhbWV0ZXJfZW5kCisgICAgICAgIHNlbGYuX3BhcmFtZXRlcl9saXN0ID0gTm9u
ZQorICAgICAgICBzZWxmLl9jbGVhbl9saW5lcyA9IGNsZWFuX2xpbmVzCisKKyAgICBkZWYgZ2V0
X3BhcmFtZXRlcl9saXN0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9wYXJhbWV0ZXJfbGlzdDoK
KyAgICAgICAgICAgIHJldHVybiBzZWxmLl9wYXJhbWV0ZXJfbGlzdAorCisgICAgICAgIGRlZiBw
YXJzZV9wYXJhbWV0ZXJfdHlwZV9hbmRfbmFtZShhbGxfcGFyYW1ldGVycywgc2ltcGxpZmllZF9w
YXJhbWV0ZXJzLCBzdGFydF9pbmRleCwgZW5kX2luZGV4KToKKyAgICAgICAgICAgIGN1cnJlbnRf
cGFyYW1ldGVyID0gYWxsX3BhcmFtZXRlcnNbc3RhcnRfaW5kZXg6ZW5kX2luZGV4XQorICAgICAg
ICAgICAgY3VycmVudF9zaW1wbGlmaWVkX3BhcmFtZXRlciA9IHNpbXBsaWZpZWRfcGFyYW1ldGVy
c1tzdGFydF9pbmRleDplbmRfaW5kZXhdCisKKyAgICAgICAgICAgICMgVGhlIGZpcnN0IHNwYWNl
IGZyb20gdGhlIHJpZ2h0IGluIHRoZSBzaW1wbGlmaWVkIHBhcmFtZXRlciBpcyB3aGVyZSB0aGUg
cGFyYW1ldGVyIG5hbWUgc3RhcnQKKyAgICAgICAgICAgICMgdW5sZXNzIHRoZSBmaXJzdCBzcGFj
ZSBpcyBiZWZvcmUgYW55IGNvbnRlbnQgaW4gdGhlIHNpbXBsaWZpZWQgcGFyYW1ldGVyLgorICAg
ICAgICAgICAgYmVmb3JlX3R5cGVfbmFtZV9pbmRleCA9IGN1cnJlbnRfc2ltcGxpZmllZF9wYXJh
bWV0ZXIucnN0cmlwKCkucmZpbmQoJyAnKQorICAgICAgICAgICAgaWYgYmVmb3JlX3R5cGVfbmFt
ZV9pbmRleCA9PSAtMSBvciBub3QgY3VycmVudF9zaW1wbGlmaWVkX3BhcmFtZXRlcls6YmVmb3Jl
X3R5cGVfbmFtZV9pbmRleF0uc3RyaXAoKToKKyAgICAgICAgICAgICAgICBiZWZvcmVfdHlwZV9u
YW1lX2luZGV4ID0gbGVuKGN1cnJlbnRfcGFyYW1ldGVyKQorICAgICAgICAgICAgcGFyYW1fdHlw
ZSA9IGN1cnJlbnRfcGFyYW1ldGVyWzpiZWZvcmVfdHlwZV9uYW1lX2luZGV4XS5zdHJpcCgpCisK
KyAgICAgICAgICAgICMgUmVtb3ZlIGV2ZXJ5dGhpbmcgYWZ0ZXIgYSA9IGluIHRoZSBwYXJhbWV0
ZXIgbmFtZSAoZS5nICdpbnQgaSA9IGludCg1KScpLgorICAgICAgICAgICAgcGFyYW1fbmFtZSA9
IHN1YihyJz0uKicsICcnLCBjdXJyZW50X3BhcmFtZXRlcltiZWZvcmVfdHlwZV9uYW1lX2luZGV4
ICsgMTpdKS5zdHJpcCgpCisgICAgICAgICAgICByZXR1cm4gKHBhcmFtX3R5cGUsIHBhcmFtX25h
bWUpCisKKyAgICAgICAgIyBGb3JtIGEgc2luZ2xlIHN0cmluZyB3aXRoIGFsbCBwYXJhbWV0ZXJz
LiBUcmltbWluZyB0aGUgZmlyc3QgYW5kIGxhc3QgbGluZXMKKyAgICAgICAgIyB0byBlbnN1cmUg
b25seSB0aGUgcGFyYW1ldGVycyByZW1haW4gd2l0aG91dCB0aGUgc3Vycm91bmRpbmcgcGFyZW50
aGVzaXMuCisgICAgICAgIHBhcmFtZXRlcl9saW5lcyA9IHNlbGYuX2NsZWFuX2xpbmVzLmVsaWRl
ZFtzZWxmLnBhcmFtZXRlcl9zdGFydFswXTpzZWxmLnBhcmFtZXRlcl9lbmRbMF0gKyAxXQorICAg
ICAgICBwYXJhbWV0ZXJfbGluZXNbLTFdID0gcGFyYW1ldGVyX2xpbmVzWy0xXVs6c2VsZi5wYXJh
bWV0ZXJfZW5kWzFdIC0gMV0KKyAgICAgICAgcGFyYW1ldGVyX2xpbmVzWzBdID0gcGFyYW1ldGVy
X2xpbmVzWzBdW3NlbGYucGFyYW1ldGVyX3N0YXJ0WzFdICsgMTpdCisgICAgICAgIGFsbF9wYXJh
bWV0ZXJzID0gJyAnLmpvaW4ocGFyYW1ldGVyX2xpbmVzKQorCisgICAgICAgICMgU3RvcmUgdGhl
IGxlbmd0aHMgb2YgZWFjaCBsaW5lIChhZGRpbmcgMSBkdWUgdG8gdGhlIHNwYWNlIGFkZGVkIGR1
cmluZyB0aGUgam9pbikgdG8KKyAgICAgICAgIyBtYWtlIGl0IGVhc2llciB0byBkZXRlcm1pbmUg
d2hhdCBsaW5lIGVhY2ggcGFyYW1ldGVyIGlzIG9uIHdoZW4gdGhleSBhcmUgcGFyc2VkLgorICAg
ICAgICBsaW5lX2xlbmd0aHMgPSBbbGVuKGxpbmUpICsgMSBmb3IgbGluZSBpbiBwYXJhbWV0ZXJf
bGluZXNdCisKKyAgICAgICAgIyBSZW1vdmUgaXRlbXMgdGhhdCBtYWtlIGl0IGhhcmQgdG8gZG8g
c2ltcGxlIHBhcnNpbmcgb2YgdGhlIHBhcmFtZXRlcnMuCisgICAgICAgIGFsbF9zaW1wbGlmaWNh
dGlvbnMgPSAoCisgICAgICAgICAgICAjIFJlbW92ZSB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLCBmdW5j
dGlvbiBkZWNsYXJhdGlvbiBwYXJhbWV0ZXJzLCBldGMuCisgICAgICAgICAgICByJyg8W148Pl0q
Pz4pfChcKFteXChcKV0qP1wpKXwoXHtbXlx7XH1dKj9cfSl8KFwiW1wiXSpcIiknLAorICAgICAg
ICAgICAgIyBSZW1vdmUgZXZlcnl0aGluZyBhZnRlciBhbiA9LgorICAgICAgICAgICAgcic9W14s
XSonLAorICAgICAgICAgICAgIyBSZW1vdmUgOjogYW5kIGV2ZXJ5dGhpbmcgYmVmb3JlIGl0Lgor
ICAgICAgICAgICAgcidbXixdKjo6JywKKyAgICAgICAgICAgICMgUmVtb3ZlIG1vZGlmaWVycyBs
aWtlICYsICouCisgICAgICAgICAgICByJ1smKl0nLAorICAgICAgICAgICAgIyBSZW1vdmUgbW9k
aWZpZXJzIGxpa2UgbG9uZyBhbmQgY29uc3QuCisgICAgICAgICAgICByJ1xiKHVuc2lnbmVkfGxv
bmd8Y29uc3R8c2hvcnQpXHMrKD89W0EtWmEtel0pJykKKyAgICAgICAgc2ltcGxpZmllZF9wYXJh
bWV0ZXJzID0gYWxsX3BhcmFtZXRlcnMKKyAgICAgICAgZm9yIHNpbXBsaWZpY2F0aW9uIGluIGFs
bF9zaW1wbGlmaWNhdGlvbnM6CisgICAgICAgICAgICBzaW1wbGlmaWVkX3BhcmFtZXRlcnMgPSBp
dGVyYXRpdmVseV9yZXBsYWNlX21hdGNoZXNfd2l0aF9jaGFyKHNpbXBsaWZpY2F0aW9uLCAnICcs
IHNpbXBsaWZpZWRfcGFyYW1ldGVycykKKworICAgICAgICAjIEFkZCBhIGNvbW1hIGFmdGVyIHRo
ZSBsYXN0IHBhcmFtZXRlciBzbyB0aGF0IGVhY2ggcGFyYW1ldGVyIGVuZHMgd2l0aCBhIGNvbW1h
LgorICAgICAgICBpZiBzaW1wbGlmaWVkX3BhcmFtZXRlcnMuc3RyaXAoKToKKyAgICAgICAgICAg
IHNpbXBsaWZpZWRfcGFyYW1ldGVycyArPSAnLCcKKyAgICAgICAgICAgIGxpbmVfbGVuZ3Roc1st
MV0gKz0gMQorCisgICAgICAgICMgRm9ybSB0aGUgbGlzdCBvZiB0aGUgcGFyYW1ldGVycy4KKyAg
ICAgICAgc2VsZi5fcGFyYW1ldGVyX2xpc3QgPSBbXQorICAgICAgICBwcmV2aW91c19wYXJhbWV0
ZXJfaW5kZXggPSAwCisgICAgICAgIHByZXZpb3VzX2xpbmVfbGVuZ3RocyA9IDAKKyAgICAgICAg
Y3VycmVudF9wYXJhbWV0ZXJfbGluZSA9IDAKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAg
ICAgICMgRmluZCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IHBhcmFtZXRlci4KKyAgICAgICAgICAg
IG5leHRfY29tbWFfaW5kZXggPSBzaW1wbGlmaWVkX3BhcmFtZXRlcnMuZmluZCgnLCcsICBwcmV2
aW91c19wYXJhbWV0ZXJfaW5kZXgpCisgICAgICAgICAgICBpZiBuZXh0X2NvbW1hX2luZGV4ID09
IC0xOiAgIyBObyBjb21tYSBtZWFucyB0aGF0IGFsbCBwYXJhbWV0ZXJzIGhhdmUgYmVlbiBwYXJz
ZWQuCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgIyBJcyB0aGUgY29tbWEg
b24gYSBuZXcgbGluZT8KKyAgICAgICAgICAgIHdoaWxlIG5leHRfY29tbWFfaW5kZXggPj0gcHJl
dmlvdXNfbGluZV9sZW5ndGhzICsgbGluZV9sZW5ndGhzW2N1cnJlbnRfcGFyYW1ldGVyX2xpbmVd
OgorICAgICAgICAgICAgICAgIHByZXZpb3VzX2xpbmVfbGVuZ3RocyArPSBsaW5lX2xlbmd0aHNb
Y3VycmVudF9wYXJhbWV0ZXJfbGluZV0KKyAgICAgICAgICAgICAgICBjdXJyZW50X3BhcmFtZXRl
cl9saW5lICs9IDEKKworICAgICAgICAgICAgIyBQYXJzZSB0aGUgcGFyYW1ldGVyIGludG8gYSB0
eXBlIGFuZCBwYXJhbWV0ZXIgbmFtZS4KKyAgICAgICAgICAgIHBhcmFtZXRlciA9IGxpc3QocGFy
c2VfcGFyYW1ldGVyX3R5cGVfYW5kX25hbWUoYWxsX3BhcmFtZXRlcnMsIHNpbXBsaWZpZWRfcGFy
YW1ldGVycywgcHJldmlvdXNfcGFyYW1ldGVyX2luZGV4LCBuZXh0X2NvbW1hX2luZGV4KSkKKyAg
ICAgICAgICAgICMgSW5jbHVkZSB0aGUgbGluZSBudWJtZXIgdG9vLgorICAgICAgICAgICAgcGFy
YW1ldGVyLmFwcGVuZChjdXJyZW50X3BhcmFtZXRlcl9saW5lICsgc2VsZi5wYXJhbWV0ZXJfc3Rh
cnRbMF0pCisgICAgICAgICAgICBzZWxmLl9wYXJhbWV0ZXJfbGlzdC5hcHBlbmQodHVwbGUocGFy
YW1ldGVyKSkKKworICAgICAgICAgICAgIyBNb3ZlIG9uIHRvIHRoZSBuZXh0IHBhcmFtZXRlciAo
d2hpY2ggaXMganVzdCBhZnRlciB0aGUgcHJldmlvdXMgY29tbWEgZm91bmQpLgorICAgICAgICAg
ICAgcHJldmlvdXNfcGFyYW1ldGVyX2luZGV4ID0gbmV4dF9jb21tYV9pbmRleCArIDEKKworICAg
ICAgICAjIFN0b3JlIHRoZSBmaW5hbCByZXN1bHQgYXMgYSB0dXBsZSBzaW5jZSB0aGF0IGlzIGlt
bXV0YWJsZS4KKyAgICAgICAgc2VsZi5fcGFyYW1ldGVyX2xpc3QgPSB0dXBsZShzZWxmLl9wYXJh
bWV0ZXJfbGlzdCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX3BhcmFtZXRlcl9saXN0CiAKICAgICBk
ZWYgY291bnQoc2VsZiwgbGluZV9udW1iZXIpOgogICAgICAgICAiIiJDb3VudCBsaW5lIGluIGN1
cnJlbnQgZnVuY3Rpb24gYm9keS4iIiIKQEAgLTEyMTMsNyArMTI5NywxMSBAQCBkZWYgZGV0ZWN0
X2Z1bmN0aW9ucyhjbGVhbl9saW5lcywgbGluZV9udW1iZXIsIGZ1bmN0aW9uX3N0YXRlLCBlcnJv
cik6CiAgICAgcmF3ID0gY2xlYW5fbGluZXMucmF3X2xpbmVzCiAgICAgcmF3X2xpbmUgPSByYXdb
bGluZV9udW1iZXJdCiAKLSAgICByZWdleHAgPSByJ1xzKihcdyhcd3w6OnxcKnxcJnxcc3w8fD58
LHx+KSopXCgnICAjIGRlY2xzICogJiBzcGFjZTo6bmFtZSggLi4uCisgICAgIyBMaW5lcyBlbmRp
bmcgd2l0aCBhIFwgaW5kaWNhdGUgYSBtYWNyby4gRG9uJ3QgdHJ5IHRvIGNoZWNrIHRoZW0uCisg
ICAgaWYgcmF3X2xpbmUuZW5kc3dpdGgoJ1xcJyk6CisgICAgICAgIHJldHVybgorCisgICAgcmVn
ZXhwID0gcidccyooXHcoXHd8Ojp8XCp8XCZ8XHN8PHw+fCx8fnwob3BlcmF0b3JccyooL3wtfD18
IXxcKykrKSkqKVwoJyAgIyBkZWNscyAqICYgc3BhY2U6Om5hbWUoIC4uLgogICAgIG1hdGNoX3Jl
c3VsdCA9IG1hdGNoKHJlZ2V4cCwgbGluZSkKICAgICBpZiBub3QgbWF0Y2hfcmVzdWx0OgogICAg
ICAgICByZXR1cm4KQEAgLTEyMzIsNyArMTMyMCw3IEBAIGRlZiBkZXRlY3RfZnVuY3Rpb25zKGNs
ZWFuX2xpbmVzLCBsaW5lX251bWJlciwgZnVuY3Rpb25fc3RhdGUsIGVycm9yKToKICAgICAgICAg
ICAgICMgUmVwbGFjZSB0ZW1wbGF0ZSBjb25zdHJ1Y3RzIHdpdGggXyBzbyB0aGF0IG5vIHNwYWNl
cyByZW1haW4gaW4gdGhlIGZ1bmN0aW9uIG5hbWUsCiAgICAgICAgICAgICAjIHdoaWxlIGtlZXBp
bmcgdGhlIGNvbHVtbiBudW1iZXJzIG9mIG90aGVyIGNoYXJhY3RlcnMgdGhlIHNhbWUgYXMgImxp
bmUiLgogICAgICAgICAgICAgbGluZV93aXRoX25vX3RlbXBsYXRlcyA9IGl0ZXJhdGl2ZWx5X3Jl
cGxhY2VfbWF0Y2hlc193aXRoX2NoYXIocic8W148Pl0qPicsICdfJywgbGluZSkKLSAgICAgICAg
ICAgIG1hdGNoX2Z1bmN0aW9uID0gc2VhcmNoKHInKChcd3w6fDx8PnwsfH4pKilcKCcsIGxpbmVf
d2l0aF9ub190ZW1wbGF0ZXMpCisgICAgICAgICAgICBtYXRjaF9mdW5jdGlvbiA9IHNlYXJjaChy
JygoXHd8Onw8fD58LHx+fChvcGVyYXRvclxzKigvfC18PXwhfFwrKSspKSopXCgnLCBsaW5lX3dp
dGhfbm9fdGVtcGxhdGVzKQogICAgICAgICAgICAgaWYgbm90IG1hdGNoX2Z1bmN0aW9uOgogICAg
ICAgICAgICAgICAgIHJldHVybiAgIyBUaGUgJygnIG11c3QgaGF2ZSBiZWVuIGluc2lkZSBvZiBh
IHRlbXBsYXRlLgogCkBAIC0xMjQ2LDEzICsxMzM0LDIxIEBAIGRlZiBkZXRlY3RfZnVuY3Rpb25z
KGNsZWFuX2xpbmVzLCBsaW5lX251bWJlciwgZnVuY3Rpb25fc3RhdGUsIGVycm9yKToKICAgICAg
ICAgICAgICAgICAgICAgZnVuY3Rpb24gKz0gcGFyYW1ldGVyX3JlZ2V4cC5ncm91cCgxKQogICAg
ICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBmdW5jdGlvbiArPSAnKCknCisKKyAgICAg
ICAgICAgIHBhcmFtZXRlcl9zdGFydCA9IChsaW5lX251bWJlciwgbWF0Y2hfZnVuY3Rpb24uZW5k
KDEpKQorICAgICAgICAgICAgY2xvc2VfcmVzdWx0ID0gY2xvc2VfZXhwcmVzc2lvbihjbGVhbl9s
aW5lcywgbGluZV9udW1iZXIsIHBhcmFtZXRlcl9zdGFydFsxXSkKKyAgICAgICAgICAgIGlmIGNs
b3NlX3Jlc3VsdFsxXSA9PSBsZW4oY2xlYW5fbGluZXMuZWxpZGVkKToKKyAgICAgICAgICAgICAg
ICAjIE5vIGVuZCB3YXMgZm91bmQuCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAg
ICBwYXJhbWV0ZXJfZW5kID0gKGNsb3NlX3Jlc3VsdFsxXSwgY2xvc2VfcmVzdWx0WzJdKQorCiAg
ICAgICAgICAgICBpc19kZWNsYXJhdGlvbiA9IGJvb2woc2VhcmNoKHInXltee10qOycsIHN0YXJ0
X2xpbmUpKQogICAgICAgICAgICAgaWYgaXNfZGVjbGFyYXRpb246CiAgICAgICAgICAgICAgICAg
ZW5kaW5nX2xpbmVfbnVtYmVyID0gc3RhcnRfbGluZV9udW1iZXIKICAgICAgICAgICAgIGVsc2U6
CiAgICAgICAgICAgICAgICAgb3Blbl9icmFjZV9pbmRleCA9IHN0YXJ0X2xpbmUuZmluZCgneycp
CiAgICAgICAgICAgICAgICAgZW5kaW5nX2xpbmVfbnVtYmVyID0gY2xvc2VfZXhwcmVzc2lvbihj
bGVhbl9saW5lcywgc3RhcnRfbGluZV9udW1iZXIsIG9wZW5fYnJhY2VfaW5kZXgpWzFdCi0gICAg
ICAgICAgICBmdW5jdGlvbl9zdGF0ZS5iZWdpbihmdW5jdGlvbiwgc3RhcnRfbGluZV9udW1iZXIs
IGVuZGluZ19saW5lX251bWJlciwgaXNfZGVjbGFyYXRpb24pCisgICAgICAgICAgICBmdW5jdGlv
bl9zdGF0ZS5iZWdpbihmdW5jdGlvbiwgc3RhcnRfbGluZV9udW1iZXIsIGVuZGluZ19saW5lX251
bWJlciwgaXNfZGVjbGFyYXRpb24sIHBhcmFtZXRlcl9zdGFydCwgcGFyYW1ldGVyX2VuZCwgY2xl
YW5fbGluZXMpCiAgICAgICAgICAgICByZXR1cm4KIAogICAgICMgTm8gYm9keSBmb3IgdGhlIGZ1
bmN0aW9uIChvciBldmlkZW5jZSBvZiBhIG5vbi1mdW5jdGlvbikgd2FzIGZvdW5kLgpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy9jcHBfdW5pdHRlc3Qu
cHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcF91bml0dGVzdC5w
eQppbmRleCA3MGRmMWVhNWVjY2UxODI3ODliZDBkNjBjOTQ0OWY5OWZmMDkxYTQ2Li5kZjJjYTFl
YWQ1YWE2Y2FjYjI3M2VkY2Q4OTMxOGM1NzkzYTQwMTcwIDEwMDY0NAotLS0gYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcF91bml0dGVzdC5weQorKysgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcF91bml0dGVzdC5weQpAQCAtMjUwLDYg
KzI1MCw3IEBAIGNsYXNzIEZ1bmN0aW9uRGV0ZWN0aW9uVGVzdChDcHBTdHlsZVRlc3RCYXNlKToK
ICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZnVuY3Rpb25fc3RhdGUuYm9keV9zdGFydF9saW5l
X251bWJlciwgZnVuY3Rpb25faW5mb3JtYXRpb25bJ2JvZHlfc3RhcnRfbGluZV9udW1iZXInXSkK
ICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZnVuY3Rpb25fc3RhdGUuZW5kaW5nX2xpbmVfbnVt
YmVyLCBmdW5jdGlvbl9pbmZvcm1hdGlvblsnZW5kaW5nX2xpbmVfbnVtYmVyJ10pCiAgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWxzKGZ1bmN0aW9uX3N0YXRlLmlzX2RlY2xhcmF0aW9uLCBmdW5jdGlv
bl9pbmZvcm1hdGlvblsnaXNfZGVjbGFyYXRpb24nXSkKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9u
X3N0YXRlCiAKICAgICBkZWYgdGVzdF9iYXNpY19mdW5jdGlvbl9kZXRlY3Rpb24oc2VsZik6CiAg
ICAgICAgIHNlbGYucGVyZm9ybV9mdW5jdGlvbl9kZXRlY3Rpb24oCkBAIC0yNjgsNiArMjY5LDM3
IEBAIGNsYXNzIEZ1bmN0aW9uRGV0ZWN0aW9uVGVzdChDcHBTdHlsZVRlc3RCYXNlKToKICAgICAg
ICAgICAgICAnZW5kaW5nX2xpbmVfbnVtYmVyJzogMCwKICAgICAgICAgICAgICAnaXNfZGVjbGFy
YXRpb24nOiBUcnVlfSkKIAorICAgICAgICBzZWxmLnBlcmZvcm1fZnVuY3Rpb25fZGV0ZWN0aW9u
KAorICAgICAgICAgICAgWydDaGVja2VkSW50PFQ+IG9wZXJhdG9yIC8oY29uc3QgQ2hlY2tlZElu
dDxUPiAmbGhzLCBjb25zdCBDaGVja2VkSW50PFQ+ICZyaHMpOyddLAorICAgICAgICAgICAgeydu
YW1lJzogJ29wZXJhdG9yIC8nLAorICAgICAgICAgICAgICdib2R5X3N0YXJ0X2xpbmVfbnVtYmVy
JzogMCwKKyAgICAgICAgICAgICAnZW5kaW5nX2xpbmVfbnVtYmVyJzogMCwKKyAgICAgICAgICAg
ICAnaXNfZGVjbGFyYXRpb24nOiBUcnVlfSkKKworICAgICAgICBzZWxmLnBlcmZvcm1fZnVuY3Rp
b25fZGV0ZWN0aW9uKAorICAgICAgICAgICAgWydDaGVja2VkSW50PFQ+IG9wZXJhdG9yIC0oY29u
c3QgQ2hlY2tlZEludDxUPiAmbGhzLCBjb25zdCBDaGVja2VkSW50PFQ+ICZyaHMpOyddLAorICAg
ICAgICAgICAgeyduYW1lJzogJ29wZXJhdG9yIC0nLAorICAgICAgICAgICAgICdib2R5X3N0YXJ0
X2xpbmVfbnVtYmVyJzogMCwKKyAgICAgICAgICAgICAnZW5kaW5nX2xpbmVfbnVtYmVyJzogMCwK
KyAgICAgICAgICAgICdpc19kZWNsYXJhdGlvbic6IFRydWV9KQorCisgICAgICAgIHNlbGYucGVy
Zm9ybV9mdW5jdGlvbl9kZXRlY3Rpb24oCisgICAgICAgICAgICBbJ0NoZWNrZWRJbnQ8VD4gb3Bl
cmF0b3IgIT0oY29uc3QgQ2hlY2tlZEludDxUPiAmbGhzLCBjb25zdCBDaGVja2VkSW50PFQ+ICZy
aHMpOyddLAorICAgICAgICAgICAgeyduYW1lJzogJ29wZXJhdG9yICE9JywKKyAgICAgICAgICAg
ICAnYm9keV9zdGFydF9saW5lX251bWJlcic6IDAsCisgICAgICAgICAgICAgJ2VuZGluZ19saW5l
X251bWJlcic6IDAsCisgICAgICAgICAgICAgJ2lzX2RlY2xhcmF0aW9uJzogVHJ1ZX0pCisKKyAg
ICAgICAgc2VsZi5wZXJmb3JtX2Z1bmN0aW9uX2RldGVjdGlvbigKKyAgICAgICAgICAgIFsnQ2hl
Y2tlZEludDxUPiBvcGVyYXRvciArKGNvbnN0IENoZWNrZWRJbnQ8VD4gJmxocywgY29uc3QgQ2hl
Y2tlZEludDxUPiAmcmhzKTsnXSwKKyAgICAgICAgICAgIHsnbmFtZSc6ICdvcGVyYXRvciArJywK
KyAgICAgICAgICAgICAnYm9keV9zdGFydF9saW5lX251bWJlcic6IDAsCisgICAgICAgICAgICAg
J2VuZGluZ19saW5lX251bWJlcic6IDAsCisgICAgICAgICAgICAgJ2lzX2RlY2xhcmF0aW9uJzog
VHJ1ZX0pCisKKyAgICBkZWYgdGVzdF9pZ25vcmVfbWFjcm9zKHNlbGYpOgorICAgICAgICBzZWxm
LnBlcmZvcm1fZnVuY3Rpb25fZGV0ZWN0aW9uKFsndm9pZCBhRnVuY3Rpb25OYW1lKGludCk7IFxc
J10sIE5vbmUpCisKICAgICBkZWYgdGVzdF9ub25fZnVuY3Rpb25zKHNlbGYpOgogICAgICAgICAj
IFRoaXMgY2FzZSBleHBvc2VkIGFuIGVycm9yIGJlY2F1c2UgdGhlIG9wZW4gYnJhY2Ugd2FzIGlu
IHF1b3Rlcy4KICAgICAgICAgc2VsZi5wZXJmb3JtX2Z1bmN0aW9uX2RldGVjdGlvbigKQEAgLTI4
NCw2ICszMTYsNjEgQEAgY2xhc3MgRnVuY3Rpb25EZXRlY3Rpb25UZXN0KENwcFN0eWxlVGVzdEJh
c2UpOgogICAgICAgICAjIFNpbXBsZSB0ZXN0IGNhc2Ugd2l0aCBzb21ldGhpbmcgdGhhdCBpcyBu
b3QgYSBmdW5jdGlvbi4KICAgICAgICAgc2VsZi5wZXJmb3JtX2Z1bmN0aW9uX2RldGVjdGlvbihb
J2NsYXNzIFN0dWZmOyddLCBOb25lKQogCisgICAgZGVmIHRlc3RfcGFyYW1ldGVyX2xpc3Qoc2Vs
Zik6CisgICAgICAgICMgQSBmdW5jdGlvbiB3aXRoIG5vIGFyZ3VtZW50cy4KKyAgICAgICAgZnVu
Y3Rpb25fc3RhdGUgPSBzZWxmLnBlcmZvcm1fZnVuY3Rpb25fZGV0ZWN0aW9uKAorICAgICAgICAg
ICAgWyd2b2lkIGZ1bmN0aW9uTmFtZSgpOyddLAorICAgICAgICAgICAgeyduYW1lJzogJ2Z1bmN0
aW9uTmFtZScsCisgICAgICAgICAgICAgJ2JvZHlfc3RhcnRfbGluZV9udW1iZXInOiAwLAorICAg
ICAgICAgICAgICdlbmRpbmdfbGluZV9udW1iZXInOiAwLAorICAgICAgICAgICAgICdpc19kZWNs
YXJhdGlvbic6IFRydWV9KQorICAgICAgICBwYXJhbWV0ZXJfbGlzdCA9IGZ1bmN0aW9uX3N0YXRl
LmdldF9wYXJhbWV0ZXJfbGlzdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihwYXJh
bWV0ZXJfbGlzdCksIDApCisKKyAgICAgICAgIyBBIGZ1bmN0aW9uIHdpdGggb25lIGFyZ3VtZW50
LgorICAgICAgICBmdW5jdGlvbl9zdGF0ZSA9IHNlbGYucGVyZm9ybV9mdW5jdGlvbl9kZXRlY3Rp
b24oCisgICAgICAgICAgICBbJ3ZvaWQgZnVuY3Rpb25OYW1lKGludCk7J10sCisgICAgICAgICAg
ICB7J25hbWUnOiAnZnVuY3Rpb25OYW1lJywKKyAgICAgICAgICAgICAnYm9keV9zdGFydF9saW5l
X251bWJlcic6IDAsCisgICAgICAgICAgICAgJ2VuZGluZ19saW5lX251bWJlcic6IDAsCisgICAg
ICAgICAgICAgJ2lzX2RlY2xhcmF0aW9uJzogVHJ1ZX0pCisgICAgICAgIHBhcmFtZXRlcl9saXN0
ID0gZnVuY3Rpb25fc3RhdGUuZ2V0X3BhcmFtZXRlcl9saXN0KCkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbHMobGVuKHBhcmFtZXRlcl9saXN0KSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bHMocGFyYW1ldGVyX2xpc3RbMF0sICgnaW50JywgJycsIDApKQorCisgICAgICAgICMgU29tZSBw
YXJhbWV0ZXIgdHlwZSB3aXRoIG1vZGlmaWVycyBhbmQgbm8gcGFyYW1ldGVyIG5hbWVzLgorICAg
ICAgICBmdW5jdGlvbl9zdGF0ZSA9IHNlbGYucGVyZm9ybV9mdW5jdGlvbl9kZXRlY3Rpb24oCisg
ICAgICAgICAgICBbJ3ZpcnR1YWwgdm9pZCBkZXRlcm1pbmVBUklBRHJvcEVmZmVjdHMoVmVjdG9y
PFN0cmluZz4qJiwgY29uc3QgdW5zaWduZWQgbG9uZyBpbnQqJiwgTWVkaWFQbGF5ZXI6OlByZWxv
YWQsIE90aGVyPE90aGVyMiwgT3RoZXIzPFAxLCBQMj4gPiwgaW50KTsnXSwKKyAgICAgICAgICAg
IHsnbmFtZSc6ICdkZXRlcm1pbmVBUklBRHJvcEVmZmVjdHMnLAorICAgICAgICAgICAgICdib2R5
X3N0YXJ0X2xpbmVfbnVtYmVyJzogMCwKKyAgICAgICAgICAgICAnZW5kaW5nX2xpbmVfbnVtYmVy
JzogMCwKKyAgICAgICAgICAgICAnaXNfZGVjbGFyYXRpb24nOiBUcnVlfSkKKyAgICAgICAgcGFy
YW1ldGVyX2xpc3QgPSBmdW5jdGlvbl9zdGF0ZS5nZXRfcGFyYW1ldGVyX2xpc3QoKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFscyhsZW4ocGFyYW1ldGVyX2xpc3QpLCA1KQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFscyhwYXJhbWV0ZXJfbGlzdFswXSwgKCdWZWN0b3I8U3RyaW5nPiomJywgJycs
IDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwYXJhbWV0ZXJfbGlzdFsxXSwgKCdjb25z
dCB1bnNpZ25lZCBsb25nIGludComJywgJycsIDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
cyhwYXJhbWV0ZXJfbGlzdFsyXSwgKCdNZWRpYVBsYXllcjo6UHJlbG9hZCcsICcnLCAwKSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocGFyYW1ldGVyX2xpc3RbM10sICgnT3RoZXI8T3RoZXIy
LCBPdGhlcjM8UDEsIFAyPiA+JywgJycsIDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhw
YXJhbWV0ZXJfbGlzdFs0XSwgKCdpbnQnLCAnJywgMCkpCisKKyAgICAgICAgIyBUcnkgcGFyc2lu
ZyBhIGZ1bmN0aW9uIHdpdGggYSB2ZXJ5IGNvbXBsZXggZGVmaW5pdGlvbi4KKyAgICAgICAgZnVu
Y3Rpb25fc3RhdGUgPSBzZWxmLnBlcmZvcm1fZnVuY3Rpb25fZGV0ZWN0aW9uKAorICAgICAgICAg
ICAgWydBbm90aGVyVGVtcGxhdGU8Q2xhc3MxLCBDbGFzczI+IGFGdW5jdGlvbk5hbWUoUGFzc1Jl
ZlB0cjxNeUNsYXNzPiBwYXJhbU5hbWUsJywKKyAgICAgICAgICAgICAnY29uc3QgT3RoZXIxQ2xh
c3MmIGZvbywnLAorICAgICAgICAgICAgICdjb25zdCBDb21wbGV4VGVtcGxhdGU8Q2xhc3MxLCBO
ZXN0ZWRUZW1wbGF0ZTxQMSwgUDI+ID4qIGNvbnN0ICogcGFyYW0gPSBuZXcgQ29tcGxleFRlbXBs
YXRlPENsYXNzMSwgTmVzdGVkVGVtcGxhdGU8UDEsIFAyPiA+KDM0LCA0MiksJywKKyAgICAgICAg
ICAgICAnaW50KiBteUNvdW50ID0gMCk7J10sCisgICAgICAgICAgICB7J25hbWUnOiAnYUZ1bmN0
aW9uTmFtZScsCisgICAgICAgICAgICAgJ2JvZHlfc3RhcnRfbGluZV9udW1iZXInOiAzLAorICAg
ICAgICAgICAgICdlbmRpbmdfbGluZV9udW1iZXInOiAzLAorICAgICAgICAgICAgICdpc19kZWNs
YXJhdGlvbic6IFRydWV9KQorICAgICAgICBwYXJhbWV0ZXJfbGlzdCA9IGZ1bmN0aW9uX3N0YXRl
LmdldF9wYXJhbWV0ZXJfbGlzdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihwYXJh
bWV0ZXJfbGlzdCksIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBhcmFtZXRlcl9saXN0
WzBdLCAoJ1Bhc3NSZWZQdHI8TXlDbGFzcz4nLCAncGFyYW1OYW1lJywgMCkpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWxzKHBhcmFtZXRlcl9saXN0WzFdLCAoJ2NvbnN0IE90aGVyMUNsYXNzJics
ICdmb28nLCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocGFyYW1ldGVyX2xpc3RbMl0s
ICgnY29uc3QgQ29tcGxleFRlbXBsYXRlPENsYXNzMSwgTmVzdGVkVGVtcGxhdGU8UDEsIFAyPiA+
KiBjb25zdCAqJywgJ3BhcmFtJywgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBhcmFt
ZXRlcl9saXN0WzNdLCAoJ2ludConLCAnbXlDb3VudCcsIDMpKQorCisKIGNsYXNzIENwcFN0eWxl
VGVzdChDcHBTdHlsZVRlc3RCYXNlKToKIAogICAgICMgVGVzdCBnZXQgbGluZSB3aWR0aC4KQEAg
LTI1NDksMTQgKzI2MzYsMTIgQEAgY2xhc3MgQ2hlY2tGb3JGdW5jdGlvbkxlbmd0aHNUZXN0KENw
cFN0eWxlVGVzdEJhc2UpOgogICAgICAgICBlcnJvcl9sZXZlbCA9IDEKICAgICAgICAgZXJyb3Jf
bGluZXMgPSBzZWxmLnRyaWdnZXJfdGVzdF9saW5lcyhlcnJvcl9sZXZlbCkgKyAxCiAgICAgICAg
IHRyaWdnZXJfbGV2ZWwgPSBzZWxmLnRyaWdnZXJfdGVzdF9saW5lcyhzZWxmLm1pbl9jb25maWRl
bmNlKQorICAgICAgICAjIFNpbmNlIHRoZSBmdW5jdGlvbiBuYW1lIGlzbid0IHZhbGlkLCB0aGUg
ZnVuY3Rpb24gZGV0ZWN0aW9uIGFsZ29yaXRobQorICAgICAgICAjIHdpbGwgc2tpcCBpdCwgc28g
bm8gZXJyb3IgaXMgcHJvZHVjZWQuCiAgICAgICAgIHNlbGYuYXNzZXJ0X2Z1bmN0aW9uX2xlbmd0
aHNfY2hlY2soCiAgICAgICAgICAgICAoJ1RFU1RfRignCiAgICAgICAgICAgICAgKyBzZWxmLmZ1
bmN0aW9uX2JvZHkoZXJyb3JfbGluZXMpKSwKLSAgICAgICAgICAgICgnU21hbGwgYW5kIGZvY3Vz
ZWQgZnVuY3Rpb25zIGFyZSBwcmVmZXJyZWQ6ICcKLSAgICAgICAgICAgICAnVEVTVF9GIGhhcyAl
ZCBub24tY29tbWVudCBsaW5lcyAnCi0gICAgICAgICAgICAgJyhlcnJvciB0cmlnZ2VyZWQgYnkg
ZXhjZWVkaW5nICVkIGxpbmVzKS4nCi0gICAgICAgICAgICAgJyAgW3JlYWRhYmlsaXR5L2ZuX3Np
emVdIFslZF0nKQotICAgICAgICAgICAgJSAoZXJyb3JfbGluZXMsIHRyaWdnZXJfbGV2ZWwsIGVy
cm9yX2xldmVsKSkKKyAgICAgICAgICAgICcnKQogCiAgICAgZGVmIHRlc3RfZnVuY3Rpb25fbGVu
Z3RoX2NoZWNrX2RlZmluaXRpb25fc2V2ZXJpdHkxX3dpdGhfZW1iZWRkZWRfbm9fbGludHMoc2Vs
Zik6CiAgICAgICAgIGVycm9yX2xldmVsID0gMQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77391</attachid>
            <date>2010-12-23 18:11:41 -0800</date>
            <delta_ts>2010-12-23 18:16:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51451-20101223181140.patch</filename>
            <type>text/plain</type>
            <size>19544</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBjZjMw
NDUxYmFhZDNiMzM4NzcwZWFjOGU2ODg1ODAzZDY4MWExZTdjLi41NzgxZTgxNWQxYTJjMDE1YWNk
MmRlNzY1ZDk5ZDY3YjNmNmU1ZmI2IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTAtMTItMjEgIERhdmlkIExldmlu
ICA8bGV2aW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIGNoZWNrLXdlYmtpdC1zdHlsZSBzaG91bGQgYmUgYWJsZSB0byBwYXJz
ZSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBwYXJhbWV0ZXJzLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE0NTEKKworICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwLnB5OgorICAgICAgICAoUGFyYW1ldGVyLl9faW5pdF9f
KTogQ3JlYXRlZCBhIGNsYXNzIHRvIGhvbGQgaW5mb3JtYXRpb24gYWJvdXQgYSBwYXJhbWV0ZXIu
CisgICAgICAgIChQYXJhbWV0ZXJJdGVyYXRvci5fX2luaXRfXyk6IENyZWF0ZWQgYSBjbGFzcyB0
byBhbGxvdyBpdGVyYXRpb24gb3ZlciBhIGZ1bmN0aW9uJ3MgcGFyYW1ldGVycy4KKyAgICAgICAg
KFBhcmFtZXRlckl0ZXJhdG9yLl9maW5kX3BhcmFtZXRlcl9uYW1lX2luZGV4KTogRGl0dG8uCisg
ICAgICAgIChQYXJhbWV0ZXJJdGVyYXRvci5uZXh0KTogRGl0dG8uCisgICAgICAgIChQYXJhbWV0
ZXJJdGVyYXRvci5jdXJyZW50KTogRGl0dG8uCisgICAgICAgIChQYXJhbWV0ZXJJdGVyYXRvci5f
aW5pdGlhbGl6ZV9za2VsZXRvbl9wYXJhbWV0ZXJzKTogRGl0dG8uCisgICAgICAgIChfRnVuY3Rp
b25TdGF0ZS5iZWdpbik6IEFkZGVkIGluZm9ybWF0aW9uIHRvIGFsbG93IGRldGVybWluaW5nIHRo
ZSBwYXJhbWV0ZXJzCisgICAgICAgIG9uIGRlbWFuZC4KKyAgICAgICAgKF9GdW5jdGlvblN0YXRl
LmdldF9wYXJhbWV0ZXJfbGlzdCk6IFJldHVybnMgYSB0dXBsZSBvZiBmdW5jdGlvbiBwYXJhbWV0
ZXJzLgorICAgICAgICAoZGV0ZWN0X2Z1bmN0aW9ucyk6IEltcHJvdmUgZnVuY3Rpb24gZGV0ZWN0
aW9uIGZvciBvcGVyYXRvciBmdW5jdGlvbnMgYW5kCisgICAgICAgIGRldGVybWluZSB3aGVyZSB0
aGUgcGFyYW1ldGVycyBlbmQgYW5kIHBhc3MgdGhhdCB0byBfRnVuY3Rpb25TdGF0ZS5iZWdpbi4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcF91bml0dGVzdC5w
eToKKyAgICAgICAgKEZ1bmN0aW9uRGV0ZWN0aW9uVGVzdC5wZXJmb3JtX2Z1bmN0aW9uX2RldGVj
dGlvbik6IFJldHVybiB0aGUgZnVuY3Rpb24gc3RhdGUKKyAgICAgICAgc28gdGhhdCB0aGUgY2Fs
bGVyIG1heSB1c2UgaXQgdG8gZG8gbW9yZSB0ZXN0cy4KKyAgICAgICAgKEZ1bmN0aW9uRGV0ZWN0
aW9uVGVzdC50ZXN0X2Z1bmN0aW9uX2RlY2xhcmF0aW9uX2RldGVjdGlvbik6IEFkZGVkIG1vcmUg
ZnVuY3Rpb24KKyAgICAgICAgZGV0ZWN0aW9uIHRlc3QgdG8gdmVyaWZ5IHRoYXQgd2UgY2F0Y2gg
dGhlIG9wZXJhdG9yIGZ1bmN0aW9ucy4KKyAgICAgICAgKEZ1bmN0aW9uRGV0ZWN0aW9uVGVzdC50
ZXN0X2lnbm9yZV9tYWNyb3MpOiBWZXJpZnkgdGhhdCBmdW5jdGlvbiBkZXRlY3Rpb24gaWdub3Jl
cyBtYWNyb3MuCisgICAgICAgIChGdW5jdGlvbkRldGVjdGlvblRlc3QudGVzdF9wYXJhbWV0ZXJf
bGlzdCk6IEFkZGVkIHRlc3RzIHRvIHZlcmlmeSB0aGUgcGFyYW1ldGVyIHBhcnNpbmcuCisgICAg
ICAgIChDaGVja0ZvckZ1bmN0aW9uTGVuZ3Roc1Rlc3QudGVzdF9mdW5jdGlvbl9sZW5ndGhfY2hl
Y2tfZGVmaW5pdGlvbl9zZXZlcml0eTFfZm9yX2JhZF90ZXN0X2RvZXNudF9icmVhayk6IFJlbW92
ZWQKKyAgICAgICAgYmVjYXVzZSB0aGUgZXJyb3IuIFRoZSB0ZXN0IGlzIGFib3V0IHRoZSBiYWQg
ZnVuY3Rpb24gbmFtZS4gRml4aW5nIHRoZSBuYW1lIG1ha2VzIHRoZSB0ZXN0IGV4YWN0bHkgbGlr
ZQorICAgICAgICB0ZXN0X2Z1bmN0aW9uX2xlbmd0aF9jaGVja19kZWZpbml0aW9uX3NldmVyaXR5
MV9mb3JfdGVzdC4KKwogMjAxMC0xMi0yMiAgRGF2aWQgTGV2aW4gIDxsZXZpbkBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2hpbmljaGlybyBIYW1hamkuCmRpZmYgLS1naXQg
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcC5weSBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwLnB5CmluZGV4IDk0ZTViZGRhNDM5OGUx
YmM1NWVlNzA5OTEwZjI4NWNhM2I1MmM1ZWIuLjI5YmQ0OTAyNThhMDk3NTRkMDdlM2Q4ODNjZDNk
NzExOWJhMTlmYzYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hl
Y2tlcnMvY3BwLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMv
Y3BwLnB5CkBAIC0xLDcgKzEsNyBAQAogIyEvdXNyL2Jpbi9weXRob24KICMgLSotIGNvZGluZzog
dXRmLTggLSotCiAjCi0jIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICMgQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuCiAj
IENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjIENv
cHlyaWdodCAoQykgMjAxMCBDaHJpcyBKZXJkb25layAoY2plcmRvbmVrQHdlYmtpdC5vcmcpCkBA
IC0zMDcsNiArMzA3LDk4IEBAIGNsYXNzIF9JbmNsdWRlU3RhdGUoZGljdCk6CiAKICAgICAgICAg
cmV0dXJuIGVycm9yX21lc3NhZ2UKIAorY2xhc3MgUGFyYW1ldGVyKG9iamVjdCk6CisgICAgIiIi
SW5mb3JtYXRpb24gYWJvdXQgb25lIGZ1bmN0aW9uIHBhcmFtZXRlci4iIiIKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgcGFyYW1ldGVyLCB0eXBlX25hbWVfaW5kZXgsIGxpbmVfbnVtYmVyKToKKyAg
ICAgICAgc2VsZi50eXBlID0gcGFyYW1ldGVyWzp0eXBlX25hbWVfaW5kZXhdLnN0cmlwKCkKKyAg
ICAgICAgIyBSZW1vdmUgYW55IGluaXRpYWxpemVycyBmcm9tIHRoZSBwYXJhbWV0ZXIgbmFtZSAo
ZS5nLiBpbnQgaSA9IDUpLgorICAgICAgICBzZWxmLm5hbWUgPSBzdWIocic9LionLCAnJywgcGFy
YW1ldGVyW3R5cGVfbmFtZV9pbmRleDpdKS5zdHJpcCgpCisgICAgICAgIHNlbGYubGluZV9udW1i
ZXIgPSBsaW5lX251bWJlcgorCisKK2NsYXNzIFBhcmFtZXRlckl0ZXJhdG9yKG9iamVjdCk6Cisg
ICAgIiIiQWxsb3dzIGZvciBpdGVyYXRpb24gb3ZlciBhIGZ1bmN0aW9uJ3MgcGFyYW1ldGVycy4i
IiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2xlYW5fbGluZXMsIHBhcmFtZXRlcnNfc3RhcnQs
IHBhcmFtZXRlcnNfZW5kKToKKyAgICAgICAgc2VsZi5fc3RhcnRpbmdfbGluZSA9IHBhcmFtZXRl
cnNfc3RhcnRbMF0KKyAgICAgICAgIyBGb3JtIGEgc2luZ2xlIHN0cmluZyB3aXRoIGFsbCBwYXJh
bWV0ZXJzLiBUcmltbWluZyB0aGUgZmlyc3QgYW5kIGxhc3QgbGluZXMKKyAgICAgICAgIyB0byBl
bnN1cmUgb25seSB0aGUgcGFyYW1ldGVycyByZW1haW4gd2l0aG91dCB0aGUgc3Vycm91bmRpbmcg
cGFyZW50aGVzaXMuCisgICAgICAgIHBhcmFtZXRlcnNfbGluZXMgPSBjbGVhbl9saW5lcy5lbGlk
ZWRbc2VsZi5fc3RhcnRpbmdfbGluZTpwYXJhbWV0ZXJzX2VuZFswXSArIDFdCisgICAgICAgIHBh
cmFtZXRlcnNfbGluZXNbLTFdID0gcGFyYW1ldGVyc19saW5lc1stMV1bOnBhcmFtZXRlcnNfZW5k
WzFdIC0gMV0KKyAgICAgICAgcGFyYW1ldGVyc19saW5lc1swXSA9IHBhcmFtZXRlcnNfbGluZXNb
MF1bcGFyYW1ldGVyc19zdGFydFsxXSArIDE6XQorICAgICAgICBzZWxmLl9hbGxfcGFyYW1ldGVy
cyA9ICcgJy5qb2luKHBhcmFtZXRlcnNfbGluZXMpCisKKyAgICAgICAgIyBTdG9yZSB0aGUgbGVu
Z3RocyBvZiBlYWNoIGxpbmUgKGFkZGluZyAxIGR1ZSB0byB0aGUgc3BhY2UgYWRkZWQgZHVyaW5n
IHRoZSBqb2luKSB0bworICAgICAgICAjIG1ha2UgaXQgZWFzaWVyIHRvIGRldGVybWluZSB3aGF0
IGxpbmUgZWFjaCBwYXJhbWV0ZXIgaXMgb24gd2hlbiB0aGV5IGFyZSBwYXJzZWQuCisgICAgICAg
IHNlbGYuX2xpbmVfbGVuZ3RocyA9IFtsZW4obGluZSkgKyAxIGZvciBsaW5lIGluIHBhcmFtZXRl
cnNfbGluZXNdCisKKyAgICAgICAgc2VsZi5faW5pdGlhbGl6ZV9za2VsZXRvbl9wYXJhbWV0ZXJz
KHNlbGYuX2FsbF9wYXJhbWV0ZXJzKQorCisgICAgICAgICMgU2V0IHVwIHRoZSBzdGF0ZSBmb3Ig
dGhlIGZpcnN0IHBhcmFtZXRlci4KKyAgICAgICAgc2VsZi5fcHJldmlvdXNfcGFyYW1ldGVyX2lu
ZGV4ID0gMAorICAgICAgICBzZWxmLl9wcmV2aW91c19saW5lX2xlbmd0aHMgPSAwCisgICAgICAg
IHNlbGYuX2xpbmVfb2Zmc2V0ID0gMAorCisgICAgZGVmIF9maW5kX3BhcmFtZXRlcl9uYW1lX2lu
ZGV4KHNlbGYsIHNrZWxldG9uX3BhcmFtZXRlcik6CisgICAgICAgICMgVGhlIGZpcnN0IHNwYWNl
IGZyb20gdGhlIHJpZ2h0IGluIHRoZSBzaW1wbGlmaWVkIHBhcmFtZXRlciBpcyB3aGVyZSB0aGUg
cGFyYW1ldGVyIG5hbWUgc3RhcnQKKyAgICAgICAgIyB1bmxlc3MgdGhlIGZpcnN0IHNwYWNlIGlz
IGJlZm9yZSBhbnkgY29udGVudCBpbiB0aGUgc2ltcGxpZmllZCBwYXJhbWV0ZXIuCisgICAgICAg
IGJlZm9yZV90eXBlX25hbWVfaW5kZXggPSBza2VsZXRvbl9wYXJhbWV0ZXIucnN0cmlwKCkucmZp
bmQoJyAnKQorICAgICAgICBpZiBiZWZvcmVfdHlwZV9uYW1lX2luZGV4ICE9IC0xIGFuZCBza2Vs
ZXRvbl9wYXJhbWV0ZXJbOmJlZm9yZV90eXBlX25hbWVfaW5kZXhdLnN0cmlwKCk6CisgICAgICAg
ICAgICByZXR1cm4gYmVmb3JlX3R5cGVfbmFtZV9pbmRleCArIDEKKyAgICAgICAgcmV0dXJuIGxl
bihza2VsZXRvbl9wYXJhbWV0ZXIpCisKKyAgICBkZWYgbmV4dChzZWxmKToKKyAgICAgICAgIyBG
aW5kIHRoZSBlbmQgb2YgdGhlIG5leHQgcGFyYW1ldGVyLgorICAgICAgICBzdGFydF9pbmRleCA9
IHNlbGYuX3ByZXZpb3VzX3BhcmFtZXRlcl9pbmRleAorICAgICAgICBlbmRfaW5kZXggPSBzZWxm
Ll9za2VsZXRvbl9wYXJhbWV0ZXJzLmZpbmQoJywnLCBzdGFydF9pbmRleCkKKworICAgICAgICAj
IE5vIGNvbW1hIG1lYW5zIHRoYXQgYWxsIHBhcmFtZXRlcnMgaGF2ZSBiZWVuIHBhcnNlZC4KKyAg
ICAgICAgaWYgZW5kX2luZGV4ID09IC0xOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAg
ICAgICAgIyBJcyB0aGUgY29tbWEgb24gYSBuZXcgbGluZT8KKyAgICAgICAgd2hpbGUgZW5kX2lu
ZGV4ID49IHNlbGYuX3ByZXZpb3VzX2xpbmVfbGVuZ3RocyArIHNlbGYuX2xpbmVfbGVuZ3Roc1tz
ZWxmLl9saW5lX29mZnNldF06CisgICAgICAgICAgICBzZWxmLl9wcmV2aW91c19saW5lX2xlbmd0
aHMgKz0gc2VsZi5fbGluZV9sZW5ndGhzW3NlbGYuX2xpbmVfb2Zmc2V0XQorICAgICAgICAgICAg
c2VsZi5fbGluZV9vZmZzZXQgKz0gMQorCisgICAgICAgICMgUGFyc2UgdGhlIHBhcmFtZXRlciBp
bnRvIGEgdHlwZSBhbmQgcGFyYW1ldGVyIG5hbWUuCisgICAgICAgIHNrZWxldG9uX3BhcmFtZXRl
ciA9IHNlbGYuX3NrZWxldG9uX3BhcmFtZXRlcnNbc3RhcnRfaW5kZXg6ZW5kX2luZGV4XQorICAg
ICAgICBuYW1lX29mZnNldCA9IHNlbGYuX2ZpbmRfcGFyYW1ldGVyX25hbWVfaW5kZXgoc2tlbGV0
b25fcGFyYW1ldGVyKQorICAgICAgICBwYXJhbWV0ZXIgPSBzZWxmLl9hbGxfcGFyYW1ldGVyc1tz
dGFydF9pbmRleDplbmRfaW5kZXhdCisgICAgICAgIHNlbGYuX2N1cnJlbnRfcGFyYW1ldGVyID0g
UGFyYW1ldGVyKHBhcmFtZXRlciwgbmFtZV9vZmZzZXQsIHNlbGYuX2xpbmVfb2Zmc2V0ICsgc2Vs
Zi5fc3RhcnRpbmdfbGluZSkKKworICAgICAgICAjIE1vdmUgb24gdG8gdGhlIG5leHQgcGFyYW1l
dGVyICh3aGljaCBpcyBqdXN0IGFmdGVyIHRoZSBwcmV2aW91cyBjb21tYSBmb3VuZCkuCisgICAg
ICAgIHNlbGYuX3ByZXZpb3VzX3BhcmFtZXRlcl9pbmRleCA9IGVuZF9pbmRleCArIDEKKyAgICAg
ICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBjdXJyZW50KHNlbGYpOgorICAgICAgICByZXR1cm4g
c2VsZi5fY3VycmVudF9wYXJhbWV0ZXIKKworICAgIGRlZiBfaW5pdGlhbGl6ZV9za2VsZXRvbl9w
YXJhbWV0ZXJzKHNlbGYsIGFsbF9wYXJhbWV0ZXJzKToKKyAgICAgICAgIyBDb252ZXJ0cyBhIHBh
cmFtZXRlciBsaXN0IHRvIGEgc2tlbGV0b24gdmVyc2lvbi4gVGhlIHNrZWxldG9uIG9ubHkgaGFz
IG9uZQorICAgICAgICAjIHdvcmQgZm9yIHRoZSBwYXJhbWV0ZXIgbmFtZSwgb25lIHdvcmQgZm9y
IHRoZSB0eXBlLCBhbmQgY29tbWFzIGFmdGVyIGVhY2gKKyAgICAgICAgIyBwYXJhbWV0ZXIgYW5k
IG9ubHkgdGhlcmUsIGFuZCBldmVyeXRoaW5nIGluIHRoZSBza2VsZXRvbiByZW1haW5zIGluIHRo
ZQorICAgICAgICAjIHNhbWUgY29sdW1ucyBhcyB0aGUgb3JpZ2luYWwuCisgICAgICAgIGFsbF9z
aW1wbGlmaWNhdGlvbnMgPSAoCisgICAgICAgICAgICAjIFJlbW92ZSB0ZW1wbGF0ZSBwYXJhbWV0
ZXJzLCBmdW5jdGlvbiBkZWNsYXJhdGlvbiBwYXJhbWV0ZXJzLCBldGMuCisgICAgICAgICAgICBy
Jyg8W148Pl0qPz4pfChcKFteXChcKV0qP1wpKXwoXHtbXlx7XH1dKj9cfSl8KFwiW1wiXSpcIikn
LAorICAgICAgICAgICAgIyBSZW1vdmUgZXZlcnl0aGluZyBpbml0aWFsaXplcnMKKyAgICAgICAg
ICAgIHInPVteLF0qJywKKyAgICAgICAgICAgICMgUmVtb3ZlIDo6IGFuZCBldmVyeXRoaW5nIGJl
Zm9yZSBpdC4KKyAgICAgICAgICAgIHInW14sXSo6OicsCisgICAgICAgICAgICAjIFJlbW92ZSBt
b2RpZmllcnMgbGlrZSAmLCAqLgorICAgICAgICAgICAgcidbJipdJywKKyAgICAgICAgICAgICMg
UmVtb3ZlIGNvbnN0IG1vZGlmaWVycy4KKyAgICAgICAgICAgIHInXGJjb25zdFxzKyg/PVtBLVph
LXpdKScsCisgICAgICAgICAgICAjIFJlbW92ZSBudW1lcmljYWwgbW9kaWZpZXJzIGxpa2UgbG9u
Zy4KKyAgICAgICAgICAgIHInXGIodW5zaWduZWR8bG9uZ3xzaG9ydClccysoPz11bnNpZ25lZHxs
b25nfHNob3J0fGludHxjaGFyfGRvdWJsZXxmbG9hdCknKQorCisgICAgICAgIHNrZWxldG9uX3Bh
cmFtZXRlcnMgPSBhbGxfcGFyYW1ldGVycworICAgICAgICBmb3Igc2ltcGxpZmljYXRpb24gaW4g
YWxsX3NpbXBsaWZpY2F0aW9uczoKKyAgICAgICAgICAgIHNrZWxldG9uX3BhcmFtZXRlcnMgPSBp
dGVyYXRpdmVseV9yZXBsYWNlX21hdGNoZXNfd2l0aF9jaGFyKHNpbXBsaWZpY2F0aW9uLCAnICcs
IHNrZWxldG9uX3BhcmFtZXRlcnMpCisgICAgICAgIGlmIHNrZWxldG9uX3BhcmFtZXRlcnMuc3Ry
aXAoKToKKyAgICAgICAgICAgIHNrZWxldG9uX3BhcmFtZXRlcnMgKz0gJywnCisgICAgICAgICAg
ICBzZWxmLl9saW5lX2xlbmd0aHNbLTFdICs9IDEKKyAgICAgICAgc2VsZi5fc2tlbGV0b25fcGFy
YW1ldGVycyA9IHNrZWxldG9uX3BhcmFtZXRlcnMKIAogY2xhc3MgX0Z1bmN0aW9uU3RhdGUob2Jq
ZWN0KToKICAgICAiIiJUcmFja3MgY3VycmVudCBmdW5jdGlvbiBuYW1lIGFuZCB0aGUgbnVtYmVy
IG9mIGxpbmVzIGluIGl0cyBib2R5LgpAQCAtMzI5LDcgKzQyMSw3IEBAIGNsYXNzIF9GdW5jdGlv
blN0YXRlKG9iamVjdCk6CiAgICAgICAgIHNlbGYuYm9keV9zdGFydF9saW5lX251bWJlciA9IC0x
MDAwCiAgICAgICAgIHNlbGYuZW5kaW5nX2xpbmVfbnVtYmVyID0gLTEwMDAKIAotICAgIGRlZiBi
ZWdpbihzZWxmLCBmdW5jdGlvbl9uYW1lLCBib2R5X3N0YXJ0X2xpbmVfbnVtYmVyLCBlbmRpbmdf
bGluZV9udW1iZXIsIGlzX2RlY2xhcmF0aW9uKToKKyAgICBkZWYgYmVnaW4oc2VsZiwgZnVuY3Rp
b25fbmFtZSwgYm9keV9zdGFydF9saW5lX251bWJlciwgZW5kaW5nX2xpbmVfbnVtYmVyLCBpc19k
ZWNsYXJhdGlvbiwgcGFyYW1ldGVyX3N0YXJ0LCBwYXJhbWV0ZXJfZW5kLCBjbGVhbl9saW5lcyk6
CiAgICAgICAgICIiIlN0YXJ0IGFuYWx5emluZyBmdW5jdGlvbiBib2R5LgogCiAgICAgICAgIEFy
Z3M6CkBAIC0zNDQsNiArNDM2LDIyIEBAIGNsYXNzIF9GdW5jdGlvblN0YXRlKG9iamVjdCk6CiAg
ICAgICAgIHNlbGYuYm9keV9zdGFydF9saW5lX251bWJlciA9IGJvZHlfc3RhcnRfbGluZV9udW1i
ZXIKICAgICAgICAgc2VsZi5lbmRpbmdfbGluZV9udW1iZXIgPSBlbmRpbmdfbGluZV9udW1iZXIK
ICAgICAgICAgc2VsZi5pc19kZWNsYXJhdGlvbiA9IGlzX2RlY2xhcmF0aW9uCisgICAgICAgIHNl
bGYucGFyYW1ldGVyX3N0YXJ0ID0gcGFyYW1ldGVyX3N0YXJ0CisgICAgICAgIHNlbGYucGFyYW1l
dGVyX2VuZCA9IHBhcmFtZXRlcl9lbmQKKyAgICAgICAgc2VsZi5fcGFyYW1ldGVyX2xpc3QgPSBO
b25lCisgICAgICAgIHNlbGYuX2NsZWFuX2xpbmVzID0gY2xlYW5fbGluZXMKKworICAgIGRlZiBw
YXJhbWV0ZXJfbGlzdChzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuX3BhcmFtZXRlcl9saXN0
OgorICAgICAgICAgICAgcGFyYW1ldGVyX2xpc3QgPSBbXQorICAgICAgICAgICAgcGFyYW1ldGVy
X3BhcnNlciA9IFBhcmFtZXRlckl0ZXJhdG9yKHNlbGYuX2NsZWFuX2xpbmVzLCBzZWxmLnBhcmFt
ZXRlcl9zdGFydCwgc2VsZi5wYXJhbWV0ZXJfZW5kKQorICAgICAgICAgICAgd2hpbGUgcGFyYW1l
dGVyX3BhcnNlci5uZXh0KCk6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX2xpc3QuYXBwZW5k
KHBhcmFtZXRlcl9wYXJzZXIuY3VycmVudCgpKQorCisgICAgICAgICAgICAjIFN0b3JlIHRoZSBm
aW5hbCByZXN1bHQgYXMgYSB0dXBsZSBzaW5jZSB0aGF0IGlzIGltbXV0YWJsZS4KKyAgICAgICAg
ICAgIHNlbGYuX3BhcmFtZXRlcl9saXN0ID0gdHVwbGUocGFyYW1ldGVyX2xpc3QpCisKKyAgICAg
ICAgcmV0dXJuIHNlbGYuX3BhcmFtZXRlcl9saXN0CiAKICAgICBkZWYgY291bnQoc2VsZiwgbGlu
ZV9udW1iZXIpOgogICAgICAgICAiIiJDb3VudCBsaW5lIGluIGN1cnJlbnQgZnVuY3Rpb24gYm9k
eS4iIiIKQEAgLTEyMTMsNyArMTMyMSwxMSBAQCBkZWYgZGV0ZWN0X2Z1bmN0aW9ucyhjbGVhbl9s
aW5lcywgbGluZV9udW1iZXIsIGZ1bmN0aW9uX3N0YXRlLCBlcnJvcik6CiAgICAgcmF3ID0gY2xl
YW5fbGluZXMucmF3X2xpbmVzCiAgICAgcmF3X2xpbmUgPSByYXdbbGluZV9udW1iZXJdCiAKLSAg
ICByZWdleHAgPSByJ1xzKihcdyhcd3w6OnxcKnxcJnxcc3w8fD58LHx+KSopXCgnICAjIGRlY2xz
ICogJiBzcGFjZTo6bmFtZSggLi4uCisgICAgIyBMaW5lcyBlbmRpbmcgd2l0aCBhIFwgaW5kaWNh
dGUgYSBtYWNyby4gRG9uJ3QgdHJ5IHRvIGNoZWNrIHRoZW0uCisgICAgaWYgcmF3X2xpbmUuZW5k
c3dpdGgoJ1xcJyk6CisgICAgICAgIHJldHVybgorCisgICAgcmVnZXhwID0gcidccyooXHcoXHd8
Ojp8XCp8XCZ8XHN8PHw+fCx8fnwob3BlcmF0b3JccyooL3wtfD18IXxcKykrKSkqKVwoJyAgIyBk
ZWNscyAqICYgc3BhY2U6Om5hbWUoIC4uLgogICAgIG1hdGNoX3Jlc3VsdCA9IG1hdGNoKHJlZ2V4
cCwgbGluZSkKICAgICBpZiBub3QgbWF0Y2hfcmVzdWx0OgogICAgICAgICByZXR1cm4KQEAgLTEy
MzIsNyArMTM0NCw3IEBAIGRlZiBkZXRlY3RfZnVuY3Rpb25zKGNsZWFuX2xpbmVzLCBsaW5lX251
bWJlciwgZnVuY3Rpb25fc3RhdGUsIGVycm9yKToKICAgICAgICAgICAgICMgUmVwbGFjZSB0ZW1w
bGF0ZSBjb25zdHJ1Y3RzIHdpdGggXyBzbyB0aGF0IG5vIHNwYWNlcyByZW1haW4gaW4gdGhlIGZ1
bmN0aW9uIG5hbWUsCiAgICAgICAgICAgICAjIHdoaWxlIGtlZXBpbmcgdGhlIGNvbHVtbiBudW1i
ZXJzIG9mIG90aGVyIGNoYXJhY3RlcnMgdGhlIHNhbWUgYXMgImxpbmUiLgogICAgICAgICAgICAg
bGluZV93aXRoX25vX3RlbXBsYXRlcyA9IGl0ZXJhdGl2ZWx5X3JlcGxhY2VfbWF0Y2hlc193aXRo
X2NoYXIocic8W148Pl0qPicsICdfJywgbGluZSkKLSAgICAgICAgICAgIG1hdGNoX2Z1bmN0aW9u
ID0gc2VhcmNoKHInKChcd3w6fDx8PnwsfH4pKilcKCcsIGxpbmVfd2l0aF9ub190ZW1wbGF0ZXMp
CisgICAgICAgICAgICBtYXRjaF9mdW5jdGlvbiA9IHNlYXJjaChyJygoXHd8Onw8fD58LHx+fChv
cGVyYXRvclxzKigvfC18PXwhfFwrKSspKSopXCgnLCBsaW5lX3dpdGhfbm9fdGVtcGxhdGVzKQog
ICAgICAgICAgICAgaWYgbm90IG1hdGNoX2Z1bmN0aW9uOgogICAgICAgICAgICAgICAgIHJldHVy
biAgIyBUaGUgJygnIG11c3QgaGF2ZSBiZWVuIGluc2lkZSBvZiBhIHRlbXBsYXRlLgogCkBAIC0x
MjQ2LDEzICsxMzU4LDIxIEBAIGRlZiBkZXRlY3RfZnVuY3Rpb25zKGNsZWFuX2xpbmVzLCBsaW5l
X251bWJlciwgZnVuY3Rpb25fc3RhdGUsIGVycm9yKToKICAgICAgICAgICAgICAgICAgICAgZnVu
Y3Rpb24gKz0gcGFyYW1ldGVyX3JlZ2V4cC5ncm91cCgxKQogICAgICAgICAgICAgZWxzZToKICAg
ICAgICAgICAgICAgICBmdW5jdGlvbiArPSAnKCknCisKKyAgICAgICAgICAgIHBhcmFtZXRlcl9z
dGFydCA9IChsaW5lX251bWJlciwgbWF0Y2hfZnVuY3Rpb24uZW5kKDEpKQorICAgICAgICAgICAg
Y2xvc2VfcmVzdWx0ID0gY2xvc2VfZXhwcmVzc2lvbihjbGVhbl9saW5lcywgbGluZV9udW1iZXIs
IHBhcmFtZXRlcl9zdGFydFsxXSkKKyAgICAgICAgICAgIGlmIGNsb3NlX3Jlc3VsdFsxXSA9PSBs
ZW4oY2xlYW5fbGluZXMuZWxpZGVkKToKKyAgICAgICAgICAgICAgICAjIE5vIGVuZCB3YXMgZm91
bmQuCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBwYXJhbWV0ZXJfZW5kID0g
KGNsb3NlX3Jlc3VsdFsxXSwgY2xvc2VfcmVzdWx0WzJdKQorCiAgICAgICAgICAgICBpc19kZWNs
YXJhdGlvbiA9IGJvb2woc2VhcmNoKHInXltee10qOycsIHN0YXJ0X2xpbmUpKQogICAgICAgICAg
ICAgaWYgaXNfZGVjbGFyYXRpb246CiAgICAgICAgICAgICAgICAgZW5kaW5nX2xpbmVfbnVtYmVy
ID0gc3RhcnRfbGluZV9udW1iZXIKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAg
b3Blbl9icmFjZV9pbmRleCA9IHN0YXJ0X2xpbmUuZmluZCgneycpCiAgICAgICAgICAgICAgICAg
ZW5kaW5nX2xpbmVfbnVtYmVyID0gY2xvc2VfZXhwcmVzc2lvbihjbGVhbl9saW5lcywgc3RhcnRf
bGluZV9udW1iZXIsIG9wZW5fYnJhY2VfaW5kZXgpWzFdCi0gICAgICAgICAgICBmdW5jdGlvbl9z
dGF0ZS5iZWdpbihmdW5jdGlvbiwgc3RhcnRfbGluZV9udW1iZXIsIGVuZGluZ19saW5lX251bWJl
ciwgaXNfZGVjbGFyYXRpb24pCisgICAgICAgICAgICBmdW5jdGlvbl9zdGF0ZS5iZWdpbihmdW5j
dGlvbiwgc3RhcnRfbGluZV9udW1iZXIsIGVuZGluZ19saW5lX251bWJlciwgaXNfZGVjbGFyYXRp
b24sIHBhcmFtZXRlcl9zdGFydCwgcGFyYW1ldGVyX2VuZCwgY2xlYW5fbGluZXMpCiAgICAgICAg
ICAgICByZXR1cm4KIAogICAgICMgTm8gYm9keSBmb3IgdGhlIGZ1bmN0aW9uIChvciBldmlkZW5j
ZSBvZiBhIG5vbi1mdW5jdGlvbikgd2FzIGZvdW5kLgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy9jcHBfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcF91bml0dGVzdC5weQppbmRleCA3MGRmMWVhNWVj
Y2UxODI3ODliZDBkNjBjOTQ0OWY5OWZmMDkxYTQ2Li4xOTY1NTM3NTBhMDBjZGUyNDYwMjgzZjVi
NzRlNmVhMWE5NThiYjhmIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxl
L2NoZWNrZXJzL2NwcF91bml0dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0
eWxlL2NoZWNrZXJzL2NwcF91bml0dGVzdC5weQpAQCAtMSw3ICsxLDcgQEAKICMhL3Vzci9iaW4v
cHl0aG9uCiAjIC0qLSBjb2Rpbmc6IHV0Zi04OyAtKi0KICMKLSMgQ29weXJpZ2h0IChDKSAyMDA5
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAwOSwg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyBDb3B5cmlnaHQgKEMpIDIw
MDkgVG9yY2ggTW9iaWxlIEluYy4KICMgQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICMgQ29weXJpZ2h0IChDKSAyMDEwIENocmlzIEplcmRvbmVrIChj
amVyZG9uZWtAd2Via2l0Lm9yZykKQEAgLTI1MCw2ICsyNTAsMTYgQEAgY2xhc3MgRnVuY3Rpb25E
ZXRlY3Rpb25UZXN0KENwcFN0eWxlVGVzdEJhc2UpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFs
cyhmdW5jdGlvbl9zdGF0ZS5ib2R5X3N0YXJ0X2xpbmVfbnVtYmVyLCBmdW5jdGlvbl9pbmZvcm1h
dGlvblsnYm9keV9zdGFydF9saW5lX251bWJlciddKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFs
cyhmdW5jdGlvbl9zdGF0ZS5lbmRpbmdfbGluZV9udW1iZXIsIGZ1bmN0aW9uX2luZm9ybWF0aW9u
WydlbmRpbmdfbGluZV9udW1iZXInXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZnVuY3Rp
b25fc3RhdGUuaXNfZGVjbGFyYXRpb24sIGZ1bmN0aW9uX2luZm9ybWF0aW9uWydpc19kZWNsYXJh
dGlvbiddKQorICAgICAgICBleHBlY3RlZF9wYXJhbWV0ZXJzID0gZnVuY3Rpb25faW5mb3JtYXRp
b24uZ2V0KCdwYXJhbWV0ZXJfbGlzdCcpCisgICAgICAgIGlmIGV4cGVjdGVkX3BhcmFtZXRlcnM6
CisgICAgICAgICAgICBhY3R1YWxfcGFyYW1ldGVycyA9IGZ1bmN0aW9uX3N0YXRlLnBhcmFtZXRl
cl9saXN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGxlbihhY3R1YWxfcGFyYW1l
dGVycyksIGxlbihleHBlY3RlZF9wYXJhbWV0ZXJzKSkKKyAgICAgICAgICAgIGZvciBpbmRleCBp
biByYW5nZShsZW4oZXhwZWN0ZWRfcGFyYW1ldGVycykpOgorICAgICAgICAgICAgICAgIGFjdHVh
bF9wYXJhbWV0ZXIgPSBhY3R1YWxfcGFyYW1ldGVyc1tpbmRleF0KKyAgICAgICAgICAgICAgICBl
eHBlY3RlZF9wYXJhbWV0ZXIgPSBleHBlY3RlZF9wYXJhbWV0ZXJzW2luZGV4XQorICAgICAgICAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGFjdHVhbF9wYXJhbWV0ZXIudHlwZSwgZXhwZWN0ZWRf
cGFyYW1ldGVyWyd0eXBlJ10pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYWN0
dWFsX3BhcmFtZXRlci5uYW1lLCBleHBlY3RlZF9wYXJhbWV0ZXJbJ25hbWUnXSkKKyAgICAgICAg
ICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhY3R1YWxfcGFyYW1ldGVyLmxpbmVfbnVtYmVyLCBl
eHBlY3RlZF9wYXJhbWV0ZXJbJ2xpbmUnXSkKIAogICAgIGRlZiB0ZXN0X2Jhc2ljX2Z1bmN0aW9u
X2RldGVjdGlvbihzZWxmKToKICAgICAgICAgc2VsZi5wZXJmb3JtX2Z1bmN0aW9uX2RldGVjdGlv
bigKQEAgLTI2OCw2ICsyNzgsMzcgQEAgY2xhc3MgRnVuY3Rpb25EZXRlY3Rpb25UZXN0KENwcFN0
eWxlVGVzdEJhc2UpOgogICAgICAgICAgICAgICdlbmRpbmdfbGluZV9udW1iZXInOiAwLAogICAg
ICAgICAgICAgICdpc19kZWNsYXJhdGlvbic6IFRydWV9KQogCisgICAgICAgIHNlbGYucGVyZm9y
bV9mdW5jdGlvbl9kZXRlY3Rpb24oCisgICAgICAgICAgICBbJ0NoZWNrZWRJbnQ8VD4gb3BlcmF0
b3IgLyhjb25zdCBDaGVja2VkSW50PFQ+ICZsaHMsIGNvbnN0IENoZWNrZWRJbnQ8VD4gJnJocyk7
J10sCisgICAgICAgICAgICB7J25hbWUnOiAnb3BlcmF0b3IgLycsCisgICAgICAgICAgICAgJ2Jv
ZHlfc3RhcnRfbGluZV9udW1iZXInOiAwLAorICAgICAgICAgICAgICdlbmRpbmdfbGluZV9udW1i
ZXInOiAwLAorICAgICAgICAgICAgICdpc19kZWNsYXJhdGlvbic6IFRydWV9KQorCisgICAgICAg
IHNlbGYucGVyZm9ybV9mdW5jdGlvbl9kZXRlY3Rpb24oCisgICAgICAgICAgICBbJ0NoZWNrZWRJ
bnQ8VD4gb3BlcmF0b3IgLShjb25zdCBDaGVja2VkSW50PFQ+ICZsaHMsIGNvbnN0IENoZWNrZWRJ
bnQ8VD4gJnJocyk7J10sCisgICAgICAgICAgICB7J25hbWUnOiAnb3BlcmF0b3IgLScsCisgICAg
ICAgICAgICAgJ2JvZHlfc3RhcnRfbGluZV9udW1iZXInOiAwLAorICAgICAgICAgICAgICdlbmRp
bmdfbGluZV9udW1iZXInOiAwLAorICAgICAgICAgICAgJ2lzX2RlY2xhcmF0aW9uJzogVHJ1ZX0p
CisKKyAgICAgICAgc2VsZi5wZXJmb3JtX2Z1bmN0aW9uX2RldGVjdGlvbigKKyAgICAgICAgICAg
IFsnQ2hlY2tlZEludDxUPiBvcGVyYXRvciAhPShjb25zdCBDaGVja2VkSW50PFQ+ICZsaHMsIGNv
bnN0IENoZWNrZWRJbnQ8VD4gJnJocyk7J10sCisgICAgICAgICAgICB7J25hbWUnOiAnb3BlcmF0
b3IgIT0nLAorICAgICAgICAgICAgICdib2R5X3N0YXJ0X2xpbmVfbnVtYmVyJzogMCwKKyAgICAg
ICAgICAgICAnZW5kaW5nX2xpbmVfbnVtYmVyJzogMCwKKyAgICAgICAgICAgICAnaXNfZGVjbGFy
YXRpb24nOiBUcnVlfSkKKworICAgICAgICBzZWxmLnBlcmZvcm1fZnVuY3Rpb25fZGV0ZWN0aW9u
KAorICAgICAgICAgICAgWydDaGVja2VkSW50PFQ+IG9wZXJhdG9yICsoY29uc3QgQ2hlY2tlZElu
dDxUPiAmbGhzLCBjb25zdCBDaGVja2VkSW50PFQ+ICZyaHMpOyddLAorICAgICAgICAgICAgeydu
YW1lJzogJ29wZXJhdG9yICsnLAorICAgICAgICAgICAgICdib2R5X3N0YXJ0X2xpbmVfbnVtYmVy
JzogMCwKKyAgICAgICAgICAgICAnZW5kaW5nX2xpbmVfbnVtYmVyJzogMCwKKyAgICAgICAgICAg
ICAnaXNfZGVjbGFyYXRpb24nOiBUcnVlfSkKKworICAgIGRlZiB0ZXN0X2lnbm9yZV9tYWNyb3Mo
c2VsZik6CisgICAgICAgIHNlbGYucGVyZm9ybV9mdW5jdGlvbl9kZXRlY3Rpb24oWyd2b2lkIGFG
dW5jdGlvbk5hbWUoaW50KTsgXFwnXSwgTm9uZSkKKwogICAgIGRlZiB0ZXN0X25vbl9mdW5jdGlv
bnMoc2VsZik6CiAgICAgICAgICMgVGhpcyBjYXNlIGV4cG9zZWQgYW4gZXJyb3IgYmVjYXVzZSB0
aGUgb3BlbiBicmFjZSB3YXMgaW4gcXVvdGVzLgogICAgICAgICBzZWxmLnBlcmZvcm1fZnVuY3Rp
b25fZGV0ZWN0aW9uKApAQCAtMjg0LDYgKzMyNSw3MCBAQCBjbGFzcyBGdW5jdGlvbkRldGVjdGlv
blRlc3QoQ3BwU3R5bGVUZXN0QmFzZSk6CiAgICAgICAgICMgU2ltcGxlIHRlc3QgY2FzZSB3aXRo
IHNvbWV0aGluZyB0aGF0IGlzIG5vdCBhIGZ1bmN0aW9uLgogICAgICAgICBzZWxmLnBlcmZvcm1f
ZnVuY3Rpb25fZGV0ZWN0aW9uKFsnY2xhc3MgU3R1ZmY7J10sIE5vbmUpCiAKKyAgICBkZWYgdGVz
dF9wYXJhbWV0ZXJfbGlzdChzZWxmKToKKyAgICAgICAgIyBBIGZ1bmN0aW9uIHdpdGggbm8gYXJn
dW1lbnRzLgorICAgICAgICBmdW5jdGlvbl9zdGF0ZSA9IHNlbGYucGVyZm9ybV9mdW5jdGlvbl9k
ZXRlY3Rpb24oCisgICAgICAgICAgICBbJ3ZvaWQgZnVuY3Rpb25OYW1lKCk7J10sCisgICAgICAg
ICAgICB7J25hbWUnOiAnZnVuY3Rpb25OYW1lJywKKyAgICAgICAgICAgICAnYm9keV9zdGFydF9s
aW5lX251bWJlcic6IDAsCisgICAgICAgICAgICAgJ2VuZGluZ19saW5lX251bWJlcic6IDAsCisg
ICAgICAgICAgICAgJ2lzX2RlY2xhcmF0aW9uJzogVHJ1ZSwKKyAgICAgICAgICAgICAncGFyYW1l
dGVyX2xpc3QnOiAoKX0pCisKKyAgICAgICAgIyBBIGZ1bmN0aW9uIHdpdGggb25lIGFyZ3VtZW50
LgorICAgICAgICBmdW5jdGlvbl9zdGF0ZSA9IHNlbGYucGVyZm9ybV9mdW5jdGlvbl9kZXRlY3Rp
b24oCisgICAgICAgICAgICBbJ3ZvaWQgZnVuY3Rpb25OYW1lKGludCk7J10sCisgICAgICAgICAg
ICB7J25hbWUnOiAnZnVuY3Rpb25OYW1lJywKKyAgICAgICAgICAgICAnYm9keV9zdGFydF9saW5l
X251bWJlcic6IDAsCisgICAgICAgICAgICAgJ2VuZGluZ19saW5lX251bWJlcic6IDAsCisgICAg
ICAgICAgICAgJ2lzX2RlY2xhcmF0aW9uJzogVHJ1ZSwKKyAgICAgICAgICAgICAncGFyYW1ldGVy
X2xpc3QnOgorICAgICAgICAgICAgICAgICAoeyd0eXBlJzogJ2ludCcsICduYW1lJzogJycsICds
aW5lJzogMH0sKX0pCisKKyAgICAgICAgIyBBIGZ1bmN0aW9uIHdpdGggdW5zaWduZWQgYW5kIHNo
b3J0IGFyZ3VtZW50cworICAgICAgICBmdW5jdGlvbl9zdGF0ZSA9IHNlbGYucGVyZm9ybV9mdW5j
dGlvbl9kZXRlY3Rpb24oCisgICAgICAgICAgICBbJ3ZvaWQgZnVuY3Rpb25OYW1lKHVuc2lnbmVk
IGEsIHNob3J0IGIsIGxvbmcgYywgbG9uZyBsb25nIHNob3J0IHVuc2lnbmVkIGludCk7J10sCisg
ICAgICAgICAgICB7J25hbWUnOiAnZnVuY3Rpb25OYW1lJywKKyAgICAgICAgICAgICAnYm9keV9z
dGFydF9saW5lX251bWJlcic6IDAsCisgICAgICAgICAgICAgJ2VuZGluZ19saW5lX251bWJlcic6
IDAsCisgICAgICAgICAgICAgJ2lzX2RlY2xhcmF0aW9uJzogVHJ1ZSwKKyAgICAgICAgICAgICAn
cGFyYW1ldGVyX2xpc3QnOgorICAgICAgICAgICAgICAgICAoeyd0eXBlJzogJ3Vuc2lnbmVkJywg
J25hbWUnOiAnYScsICdsaW5lJzogMH0sCisgICAgICAgICAgICAgICAgICB7J3R5cGUnOiAnc2hv
cnQnLCAnbmFtZSc6ICdiJywgJ2xpbmUnOiAwfSwKKyAgICAgICAgICAgICAgICAgIHsndHlwZSc6
ICdsb25nJywgJ25hbWUnOiAnYycsICdsaW5lJzogMH0sCisgICAgICAgICAgICAgICAgICB7J3R5
cGUnOiAnbG9uZyBsb25nIHNob3J0IHVuc2lnbmVkIGludCcsICduYW1lJzogJycsICdsaW5lJzog
MH0pfSkKKworICAgICAgICAjIFNvbWUgcGFyYW1ldGVyIHR5cGUgd2l0aCBtb2RpZmllcnMgYW5k
IG5vIHBhcmFtZXRlciBuYW1lcy4KKyAgICAgICAgZnVuY3Rpb25fc3RhdGUgPSBzZWxmLnBlcmZv
cm1fZnVuY3Rpb25fZGV0ZWN0aW9uKAorICAgICAgICAgICAgWyd2aXJ0dWFsIHZvaWQgZGV0ZXJt
aW5lQVJJQURyb3BFZmZlY3RzKFZlY3RvcjxTdHJpbmc+KiYsIGNvbnN0IHVuc2lnbmVkIGxvbmcg
aW50KiYsIGNvbnN0IE1lZGlhUGxheWVyOjpQcmVsb2FkLCBPdGhlcjxPdGhlcjIsIE90aGVyMzxQ
MSwgUDI+ID4sIGludCk7J10sCisgICAgICAgICAgICB7J25hbWUnOiAnZGV0ZXJtaW5lQVJJQURy
b3BFZmZlY3RzJywKKyAgICAgICAgICAgICAnYm9keV9zdGFydF9saW5lX251bWJlcic6IDAsCisg
ICAgICAgICAgICAgJ2VuZGluZ19saW5lX251bWJlcic6IDAsCisgICAgICAgICAgICAgJ2lzX2Rl
Y2xhcmF0aW9uJzogVHJ1ZSwKKyAgICAgICAgICAgICAncGFyYW1ldGVyX2xpc3QnOgorICAgICAg
ICAgICAgICAgICAoeyd0eXBlJzogJ1ZlY3RvcjxTdHJpbmc+KiYnLCAnbmFtZSc6ICcnLCAnbGlu
ZSc6IDB9LAorICAgICAgICAgICAgICAgICAgeyd0eXBlJzogJ2NvbnN0IHVuc2lnbmVkIGxvbmcg
aW50KiYnLCAnbmFtZSc6ICcnLCAnbGluZSc6IDB9LAorICAgICAgICAgICAgICAgICAgeyd0eXBl
JzogJ2NvbnN0IE1lZGlhUGxheWVyOjpQcmVsb2FkJywgJ25hbWUnOiAnJywgJ2xpbmUnOiAwfSwK
KyAgICAgICAgICAgICAgICAgIHsndHlwZSc6ICdPdGhlcjxPdGhlcjIsIE90aGVyMzxQMSwgUDI+
ID4nLCAnbmFtZSc6ICcnLCAnbGluZSc6IDB9LAorICAgICAgICAgICAgICAgICAgeyd0eXBlJzog
J2ludCcsICduYW1lJzogJycsICdsaW5lJzogMH0pfSkKKworICAgICAgICAjIFRyeSBwYXJzaW5n
IGEgZnVuY3Rpb24gd2l0aCBhIHZlcnkgY29tcGxleCBkZWZpbml0aW9uLgorICAgICAgICBmdW5j
dGlvbl9zdGF0ZSA9IHNlbGYucGVyZm9ybV9mdW5jdGlvbl9kZXRlY3Rpb24oCisgICAgICAgICAg
ICBbJ0Fub3RoZXJUZW1wbGF0ZTxDbGFzczEsIENsYXNzMj4gYUZ1bmN0aW9uTmFtZShQYXNzUmVm
UHRyPE15Q2xhc3M+IHBhcmFtTmFtZSwnLAorICAgICAgICAgICAgICdjb25zdCBPdGhlcjFDbGFz
cyYgZm9vLCcsCisgICAgICAgICAgICAgJ2NvbnN0IENvbXBsZXhUZW1wbGF0ZTxDbGFzczEsIE5l
c3RlZFRlbXBsYXRlPFAxLCBQMj4gPiogY29uc3QgKiBwYXJhbSA9IG5ldyBDb21wbGV4VGVtcGxh
dGU8Q2xhc3MxLCBOZXN0ZWRUZW1wbGF0ZTxQMSwgUDI+ID4oMzQsIDQyKSwnLAorICAgICAgICAg
ICAgICdpbnQqIG15Q291bnQgPSAwKTsnXSwKKyAgICAgICAgICAgIHsnbmFtZSc6ICdhRnVuY3Rp
b25OYW1lJywKKyAgICAgICAgICAgICAnYm9keV9zdGFydF9saW5lX251bWJlcic6IDMsCisgICAg
ICAgICAgICAgJ2VuZGluZ19saW5lX251bWJlcic6IDMsCisgICAgICAgICAgICAgJ2lzX2RlY2xh
cmF0aW9uJzogVHJ1ZSwKKyAgICAgICAgICAgICAncGFyYW1ldGVyX2xpc3QnOgorICAgICAgICAg
ICAgICAgICAoeyd0eXBlJzogJ1Bhc3NSZWZQdHI8TXlDbGFzcz4nLCAnbmFtZSc6ICdwYXJhbU5h
bWUnLCAnbGluZSc6IDB9LAorICAgICAgICAgICAgICAgICAgeyd0eXBlJzogJ2NvbnN0IE90aGVy
MUNsYXNzJicsICduYW1lJzogJ2ZvbycsICdsaW5lJzogMX0sCisgICAgICAgICAgICAgICAgICB7
J3R5cGUnOiAnY29uc3QgQ29tcGxleFRlbXBsYXRlPENsYXNzMSwgTmVzdGVkVGVtcGxhdGU8UDEs
IFAyPiA+KiBjb25zdCAqJywgJ25hbWUnOiAncGFyYW0nLCAnbGluZSc6IDJ9LAorICAgICAgICAg
ICAgICAgICAgeyd0eXBlJzogJ2ludConLCAnbmFtZSc6ICdteUNvdW50JywgJ2xpbmUnOiAzfSl9
KQorCisKIGNsYXNzIENwcFN0eWxlVGVzdChDcHBTdHlsZVRlc3RCYXNlKToKIAogICAgICMgVGVz
dCBnZXQgbGluZSB3aWR0aC4KQEAgLTI1NDksMTQgKzI2NTQsMTIgQEAgY2xhc3MgQ2hlY2tGb3JG
dW5jdGlvbkxlbmd0aHNUZXN0KENwcFN0eWxlVGVzdEJhc2UpOgogICAgICAgICBlcnJvcl9sZXZl
bCA9IDEKICAgICAgICAgZXJyb3JfbGluZXMgPSBzZWxmLnRyaWdnZXJfdGVzdF9saW5lcyhlcnJv
cl9sZXZlbCkgKyAxCiAgICAgICAgIHRyaWdnZXJfbGV2ZWwgPSBzZWxmLnRyaWdnZXJfdGVzdF9s
aW5lcyhzZWxmLm1pbl9jb25maWRlbmNlKQorICAgICAgICAjIFNpbmNlIHRoZSBmdW5jdGlvbiBu
YW1lIGlzbid0IHZhbGlkLCB0aGUgZnVuY3Rpb24gZGV0ZWN0aW9uIGFsZ29yaXRobQorICAgICAg
ICAjIHdpbGwgc2tpcCBpdCwgc28gbm8gZXJyb3IgaXMgcHJvZHVjZWQuCiAgICAgICAgIHNlbGYu
YXNzZXJ0X2Z1bmN0aW9uX2xlbmd0aHNfY2hlY2soCiAgICAgICAgICAgICAoJ1RFU1RfRignCiAg
ICAgICAgICAgICAgKyBzZWxmLmZ1bmN0aW9uX2JvZHkoZXJyb3JfbGluZXMpKSwKLSAgICAgICAg
ICAgICgnU21hbGwgYW5kIGZvY3VzZWQgZnVuY3Rpb25zIGFyZSBwcmVmZXJyZWQ6ICcKLSAgICAg
ICAgICAgICAnVEVTVF9GIGhhcyAlZCBub24tY29tbWVudCBsaW5lcyAnCi0gICAgICAgICAgICAg
JyhlcnJvciB0cmlnZ2VyZWQgYnkgZXhjZWVkaW5nICVkIGxpbmVzKS4nCi0gICAgICAgICAgICAg
JyAgW3JlYWRhYmlsaXR5L2ZuX3NpemVdIFslZF0nKQotICAgICAgICAgICAgJSAoZXJyb3JfbGlu
ZXMsIHRyaWdnZXJfbGV2ZWwsIGVycm9yX2xldmVsKSkKKyAgICAgICAgICAgICcnKQogCiAgICAg
ZGVmIHRlc3RfZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2RlZmluaXRpb25fc2V2ZXJpdHkxX3dpdGhf
ZW1iZWRkZWRfbm9fbGludHMoc2VsZik6CiAgICAgICAgIGVycm9yX2xldmVsID0gMQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77394</attachid>
            <date>2010-12-23 18:16:55 -0800</date>
            <delta_ts>2010-12-23 19:28:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51451-20101223181654.patch</filename>
            <type>text/plain</type>
            <size>19546</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBjZjMw
NDUxYmFhZDNiMzM4NzcwZWFjOGU2ODg1ODAzZDY4MWExZTdjLi41NzgxZTgxNWQxYTJjMDE1YWNk
MmRlNzY1ZDk5ZDY3YjNmNmU1ZmI2IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTAtMTItMjEgIERhdmlkIExldmlu
ICA8bGV2aW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIGNoZWNrLXdlYmtpdC1zdHlsZSBzaG91bGQgYmUgYWJsZSB0byBwYXJz
ZSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBwYXJhbWV0ZXJzLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE0NTEKKworICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwLnB5OgorICAgICAgICAoUGFyYW1ldGVyLl9faW5pdF9f
KTogQ3JlYXRlZCBhIGNsYXNzIHRvIGhvbGQgaW5mb3JtYXRpb24gYWJvdXQgYSBwYXJhbWV0ZXIu
CisgICAgICAgIChQYXJhbWV0ZXJJdGVyYXRvci5fX2luaXRfXyk6IENyZWF0ZWQgYSBjbGFzcyB0
byBhbGxvdyBpdGVyYXRpb24gb3ZlciBhIGZ1bmN0aW9uJ3MgcGFyYW1ldGVycy4KKyAgICAgICAg
KFBhcmFtZXRlckl0ZXJhdG9yLl9maW5kX3BhcmFtZXRlcl9uYW1lX2luZGV4KTogRGl0dG8uCisg
ICAgICAgIChQYXJhbWV0ZXJJdGVyYXRvci5uZXh0KTogRGl0dG8uCisgICAgICAgIChQYXJhbWV0
ZXJJdGVyYXRvci5jdXJyZW50KTogRGl0dG8uCisgICAgICAgIChQYXJhbWV0ZXJJdGVyYXRvci5f
aW5pdGlhbGl6ZV9za2VsZXRvbl9wYXJhbWV0ZXJzKTogRGl0dG8uCisgICAgICAgIChfRnVuY3Rp
b25TdGF0ZS5iZWdpbik6IEFkZGVkIGluZm9ybWF0aW9uIHRvIGFsbG93IGRldGVybWluaW5nIHRo
ZSBwYXJhbWV0ZXJzCisgICAgICAgIG9uIGRlbWFuZC4KKyAgICAgICAgKF9GdW5jdGlvblN0YXRl
LmdldF9wYXJhbWV0ZXJfbGlzdCk6IFJldHVybnMgYSB0dXBsZSBvZiBmdW5jdGlvbiBwYXJhbWV0
ZXJzLgorICAgICAgICAoZGV0ZWN0X2Z1bmN0aW9ucyk6IEltcHJvdmUgZnVuY3Rpb24gZGV0ZWN0
aW9uIGZvciBvcGVyYXRvciBmdW5jdGlvbnMgYW5kCisgICAgICAgIGRldGVybWluZSB3aGVyZSB0
aGUgcGFyYW1ldGVycyBlbmQgYW5kIHBhc3MgdGhhdCB0byBfRnVuY3Rpb25TdGF0ZS5iZWdpbi4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcF91bml0dGVzdC5w
eToKKyAgICAgICAgKEZ1bmN0aW9uRGV0ZWN0aW9uVGVzdC5wZXJmb3JtX2Z1bmN0aW9uX2RldGVj
dGlvbik6IFJldHVybiB0aGUgZnVuY3Rpb24gc3RhdGUKKyAgICAgICAgc28gdGhhdCB0aGUgY2Fs
bGVyIG1heSB1c2UgaXQgdG8gZG8gbW9yZSB0ZXN0cy4KKyAgICAgICAgKEZ1bmN0aW9uRGV0ZWN0
aW9uVGVzdC50ZXN0X2Z1bmN0aW9uX2RlY2xhcmF0aW9uX2RldGVjdGlvbik6IEFkZGVkIG1vcmUg
ZnVuY3Rpb24KKyAgICAgICAgZGV0ZWN0aW9uIHRlc3QgdG8gdmVyaWZ5IHRoYXQgd2UgY2F0Y2gg
dGhlIG9wZXJhdG9yIGZ1bmN0aW9ucy4KKyAgICAgICAgKEZ1bmN0aW9uRGV0ZWN0aW9uVGVzdC50
ZXN0X2lnbm9yZV9tYWNyb3MpOiBWZXJpZnkgdGhhdCBmdW5jdGlvbiBkZXRlY3Rpb24gaWdub3Jl
cyBtYWNyb3MuCisgICAgICAgIChGdW5jdGlvbkRldGVjdGlvblRlc3QudGVzdF9wYXJhbWV0ZXJf
bGlzdCk6IEFkZGVkIHRlc3RzIHRvIHZlcmlmeSB0aGUgcGFyYW1ldGVyIHBhcnNpbmcuCisgICAg
ICAgIChDaGVja0ZvckZ1bmN0aW9uTGVuZ3Roc1Rlc3QudGVzdF9mdW5jdGlvbl9sZW5ndGhfY2hl
Y2tfZGVmaW5pdGlvbl9zZXZlcml0eTFfZm9yX2JhZF90ZXN0X2RvZXNudF9icmVhayk6IFJlbW92
ZWQKKyAgICAgICAgYmVjYXVzZSB0aGUgZXJyb3IuIFRoZSB0ZXN0IGlzIGFib3V0IHRoZSBiYWQg
ZnVuY3Rpb24gbmFtZS4gRml4aW5nIHRoZSBuYW1lIG1ha2VzIHRoZSB0ZXN0IGV4YWN0bHkgbGlr
ZQorICAgICAgICB0ZXN0X2Z1bmN0aW9uX2xlbmd0aF9jaGVja19kZWZpbml0aW9uX3NldmVyaXR5
MV9mb3JfdGVzdC4KKwogMjAxMC0xMi0yMiAgRGF2aWQgTGV2aW4gIDxsZXZpbkBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2hpbmljaGlybyBIYW1hamkuCmRpZmYgLS1naXQg
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcC5weSBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwLnB5CmluZGV4IDk0ZTViZGRhNDM5OGUx
YmM1NWVlNzA5OTEwZjI4NWNhM2I1MmM1ZWIuLjY3MmIzY2FhMjYxNzI1ZTdiOTU2MjMxZDkyZWNk
NWEwOTA0OTNiMDMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hl
Y2tlcnMvY3BwLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMv
Y3BwLnB5CkBAIC0xLDcgKzEsNyBAQAogIyEvdXNyL2Jpbi9weXRob24KICMgLSotIGNvZGluZzog
dXRmLTggLSotCiAjCi0jIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICMgQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuCiAj
IENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjIENv
cHlyaWdodCAoQykgMjAxMCBDaHJpcyBKZXJkb25layAoY2plcmRvbmVrQHdlYmtpdC5vcmcpCkBA
IC0zMDgsNiArMzA4LDk5IEBAIGNsYXNzIF9JbmNsdWRlU3RhdGUoZGljdCk6CiAgICAgICAgIHJl
dHVybiBlcnJvcl9tZXNzYWdlCiAKIAorY2xhc3MgUGFyYW1ldGVyKG9iamVjdCk6CisgICAgIiIi
SW5mb3JtYXRpb24gYWJvdXQgb25lIGZ1bmN0aW9uIHBhcmFtZXRlci4iIiIKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgcGFyYW1ldGVyLCB0eXBlX25hbWVfaW5kZXgsIGxpbmVfbnVtYmVyKToKKyAg
ICAgICAgc2VsZi50eXBlID0gcGFyYW1ldGVyWzp0eXBlX25hbWVfaW5kZXhdLnN0cmlwKCkKKyAg
ICAgICAgIyBSZW1vdmUgYW55IGluaXRpYWxpemVycyBmcm9tIHRoZSBwYXJhbWV0ZXIgbmFtZSAo
ZS5nLiBpbnQgaSA9IDUpLgorICAgICAgICBzZWxmLm5hbWUgPSBzdWIocic9LionLCAnJywgcGFy
YW1ldGVyW3R5cGVfbmFtZV9pbmRleDpdKS5zdHJpcCgpCisgICAgICAgIHNlbGYubGluZV9udW1i
ZXIgPSBsaW5lX251bWJlcgorCisKK2NsYXNzIFBhcmFtZXRlckl0ZXJhdG9yKG9iamVjdCk6Cisg
ICAgIiIiQWxsb3dzIGZvciBpdGVyYXRpb24gb3ZlciBhIGZ1bmN0aW9uJ3MgcGFyYW1ldGVycy4i
IiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2xlYW5fbGluZXMsIHBhcmFtZXRlcnNfc3RhcnQs
IHBhcmFtZXRlcnNfZW5kKToKKyAgICAgICAgc2VsZi5fc3RhcnRpbmdfbGluZSA9IHBhcmFtZXRl
cnNfc3RhcnRbMF0KKyAgICAgICAgIyBGb3JtIGEgc2luZ2xlIHN0cmluZyB3aXRoIGFsbCBwYXJh
bWV0ZXJzLiBUcmltbWluZyB0aGUgZmlyc3QgYW5kIGxhc3QgbGluZXMKKyAgICAgICAgIyB0byBl
bnN1cmUgb25seSB0aGUgcGFyYW1ldGVycyByZW1haW4gd2l0aG91dCB0aGUgc3Vycm91bmRpbmcg
cGFyZW50aGVzaXMuCisgICAgICAgIHBhcmFtZXRlcnNfbGluZXMgPSBjbGVhbl9saW5lcy5lbGlk
ZWRbc2VsZi5fc3RhcnRpbmdfbGluZTpwYXJhbWV0ZXJzX2VuZFswXSArIDFdCisgICAgICAgIHBh
cmFtZXRlcnNfbGluZXNbLTFdID0gcGFyYW1ldGVyc19saW5lc1stMV1bOnBhcmFtZXRlcnNfZW5k
WzFdIC0gMV0KKyAgICAgICAgcGFyYW1ldGVyc19saW5lc1swXSA9IHBhcmFtZXRlcnNfbGluZXNb
MF1bcGFyYW1ldGVyc19zdGFydFsxXSArIDE6XQorICAgICAgICBzZWxmLl9hbGxfcGFyYW1ldGVy
cyA9ICcgJy5qb2luKHBhcmFtZXRlcnNfbGluZXMpCisKKyAgICAgICAgIyBTdG9yZSB0aGUgbGVu
Z3RocyBvZiBlYWNoIGxpbmUgKGFkZGluZyAxIGR1ZSB0byB0aGUgc3BhY2UgYWRkZWQgZHVyaW5n
IHRoZSBqb2luKSB0bworICAgICAgICAjIG1ha2UgaXQgZWFzaWVyIHRvIGRldGVybWluZSB3aGF0
IGxpbmUgZWFjaCBwYXJhbWV0ZXIgaXMgb24gd2hlbiB0aGV5IGFyZSBwYXJzZWQuCisgICAgICAg
IHNlbGYuX2xpbmVfbGVuZ3RocyA9IFtsZW4obGluZSkgKyAxIGZvciBsaW5lIGluIHBhcmFtZXRl
cnNfbGluZXNdCisKKyAgICAgICAgc2VsZi5faW5pdGlhbGl6ZV9za2VsZXRvbl9wYXJhbWV0ZXJz
KHNlbGYuX2FsbF9wYXJhbWV0ZXJzKQorCisgICAgICAgICMgU2V0IHVwIHRoZSBzdGF0ZSBmb3Ig
dGhlIGZpcnN0IHBhcmFtZXRlci4KKyAgICAgICAgc2VsZi5fcHJldmlvdXNfcGFyYW1ldGVyX2lu
ZGV4ID0gMAorICAgICAgICBzZWxmLl9wcmV2aW91c19saW5lX2xlbmd0aHMgPSAwCisgICAgICAg
IHNlbGYuX2xpbmVfb2Zmc2V0ID0gMAorCisgICAgZGVmIF9maW5kX3BhcmFtZXRlcl9uYW1lX2lu
ZGV4KHNlbGYsIHNrZWxldG9uX3BhcmFtZXRlcik6CisgICAgICAgICMgVGhlIGZpcnN0IHNwYWNl
IGZyb20gdGhlIHJpZ2h0IGluIHRoZSBzaW1wbGlmaWVkIHBhcmFtZXRlciBpcyB3aGVyZSB0aGUg
cGFyYW1ldGVyIG5hbWUgc3RhcnQKKyAgICAgICAgIyB1bmxlc3MgdGhlIGZpcnN0IHNwYWNlIGlz
IGJlZm9yZSBhbnkgY29udGVudCBpbiB0aGUgc2ltcGxpZmllZCBwYXJhbWV0ZXIuCisgICAgICAg
IGJlZm9yZV90eXBlX25hbWVfaW5kZXggPSBza2VsZXRvbl9wYXJhbWV0ZXIucnN0cmlwKCkucmZp
bmQoJyAnKQorICAgICAgICBpZiBiZWZvcmVfdHlwZV9uYW1lX2luZGV4ICE9IC0xIGFuZCBza2Vs
ZXRvbl9wYXJhbWV0ZXJbOmJlZm9yZV90eXBlX25hbWVfaW5kZXhdLnN0cmlwKCk6CisgICAgICAg
ICAgICByZXR1cm4gYmVmb3JlX3R5cGVfbmFtZV9pbmRleCArIDEKKyAgICAgICAgcmV0dXJuIGxl
bihza2VsZXRvbl9wYXJhbWV0ZXIpCisKKyAgICBkZWYgbmV4dChzZWxmKToKKyAgICAgICAgIyBG
aW5kIHRoZSBlbmQgb2YgdGhlIG5leHQgcGFyYW1ldGVyLgorICAgICAgICBzdGFydF9pbmRleCA9
IHNlbGYuX3ByZXZpb3VzX3BhcmFtZXRlcl9pbmRleAorICAgICAgICBlbmRfaW5kZXggPSBzZWxm
Ll9za2VsZXRvbl9wYXJhbWV0ZXJzLmZpbmQoJywnLCBzdGFydF9pbmRleCkKKworICAgICAgICAj
IE5vIGNvbW1hIG1lYW5zIHRoYXQgYWxsIHBhcmFtZXRlcnMgaGF2ZSBiZWVuIHBhcnNlZC4KKyAg
ICAgICAgaWYgZW5kX2luZGV4ID09IC0xOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAg
ICAgICAgIyBJcyB0aGUgY29tbWEgb24gYSBuZXcgbGluZT8KKyAgICAgICAgd2hpbGUgZW5kX2lu
ZGV4ID49IHNlbGYuX3ByZXZpb3VzX2xpbmVfbGVuZ3RocyArIHNlbGYuX2xpbmVfbGVuZ3Roc1tz
ZWxmLl9saW5lX29mZnNldF06CisgICAgICAgICAgICBzZWxmLl9wcmV2aW91c19saW5lX2xlbmd0
aHMgKz0gc2VsZi5fbGluZV9sZW5ndGhzW3NlbGYuX2xpbmVfb2Zmc2V0XQorICAgICAgICAgICAg
c2VsZi5fbGluZV9vZmZzZXQgKz0gMQorCisgICAgICAgICMgUGFyc2UgdGhlIHBhcmFtZXRlciBp
bnRvIGEgdHlwZSBhbmQgcGFyYW1ldGVyIG5hbWUuCisgICAgICAgIHNrZWxldG9uX3BhcmFtZXRl
ciA9IHNlbGYuX3NrZWxldG9uX3BhcmFtZXRlcnNbc3RhcnRfaW5kZXg6ZW5kX2luZGV4XQorICAg
ICAgICBuYW1lX29mZnNldCA9IHNlbGYuX2ZpbmRfcGFyYW1ldGVyX25hbWVfaW5kZXgoc2tlbGV0
b25fcGFyYW1ldGVyKQorICAgICAgICBwYXJhbWV0ZXIgPSBzZWxmLl9hbGxfcGFyYW1ldGVyc1tz
dGFydF9pbmRleDplbmRfaW5kZXhdCisgICAgICAgIHNlbGYuX2N1cnJlbnRfcGFyYW1ldGVyID0g
UGFyYW1ldGVyKHBhcmFtZXRlciwgbmFtZV9vZmZzZXQsIHNlbGYuX2xpbmVfb2Zmc2V0ICsgc2Vs
Zi5fc3RhcnRpbmdfbGluZSkKKworICAgICAgICAjIE1vdmUgb24gdG8gdGhlIG5leHQgcGFyYW1l
dGVyICh3aGljaCBpcyBqdXN0IGFmdGVyIHRoZSBwcmV2aW91cyBjb21tYSBmb3VuZCkuCisgICAg
ICAgIHNlbGYuX3ByZXZpb3VzX3BhcmFtZXRlcl9pbmRleCA9IGVuZF9pbmRleCArIDEKKyAgICAg
ICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBjdXJyZW50KHNlbGYpOgorICAgICAgICByZXR1cm4g
c2VsZi5fY3VycmVudF9wYXJhbWV0ZXIKKworICAgIGRlZiBfaW5pdGlhbGl6ZV9za2VsZXRvbl9w
YXJhbWV0ZXJzKHNlbGYsIGFsbF9wYXJhbWV0ZXJzKToKKyAgICAgICAgIyBDb252ZXJ0cyBhIHBh
cmFtZXRlciBsaXN0IHRvIGEgc2tlbGV0b24gdmVyc2lvbi4gVGhlIHNrZWxldG9uIG9ubHkgaGFz
IG9uZQorICAgICAgICAjIHdvcmQgZm9yIHRoZSBwYXJhbWV0ZXIgbmFtZSwgb25lIHdvcmQgZm9y
IHRoZSB0eXBlLCBhbmQgY29tbWFzIGFmdGVyIGVhY2gKKyAgICAgICAgIyBwYXJhbWV0ZXIgYW5k
IG9ubHkgdGhlcmUsIGFuZCBldmVyeXRoaW5nIGluIHRoZSBza2VsZXRvbiByZW1haW5zIGluIHRo
ZQorICAgICAgICAjIHNhbWUgY29sdW1ucyBhcyB0aGUgb3JpZ2luYWwuCisgICAgICAgIGFsbF9z
aW1wbGlmaWNhdGlvbnMgPSAoCisgICAgICAgICAgICAjIFJlbW92ZSB0ZW1wbGF0ZSBwYXJhbWV0
ZXJzLCBmdW5jdGlvbiBkZWNsYXJhdGlvbiBwYXJhbWV0ZXJzLCBldGMuCisgICAgICAgICAgICBy
Jyg8W148Pl0qPz4pfChcKFteXChcKV0qP1wpKXwoXHtbXlx7XH1dKj9cfSl8KFwiW1wiXSpcIikn
LAorICAgICAgICAgICAgIyBSZW1vdmUgZXZlcnl0aGluZyBpbml0aWFsaXplcnMKKyAgICAgICAg
ICAgIHInPVteLF0qJywKKyAgICAgICAgICAgICMgUmVtb3ZlIDo6IGFuZCBldmVyeXRoaW5nIGJl
Zm9yZSBpdC4KKyAgICAgICAgICAgIHInW14sXSo6OicsCisgICAgICAgICAgICAjIFJlbW92ZSBt
b2RpZmllcnMgbGlrZSAmLCAqLgorICAgICAgICAgICAgcidbJipdJywKKyAgICAgICAgICAgICMg
UmVtb3ZlIGNvbnN0IG1vZGlmaWVycy4KKyAgICAgICAgICAgIHInXGJjb25zdFxzKyg/PVtBLVph
LXpdKScsCisgICAgICAgICAgICAjIFJlbW92ZSBudW1lcmljYWwgbW9kaWZpZXJzIGxpa2UgbG9u
Zy4KKyAgICAgICAgICAgIHInXGIodW5zaWduZWR8bG9uZ3xzaG9ydClccysoPz11bnNpZ25lZHxs
b25nfHNob3J0fGludHxjaGFyfGRvdWJsZXxmbG9hdCknKQorCisgICAgICAgIHNrZWxldG9uX3Bh
cmFtZXRlcnMgPSBhbGxfcGFyYW1ldGVycworICAgICAgICBmb3Igc2ltcGxpZmljYXRpb24gaW4g
YWxsX3NpbXBsaWZpY2F0aW9uczoKKyAgICAgICAgICAgIHNrZWxldG9uX3BhcmFtZXRlcnMgPSBp
dGVyYXRpdmVseV9yZXBsYWNlX21hdGNoZXNfd2l0aF9jaGFyKHNpbXBsaWZpY2F0aW9uLCAnICcs
IHNrZWxldG9uX3BhcmFtZXRlcnMpCisgICAgICAgIGlmIHNrZWxldG9uX3BhcmFtZXRlcnMuc3Ry
aXAoKToKKyAgICAgICAgICAgIHNrZWxldG9uX3BhcmFtZXRlcnMgKz0gJywnCisgICAgICAgICAg
ICBzZWxmLl9saW5lX2xlbmd0aHNbLTFdICs9IDEKKyAgICAgICAgc2VsZi5fc2tlbGV0b25fcGFy
YW1ldGVycyA9IHNrZWxldG9uX3BhcmFtZXRlcnMKKwogY2xhc3MgX0Z1bmN0aW9uU3RhdGUob2Jq
ZWN0KToKICAgICAiIiJUcmFja3MgY3VycmVudCBmdW5jdGlvbiBuYW1lIGFuZCB0aGUgbnVtYmVy
IG9mIGxpbmVzIGluIGl0cyBib2R5LgogCkBAIC0zMjksNyArNDIyLDcgQEAgY2xhc3MgX0Z1bmN0
aW9uU3RhdGUob2JqZWN0KToKICAgICAgICAgc2VsZi5ib2R5X3N0YXJ0X2xpbmVfbnVtYmVyID0g
LTEwMDAKICAgICAgICAgc2VsZi5lbmRpbmdfbGluZV9udW1iZXIgPSAtMTAwMAogCi0gICAgZGVm
IGJlZ2luKHNlbGYsIGZ1bmN0aW9uX25hbWUsIGJvZHlfc3RhcnRfbGluZV9udW1iZXIsIGVuZGlu
Z19saW5lX251bWJlciwgaXNfZGVjbGFyYXRpb24pOgorICAgIGRlZiBiZWdpbihzZWxmLCBmdW5j
dGlvbl9uYW1lLCBib2R5X3N0YXJ0X2xpbmVfbnVtYmVyLCBlbmRpbmdfbGluZV9udW1iZXIsIGlz
X2RlY2xhcmF0aW9uLCBwYXJhbWV0ZXJfc3RhcnQsIHBhcmFtZXRlcl9lbmQsIGNsZWFuX2xpbmVz
KToKICAgICAgICAgIiIiU3RhcnQgYW5hbHl6aW5nIGZ1bmN0aW9uIGJvZHkuCiAKICAgICAgICAg
QXJnczoKQEAgLTM0NCw2ICs0MzcsMjIgQEAgY2xhc3MgX0Z1bmN0aW9uU3RhdGUob2JqZWN0KToK
ICAgICAgICAgc2VsZi5ib2R5X3N0YXJ0X2xpbmVfbnVtYmVyID0gYm9keV9zdGFydF9saW5lX251
bWJlcgogICAgICAgICBzZWxmLmVuZGluZ19saW5lX251bWJlciA9IGVuZGluZ19saW5lX251bWJl
cgogICAgICAgICBzZWxmLmlzX2RlY2xhcmF0aW9uID0gaXNfZGVjbGFyYXRpb24KKyAgICAgICAg
c2VsZi5wYXJhbWV0ZXJfc3RhcnQgPSBwYXJhbWV0ZXJfc3RhcnQKKyAgICAgICAgc2VsZi5wYXJh
bWV0ZXJfZW5kID0gcGFyYW1ldGVyX2VuZAorICAgICAgICBzZWxmLl9wYXJhbWV0ZXJfbGlzdCA9
IE5vbmUKKyAgICAgICAgc2VsZi5fY2xlYW5fbGluZXMgPSBjbGVhbl9saW5lcworCisgICAgZGVm
IHBhcmFtZXRlcl9saXN0KHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fcGFyYW1ldGVyX2xp
c3Q6CisgICAgICAgICAgICBwYXJhbWV0ZXJfbGlzdCA9IFtdCisgICAgICAgICAgICBwYXJhbWV0
ZXJfcGFyc2VyID0gUGFyYW1ldGVySXRlcmF0b3Ioc2VsZi5fY2xlYW5fbGluZXMsIHNlbGYucGFy
YW1ldGVyX3N0YXJ0LCBzZWxmLnBhcmFtZXRlcl9lbmQpCisgICAgICAgICAgICB3aGlsZSBwYXJh
bWV0ZXJfcGFyc2VyLm5leHQoKToKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfbGlzdC5hcHBl
bmQocGFyYW1ldGVyX3BhcnNlci5jdXJyZW50KCkpCisKKyAgICAgICAgICAgICMgU3RvcmUgdGhl
IGZpbmFsIHJlc3VsdCBhcyBhIHR1cGxlIHNpbmNlIHRoYXQgaXMgaW1tdXRhYmxlLgorICAgICAg
ICAgICAgc2VsZi5fcGFyYW1ldGVyX2xpc3QgPSB0dXBsZShwYXJhbWV0ZXJfbGlzdCkKKworICAg
ICAgICByZXR1cm4gc2VsZi5fcGFyYW1ldGVyX2xpc3QKIAogICAgIGRlZiBjb3VudChzZWxmLCBs
aW5lX251bWJlcik6CiAgICAgICAgICIiIkNvdW50IGxpbmUgaW4gY3VycmVudCBmdW5jdGlvbiBi
b2R5LiIiIgpAQCAtMTIxMyw3ICsxMzIyLDExIEBAIGRlZiBkZXRlY3RfZnVuY3Rpb25zKGNsZWFu
X2xpbmVzLCBsaW5lX251bWJlciwgZnVuY3Rpb25fc3RhdGUsIGVycm9yKToKICAgICByYXcgPSBj
bGVhbl9saW5lcy5yYXdfbGluZXMKICAgICByYXdfbGluZSA9IHJhd1tsaW5lX251bWJlcl0KIAot
ICAgIHJlZ2V4cCA9IHInXHMqKFx3KFx3fDo6fFwqfFwmfFxzfDx8PnwsfH4pKilcKCcgICMgZGVj
bHMgKiAmIHNwYWNlOjpuYW1lKCAuLi4KKyAgICAjIExpbmVzIGVuZGluZyB3aXRoIGEgXCBpbmRp
Y2F0ZSBhIG1hY3JvLiBEb24ndCB0cnkgdG8gY2hlY2sgdGhlbS4KKyAgICBpZiByYXdfbGluZS5l
bmRzd2l0aCgnXFwnKToKKyAgICAgICAgcmV0dXJuCisKKyAgICByZWdleHAgPSByJ1xzKihcdyhc
d3w6OnxcKnxcJnxcc3w8fD58LHx+fChvcGVyYXRvclxzKigvfC18PXwhfFwrKSspKSopXCgnICAj
IGRlY2xzICogJiBzcGFjZTo6bmFtZSggLi4uCiAgICAgbWF0Y2hfcmVzdWx0ID0gbWF0Y2gocmVn
ZXhwLCBsaW5lKQogICAgIGlmIG5vdCBtYXRjaF9yZXN1bHQ6CiAgICAgICAgIHJldHVybgpAQCAt
MTIzMiw3ICsxMzQ1LDcgQEAgZGVmIGRldGVjdF9mdW5jdGlvbnMoY2xlYW5fbGluZXMsIGxpbmVf
bnVtYmVyLCBmdW5jdGlvbl9zdGF0ZSwgZXJyb3IpOgogICAgICAgICAgICAgIyBSZXBsYWNlIHRl
bXBsYXRlIGNvbnN0cnVjdHMgd2l0aCBfIHNvIHRoYXQgbm8gc3BhY2VzIHJlbWFpbiBpbiB0aGUg
ZnVuY3Rpb24gbmFtZSwKICAgICAgICAgICAgICMgd2hpbGUga2VlcGluZyB0aGUgY29sdW1uIG51
bWJlcnMgb2Ygb3RoZXIgY2hhcmFjdGVycyB0aGUgc2FtZSBhcyAibGluZSIuCiAgICAgICAgICAg
ICBsaW5lX3dpdGhfbm9fdGVtcGxhdGVzID0gaXRlcmF0aXZlbHlfcmVwbGFjZV9tYXRjaGVzX3dp
dGhfY2hhcihyJzxbXjw+XSo+JywgJ18nLCBsaW5lKQotICAgICAgICAgICAgbWF0Y2hfZnVuY3Rp
b24gPSBzZWFyY2gocicoKFx3fDp8PHw+fCx8fikqKVwoJywgbGluZV93aXRoX25vX3RlbXBsYXRl
cykKKyAgICAgICAgICAgIG1hdGNoX2Z1bmN0aW9uID0gc2VhcmNoKHInKChcd3w6fDx8PnwsfH58
KG9wZXJhdG9yXHMqKC98LXw9fCF8XCspKykpKilcKCcsIGxpbmVfd2l0aF9ub190ZW1wbGF0ZXMp
CiAgICAgICAgICAgICBpZiBub3QgbWF0Y2hfZnVuY3Rpb246CiAgICAgICAgICAgICAgICAgcmV0
dXJuICAjIFRoZSAnKCcgbXVzdCBoYXZlIGJlZW4gaW5zaWRlIG9mIGEgdGVtcGxhdGUuCiAKQEAg
LTEyNDYsMTMgKzEzNTksMjEgQEAgZGVmIGRldGVjdF9mdW5jdGlvbnMoY2xlYW5fbGluZXMsIGxp
bmVfbnVtYmVyLCBmdW5jdGlvbl9zdGF0ZSwgZXJyb3IpOgogICAgICAgICAgICAgICAgICAgICBm
dW5jdGlvbiArPSBwYXJhbWV0ZXJfcmVnZXhwLmdyb3VwKDEpCiAgICAgICAgICAgICBlbHNlOgog
ICAgICAgICAgICAgICAgIGZ1bmN0aW9uICs9ICcoKScKKworICAgICAgICAgICAgcGFyYW1ldGVy
X3N0YXJ0ID0gKGxpbmVfbnVtYmVyLCBtYXRjaF9mdW5jdGlvbi5lbmQoMSkpCisgICAgICAgICAg
ICBjbG9zZV9yZXN1bHQgPSBjbG9zZV9leHByZXNzaW9uKGNsZWFuX2xpbmVzLCBsaW5lX251bWJl
ciwgcGFyYW1ldGVyX3N0YXJ0WzFdKQorICAgICAgICAgICAgaWYgY2xvc2VfcmVzdWx0WzFdID09
IGxlbihjbGVhbl9saW5lcy5lbGlkZWQpOgorICAgICAgICAgICAgICAgICMgTm8gZW5kIHdhcyBm
b3VuZC4KKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHBhcmFtZXRlcl9lbmQg
PSAoY2xvc2VfcmVzdWx0WzFdLCBjbG9zZV9yZXN1bHRbMl0pCisKICAgICAgICAgICAgIGlzX2Rl
Y2xhcmF0aW9uID0gYm9vbChzZWFyY2gocideW157XSo7Jywgc3RhcnRfbGluZSkpCiAgICAgICAg
ICAgICBpZiBpc19kZWNsYXJhdGlvbjoKICAgICAgICAgICAgICAgICBlbmRpbmdfbGluZV9udW1i
ZXIgPSBzdGFydF9saW5lX251bWJlcgogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAg
ICBvcGVuX2JyYWNlX2luZGV4ID0gc3RhcnRfbGluZS5maW5kKCd7JykKICAgICAgICAgICAgICAg
ICBlbmRpbmdfbGluZV9udW1iZXIgPSBjbG9zZV9leHByZXNzaW9uKGNsZWFuX2xpbmVzLCBzdGFy
dF9saW5lX251bWJlciwgb3Blbl9icmFjZV9pbmRleClbMV0KLSAgICAgICAgICAgIGZ1bmN0aW9u
X3N0YXRlLmJlZ2luKGZ1bmN0aW9uLCBzdGFydF9saW5lX251bWJlciwgZW5kaW5nX2xpbmVfbnVt
YmVyLCBpc19kZWNsYXJhdGlvbikKKyAgICAgICAgICAgIGZ1bmN0aW9uX3N0YXRlLmJlZ2luKGZ1
bmN0aW9uLCBzdGFydF9saW5lX251bWJlciwgZW5kaW5nX2xpbmVfbnVtYmVyLCBpc19kZWNsYXJh
dGlvbiwgcGFyYW1ldGVyX3N0YXJ0LCBwYXJhbWV0ZXJfZW5kLCBjbGVhbl9saW5lcykKICAgICAg
ICAgICAgIHJldHVybgogCiAgICAgIyBObyBib2R5IGZvciB0aGUgZnVuY3Rpb24gKG9yIGV2aWRl
bmNlIG9mIGEgbm9uLWZ1bmN0aW9uKSB3YXMgZm91bmQuCmRpZmYgLS1naXQgYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcF91bml0dGVzdC5weSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwX3VuaXR0ZXN0LnB5CmluZGV4IDcwZGYxZWE1
ZWNjZTE4Mjc4OWJkMGQ2MGM5NDQ5Zjk5ZmYwOTFhNDYuLjE5NjU1Mzc1MGEwMGNkZTI0NjAyODNm
NWI3NGU2ZWExYTk1OGJiOGYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5
bGUvY2hlY2tlcnMvY3BwX3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
c3R5bGUvY2hlY2tlcnMvY3BwX3VuaXR0ZXN0LnB5CkBAIC0xLDcgKzEsNyBAQAogIyEvdXNyL2Jp
bi9weXRob24KICMgLSotIGNvZGluZzogdXRmLTg7IC0qLQogIwotIyBDb3B5cmlnaHQgKEMpIDIw
MDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDA5
LCAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjIENvcHlyaWdodCAoQykg
MjAwOSBUb3JjaCBNb2JpbGUgSW5jLgogIyBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogIyBDb3B5cmlnaHQgKEMpIDIwMTAgQ2hyaXMgSmVyZG9uZWsg
KGNqZXJkb25la0B3ZWJraXQub3JnKQpAQCAtMjUwLDYgKzI1MCwxNiBAQCBjbGFzcyBGdW5jdGlv
bkRldGVjdGlvblRlc3QoQ3BwU3R5bGVUZXN0QmFzZSk6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWxzKGZ1bmN0aW9uX3N0YXRlLmJvZHlfc3RhcnRfbGluZV9udW1iZXIsIGZ1bmN0aW9uX2luZm9y
bWF0aW9uWydib2R5X3N0YXJ0X2xpbmVfbnVtYmVyJ10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWxzKGZ1bmN0aW9uX3N0YXRlLmVuZGluZ19saW5lX251bWJlciwgZnVuY3Rpb25faW5mb3JtYXRp
b25bJ2VuZGluZ19saW5lX251bWJlciddKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmdW5j
dGlvbl9zdGF0ZS5pc19kZWNsYXJhdGlvbiwgZnVuY3Rpb25faW5mb3JtYXRpb25bJ2lzX2RlY2xh
cmF0aW9uJ10pCisgICAgICAgIGV4cGVjdGVkX3BhcmFtZXRlcnMgPSBmdW5jdGlvbl9pbmZvcm1h
dGlvbi5nZXQoJ3BhcmFtZXRlcl9saXN0JykKKyAgICAgICAgaWYgZXhwZWN0ZWRfcGFyYW1ldGVy
czoKKyAgICAgICAgICAgIGFjdHVhbF9wYXJhbWV0ZXJzID0gZnVuY3Rpb25fc3RhdGUucGFyYW1l
dGVyX2xpc3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGFjdHVhbF9wYXJh
bWV0ZXJzKSwgbGVuKGV4cGVjdGVkX3BhcmFtZXRlcnMpKQorICAgICAgICAgICAgZm9yIGluZGV4
IGluIHJhbmdlKGxlbihleHBlY3RlZF9wYXJhbWV0ZXJzKSk6CisgICAgICAgICAgICAgICAgYWN0
dWFsX3BhcmFtZXRlciA9IGFjdHVhbF9wYXJhbWV0ZXJzW2luZGV4XQorICAgICAgICAgICAgICAg
IGV4cGVjdGVkX3BhcmFtZXRlciA9IGV4cGVjdGVkX3BhcmFtZXRlcnNbaW5kZXhdCisgICAgICAg
ICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYWN0dWFsX3BhcmFtZXRlci50eXBlLCBleHBlY3Rl
ZF9wYXJhbWV0ZXJbJ3R5cGUnXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhh
Y3R1YWxfcGFyYW1ldGVyLm5hbWUsIGV4cGVjdGVkX3BhcmFtZXRlclsnbmFtZSddKQorICAgICAg
ICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGFjdHVhbF9wYXJhbWV0ZXIubGluZV9udW1iZXIs
IGV4cGVjdGVkX3BhcmFtZXRlclsnbGluZSddKQogCiAgICAgZGVmIHRlc3RfYmFzaWNfZnVuY3Rp
b25fZGV0ZWN0aW9uKHNlbGYpOgogICAgICAgICBzZWxmLnBlcmZvcm1fZnVuY3Rpb25fZGV0ZWN0
aW9uKApAQCAtMjY4LDYgKzI3OCwzNyBAQCBjbGFzcyBGdW5jdGlvbkRldGVjdGlvblRlc3QoQ3Bw
U3R5bGVUZXN0QmFzZSk6CiAgICAgICAgICAgICAgJ2VuZGluZ19saW5lX251bWJlcic6IDAsCiAg
ICAgICAgICAgICAgJ2lzX2RlY2xhcmF0aW9uJzogVHJ1ZX0pCiAKKyAgICAgICAgc2VsZi5wZXJm
b3JtX2Z1bmN0aW9uX2RldGVjdGlvbigKKyAgICAgICAgICAgIFsnQ2hlY2tlZEludDxUPiBvcGVy
YXRvciAvKGNvbnN0IENoZWNrZWRJbnQ8VD4gJmxocywgY29uc3QgQ2hlY2tlZEludDxUPiAmcmhz
KTsnXSwKKyAgICAgICAgICAgIHsnbmFtZSc6ICdvcGVyYXRvciAvJywKKyAgICAgICAgICAgICAn
Ym9keV9zdGFydF9saW5lX251bWJlcic6IDAsCisgICAgICAgICAgICAgJ2VuZGluZ19saW5lX251
bWJlcic6IDAsCisgICAgICAgICAgICAgJ2lzX2RlY2xhcmF0aW9uJzogVHJ1ZX0pCisKKyAgICAg
ICAgc2VsZi5wZXJmb3JtX2Z1bmN0aW9uX2RldGVjdGlvbigKKyAgICAgICAgICAgIFsnQ2hlY2tl
ZEludDxUPiBvcGVyYXRvciAtKGNvbnN0IENoZWNrZWRJbnQ8VD4gJmxocywgY29uc3QgQ2hlY2tl
ZEludDxUPiAmcmhzKTsnXSwKKyAgICAgICAgICAgIHsnbmFtZSc6ICdvcGVyYXRvciAtJywKKyAg
ICAgICAgICAgICAnYm9keV9zdGFydF9saW5lX251bWJlcic6IDAsCisgICAgICAgICAgICAgJ2Vu
ZGluZ19saW5lX251bWJlcic6IDAsCisgICAgICAgICAgICAnaXNfZGVjbGFyYXRpb24nOiBUcnVl
fSkKKworICAgICAgICBzZWxmLnBlcmZvcm1fZnVuY3Rpb25fZGV0ZWN0aW9uKAorICAgICAgICAg
ICAgWydDaGVja2VkSW50PFQ+IG9wZXJhdG9yICE9KGNvbnN0IENoZWNrZWRJbnQ8VD4gJmxocywg
Y29uc3QgQ2hlY2tlZEludDxUPiAmcmhzKTsnXSwKKyAgICAgICAgICAgIHsnbmFtZSc6ICdvcGVy
YXRvciAhPScsCisgICAgICAgICAgICAgJ2JvZHlfc3RhcnRfbGluZV9udW1iZXInOiAwLAorICAg
ICAgICAgICAgICdlbmRpbmdfbGluZV9udW1iZXInOiAwLAorICAgICAgICAgICAgICdpc19kZWNs
YXJhdGlvbic6IFRydWV9KQorCisgICAgICAgIHNlbGYucGVyZm9ybV9mdW5jdGlvbl9kZXRlY3Rp
b24oCisgICAgICAgICAgICBbJ0NoZWNrZWRJbnQ8VD4gb3BlcmF0b3IgKyhjb25zdCBDaGVja2Vk
SW50PFQ+ICZsaHMsIGNvbnN0IENoZWNrZWRJbnQ8VD4gJnJocyk7J10sCisgICAgICAgICAgICB7
J25hbWUnOiAnb3BlcmF0b3IgKycsCisgICAgICAgICAgICAgJ2JvZHlfc3RhcnRfbGluZV9udW1i
ZXInOiAwLAorICAgICAgICAgICAgICdlbmRpbmdfbGluZV9udW1iZXInOiAwLAorICAgICAgICAg
ICAgICdpc19kZWNsYXJhdGlvbic6IFRydWV9KQorCisgICAgZGVmIHRlc3RfaWdub3JlX21hY3Jv
cyhzZWxmKToKKyAgICAgICAgc2VsZi5wZXJmb3JtX2Z1bmN0aW9uX2RldGVjdGlvbihbJ3ZvaWQg
YUZ1bmN0aW9uTmFtZShpbnQpOyBcXCddLCBOb25lKQorCiAgICAgZGVmIHRlc3Rfbm9uX2Z1bmN0
aW9ucyhzZWxmKToKICAgICAgICAgIyBUaGlzIGNhc2UgZXhwb3NlZCBhbiBlcnJvciBiZWNhdXNl
IHRoZSBvcGVuIGJyYWNlIHdhcyBpbiBxdW90ZXMuCiAgICAgICAgIHNlbGYucGVyZm9ybV9mdW5j
dGlvbl9kZXRlY3Rpb24oCkBAIC0yODQsNiArMzI1LDcwIEBAIGNsYXNzIEZ1bmN0aW9uRGV0ZWN0
aW9uVGVzdChDcHBTdHlsZVRlc3RCYXNlKToKICAgICAgICAgIyBTaW1wbGUgdGVzdCBjYXNlIHdp
dGggc29tZXRoaW5nIHRoYXQgaXMgbm90IGEgZnVuY3Rpb24uCiAgICAgICAgIHNlbGYucGVyZm9y
bV9mdW5jdGlvbl9kZXRlY3Rpb24oWydjbGFzcyBTdHVmZjsnXSwgTm9uZSkKIAorICAgIGRlZiB0
ZXN0X3BhcmFtZXRlcl9saXN0KHNlbGYpOgorICAgICAgICAjIEEgZnVuY3Rpb24gd2l0aCBubyBh
cmd1bWVudHMuCisgICAgICAgIGZ1bmN0aW9uX3N0YXRlID0gc2VsZi5wZXJmb3JtX2Z1bmN0aW9u
X2RldGVjdGlvbigKKyAgICAgICAgICAgIFsndm9pZCBmdW5jdGlvbk5hbWUoKTsnXSwKKyAgICAg
ICAgICAgIHsnbmFtZSc6ICdmdW5jdGlvbk5hbWUnLAorICAgICAgICAgICAgICdib2R5X3N0YXJ0
X2xpbmVfbnVtYmVyJzogMCwKKyAgICAgICAgICAgICAnZW5kaW5nX2xpbmVfbnVtYmVyJzogMCwK
KyAgICAgICAgICAgICAnaXNfZGVjbGFyYXRpb24nOiBUcnVlLAorICAgICAgICAgICAgICdwYXJh
bWV0ZXJfbGlzdCc6ICgpfSkKKworICAgICAgICAjIEEgZnVuY3Rpb24gd2l0aCBvbmUgYXJndW1l
bnQuCisgICAgICAgIGZ1bmN0aW9uX3N0YXRlID0gc2VsZi5wZXJmb3JtX2Z1bmN0aW9uX2RldGVj
dGlvbigKKyAgICAgICAgICAgIFsndm9pZCBmdW5jdGlvbk5hbWUoaW50KTsnXSwKKyAgICAgICAg
ICAgIHsnbmFtZSc6ICdmdW5jdGlvbk5hbWUnLAorICAgICAgICAgICAgICdib2R5X3N0YXJ0X2xp
bmVfbnVtYmVyJzogMCwKKyAgICAgICAgICAgICAnZW5kaW5nX2xpbmVfbnVtYmVyJzogMCwKKyAg
ICAgICAgICAgICAnaXNfZGVjbGFyYXRpb24nOiBUcnVlLAorICAgICAgICAgICAgICdwYXJhbWV0
ZXJfbGlzdCc6CisgICAgICAgICAgICAgICAgICh7J3R5cGUnOiAnaW50JywgJ25hbWUnOiAnJywg
J2xpbmUnOiAwfSwpfSkKKworICAgICAgICAjIEEgZnVuY3Rpb24gd2l0aCB1bnNpZ25lZCBhbmQg
c2hvcnQgYXJndW1lbnRzCisgICAgICAgIGZ1bmN0aW9uX3N0YXRlID0gc2VsZi5wZXJmb3JtX2Z1
bmN0aW9uX2RldGVjdGlvbigKKyAgICAgICAgICAgIFsndm9pZCBmdW5jdGlvbk5hbWUodW5zaWdu
ZWQgYSwgc2hvcnQgYiwgbG9uZyBjLCBsb25nIGxvbmcgc2hvcnQgdW5zaWduZWQgaW50KTsnXSwK
KyAgICAgICAgICAgIHsnbmFtZSc6ICdmdW5jdGlvbk5hbWUnLAorICAgICAgICAgICAgICdib2R5
X3N0YXJ0X2xpbmVfbnVtYmVyJzogMCwKKyAgICAgICAgICAgICAnZW5kaW5nX2xpbmVfbnVtYmVy
JzogMCwKKyAgICAgICAgICAgICAnaXNfZGVjbGFyYXRpb24nOiBUcnVlLAorICAgICAgICAgICAg
ICdwYXJhbWV0ZXJfbGlzdCc6CisgICAgICAgICAgICAgICAgICh7J3R5cGUnOiAndW5zaWduZWQn
LCAnbmFtZSc6ICdhJywgJ2xpbmUnOiAwfSwKKyAgICAgICAgICAgICAgICAgIHsndHlwZSc6ICdz
aG9ydCcsICduYW1lJzogJ2InLCAnbGluZSc6IDB9LAorICAgICAgICAgICAgICAgICAgeyd0eXBl
JzogJ2xvbmcnLCAnbmFtZSc6ICdjJywgJ2xpbmUnOiAwfSwKKyAgICAgICAgICAgICAgICAgIHsn
dHlwZSc6ICdsb25nIGxvbmcgc2hvcnQgdW5zaWduZWQgaW50JywgJ25hbWUnOiAnJywgJ2xpbmUn
OiAwfSl9KQorCisgICAgICAgICMgU29tZSBwYXJhbWV0ZXIgdHlwZSB3aXRoIG1vZGlmaWVycyBh
bmQgbm8gcGFyYW1ldGVyIG5hbWVzLgorICAgICAgICBmdW5jdGlvbl9zdGF0ZSA9IHNlbGYucGVy
Zm9ybV9mdW5jdGlvbl9kZXRlY3Rpb24oCisgICAgICAgICAgICBbJ3ZpcnR1YWwgdm9pZCBkZXRl
cm1pbmVBUklBRHJvcEVmZmVjdHMoVmVjdG9yPFN0cmluZz4qJiwgY29uc3QgdW5zaWduZWQgbG9u
ZyBpbnQqJiwgY29uc3QgTWVkaWFQbGF5ZXI6OlByZWxvYWQsIE90aGVyPE90aGVyMiwgT3RoZXIz
PFAxLCBQMj4gPiwgaW50KTsnXSwKKyAgICAgICAgICAgIHsnbmFtZSc6ICdkZXRlcm1pbmVBUklB
RHJvcEVmZmVjdHMnLAorICAgICAgICAgICAgICdib2R5X3N0YXJ0X2xpbmVfbnVtYmVyJzogMCwK
KyAgICAgICAgICAgICAnZW5kaW5nX2xpbmVfbnVtYmVyJzogMCwKKyAgICAgICAgICAgICAnaXNf
ZGVjbGFyYXRpb24nOiBUcnVlLAorICAgICAgICAgICAgICdwYXJhbWV0ZXJfbGlzdCc6CisgICAg
ICAgICAgICAgICAgICh7J3R5cGUnOiAnVmVjdG9yPFN0cmluZz4qJicsICduYW1lJzogJycsICds
aW5lJzogMH0sCisgICAgICAgICAgICAgICAgICB7J3R5cGUnOiAnY29uc3QgdW5zaWduZWQgbG9u
ZyBpbnQqJicsICduYW1lJzogJycsICdsaW5lJzogMH0sCisgICAgICAgICAgICAgICAgICB7J3R5
cGUnOiAnY29uc3QgTWVkaWFQbGF5ZXI6OlByZWxvYWQnLCAnbmFtZSc6ICcnLCAnbGluZSc6IDB9
LAorICAgICAgICAgICAgICAgICAgeyd0eXBlJzogJ090aGVyPE90aGVyMiwgT3RoZXIzPFAxLCBQ
Mj4gPicsICduYW1lJzogJycsICdsaW5lJzogMH0sCisgICAgICAgICAgICAgICAgICB7J3R5cGUn
OiAnaW50JywgJ25hbWUnOiAnJywgJ2xpbmUnOiAwfSl9KQorCisgICAgICAgICMgVHJ5IHBhcnNp
bmcgYSBmdW5jdGlvbiB3aXRoIGEgdmVyeSBjb21wbGV4IGRlZmluaXRpb24uCisgICAgICAgIGZ1
bmN0aW9uX3N0YXRlID0gc2VsZi5wZXJmb3JtX2Z1bmN0aW9uX2RldGVjdGlvbigKKyAgICAgICAg
ICAgIFsnQW5vdGhlclRlbXBsYXRlPENsYXNzMSwgQ2xhc3MyPiBhRnVuY3Rpb25OYW1lKFBhc3NS
ZWZQdHI8TXlDbGFzcz4gcGFyYW1OYW1lLCcsCisgICAgICAgICAgICAgJ2NvbnN0IE90aGVyMUNs
YXNzJiBmb28sJywKKyAgICAgICAgICAgICAnY29uc3QgQ29tcGxleFRlbXBsYXRlPENsYXNzMSwg
TmVzdGVkVGVtcGxhdGU8UDEsIFAyPiA+KiBjb25zdCAqIHBhcmFtID0gbmV3IENvbXBsZXhUZW1w
bGF0ZTxDbGFzczEsIE5lc3RlZFRlbXBsYXRlPFAxLCBQMj4gPigzNCwgNDIpLCcsCisgICAgICAg
ICAgICAgJ2ludCogbXlDb3VudCA9IDApOyddLAorICAgICAgICAgICAgeyduYW1lJzogJ2FGdW5j
dGlvbk5hbWUnLAorICAgICAgICAgICAgICdib2R5X3N0YXJ0X2xpbmVfbnVtYmVyJzogMywKKyAg
ICAgICAgICAgICAnZW5kaW5nX2xpbmVfbnVtYmVyJzogMywKKyAgICAgICAgICAgICAnaXNfZGVj
bGFyYXRpb24nOiBUcnVlLAorICAgICAgICAgICAgICdwYXJhbWV0ZXJfbGlzdCc6CisgICAgICAg
ICAgICAgICAgICh7J3R5cGUnOiAnUGFzc1JlZlB0cjxNeUNsYXNzPicsICduYW1lJzogJ3BhcmFt
TmFtZScsICdsaW5lJzogMH0sCisgICAgICAgICAgICAgICAgICB7J3R5cGUnOiAnY29uc3QgT3Ro
ZXIxQ2xhc3MmJywgJ25hbWUnOiAnZm9vJywgJ2xpbmUnOiAxfSwKKyAgICAgICAgICAgICAgICAg
IHsndHlwZSc6ICdjb25zdCBDb21wbGV4VGVtcGxhdGU8Q2xhc3MxLCBOZXN0ZWRUZW1wbGF0ZTxQ
MSwgUDI+ID4qIGNvbnN0IConLCAnbmFtZSc6ICdwYXJhbScsICdsaW5lJzogMn0sCisgICAgICAg
ICAgICAgICAgICB7J3R5cGUnOiAnaW50KicsICduYW1lJzogJ215Q291bnQnLCAnbGluZSc6IDN9
KX0pCisKKwogY2xhc3MgQ3BwU3R5bGVUZXN0KENwcFN0eWxlVGVzdEJhc2UpOgogCiAgICAgIyBU
ZXN0IGdldCBsaW5lIHdpZHRoLgpAQCAtMjU0OSwxNCArMjY1NCwxMiBAQCBjbGFzcyBDaGVja0Zv
ckZ1bmN0aW9uTGVuZ3Roc1Rlc3QoQ3BwU3R5bGVUZXN0QmFzZSk6CiAgICAgICAgIGVycm9yX2xl
dmVsID0gMQogICAgICAgICBlcnJvcl9saW5lcyA9IHNlbGYudHJpZ2dlcl90ZXN0X2xpbmVzKGVy
cm9yX2xldmVsKSArIDEKICAgICAgICAgdHJpZ2dlcl9sZXZlbCA9IHNlbGYudHJpZ2dlcl90ZXN0
X2xpbmVzKHNlbGYubWluX2NvbmZpZGVuY2UpCisgICAgICAgICMgU2luY2UgdGhlIGZ1bmN0aW9u
IG5hbWUgaXNuJ3QgdmFsaWQsIHRoZSBmdW5jdGlvbiBkZXRlY3Rpb24gYWxnb3JpdGhtCisgICAg
ICAgICMgd2lsbCBza2lwIGl0LCBzbyBubyBlcnJvciBpcyBwcm9kdWNlZC4KICAgICAgICAgc2Vs
Zi5hc3NlcnRfZnVuY3Rpb25fbGVuZ3Roc19jaGVjaygKICAgICAgICAgICAgICgnVEVTVF9GKCcK
ICAgICAgICAgICAgICArIHNlbGYuZnVuY3Rpb25fYm9keShlcnJvcl9saW5lcykpLAotICAgICAg
ICAgICAgKCdTbWFsbCBhbmQgZm9jdXNlZCBmdW5jdGlvbnMgYXJlIHByZWZlcnJlZDogJwotICAg
ICAgICAgICAgICdURVNUX0YgaGFzICVkIG5vbi1jb21tZW50IGxpbmVzICcKLSAgICAgICAgICAg
ICAnKGVycm9yIHRyaWdnZXJlZCBieSBleGNlZWRpbmcgJWQgbGluZXMpLicKLSAgICAgICAgICAg
ICAnICBbcmVhZGFiaWxpdHkvZm5fc2l6ZV0gWyVkXScpCi0gICAgICAgICAgICAlIChlcnJvcl9s
aW5lcywgdHJpZ2dlcl9sZXZlbCwgZXJyb3JfbGV2ZWwpKQorICAgICAgICAgICAgJycpCiAKICAg
ICBkZWYgdGVzdF9mdW5jdGlvbl9sZW5ndGhfY2hlY2tfZGVmaW5pdGlvbl9zZXZlcml0eTFfd2l0
aF9lbWJlZGRlZF9ub19saW50cyhzZWxmKToKICAgICAgICAgZXJyb3JfbGV2ZWwgPSAxCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77451</attachid>
            <date>2010-12-26 00:42:17 -0800</date>
            <delta_ts>2010-12-26 09:26:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51451-20101226004215.patch</filename>
            <type>text/plain</type>
            <size>24871</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBjZjMw
NDUxYmFhZDNiMzM4NzcwZWFjOGU2ODg1ODAzZDY4MWExZTdjLi45YTdmYjY5NzNlN2Y0N2RiNzRi
OGJkYWNmYjM5Zjc5YzFjZGFlZDZiIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzggQEAKKzIwMTAtMTItMjEgIERhdmlkIExldmlu
ICA8bGV2aW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIGNoZWNrLXdlYmtpdC1zdHlsZSBzaG91bGQgYmUgYWJsZSB0byBwYXJz
ZSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBwYXJhbWV0ZXJzLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE0NTEKKworICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwLnB5OgorICAgICAgICAoUG9zaXRpb24uX19pbml0X18p
OiBIb2xkcyBzaW1wbGUgcG9zaXRpb24gaW5mb3JtYXRpb24gKHJvdywgY29sdW1uKS4KKyAgICAg
ICAgKFBhcmFtZXRlci5fX2luaXRfXyk6IEhvbGRzIGluZm9ybWF0aW9uIGFib3V0IGEgcGFyYW1l
dGVyLgorICAgICAgICAoU2luZ2xlTGluZVZpZXcuX19pbml0KTogQ29udmVydHMgbXVsdGlwbGUg
bGluZXMgaW50byBhIHNpbmdsZSBsaW5lIGZvciBzaW1wbGVyIHNlYXJjaGVzLgorICAgICAgICAo
U2luZ2xlTGluZVZpZXcuY29udmVydF9jb2x1bW5fdG9fcm93KTogUmV0dXJucyB0aGUgb3JpZ2lu
YWwgcm93IGdpdmVuIGEgY29sdW1uLgorICAgICAgICAocGFyYW1ldGVyX2xpc3QpOiBHZW5lcmF0
ZXMgdGhlIGxpc3Qgb2YgcGFyYW1ldGVycyBmb3IgYSBmdW5jdGlvbi4KKyAgICAgICAgKHBhcmFt
ZXRlcl9saXN0LmNyZWF0ZV9za2VsZXRvbl9wYXJhbWV0ZXJzKTogU2ltcGxpZmllcyBhIHBhcmFt
ZXRlciBsaXN0IGZvciBlYXNpZXIgc2VhcmNoaW5nLgorICAgICAgICAocGFyYW1ldGVyX2xpc3Qu
ZmluZF9wYXJhbWV0ZXJfbmFtZV9pbmRleCk6IEZpbmRzIHdoZXJlIHRoZSBwYXJhbWV0ZXIgbmFt
ZSBpcy4KKyAgICAgICAgKF9GdW5jdGlvblN0YXRlLmJlZ2luKTogQWRkZWQgaW5mb3JtYXRpb24g
dG8gYWxsb3cgZGV0ZXJtaW5pbmcgdGhlIHBhcmFtZXRlcnMKKyAgICAgICAgb24gZGVtYW5kLgor
ICAgICAgICAoX0Z1bmN0aW9uU3RhdGUuZ2V0X3BhcmFtZXRlcl9saXN0KTogUmV0dXJucyBhIHR1
cGxlIG9mIGZ1bmN0aW9uIHBhcmFtZXRlcnMuCisgICAgICAgIChkZXRlY3RfZnVuY3Rpb25zKTog
SW1wcm92ZSBmdW5jdGlvbiBkZXRlY3Rpb24gZm9yIG9wZXJhdG9yIGZ1bmN0aW9ucyBhbmQKKyAg
ICAgICAgZGV0ZXJtaW5lIHdoZXJlIHRoZSBwYXJhbWV0ZXJzIGVuZCBhbmQgcGFzcyB0aGF0IHRv
IF9GdW5jdGlvblN0YXRlLmJlZ2luLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUv
Y2hlY2tlcnMvY3BwX3VuaXR0ZXN0LnB5OgorICAgICAgICAoQ3BwRnVuY3Rpb25zVGVzdC50ZXN0
X3BhcmFtZXRlcik6IFZlcmlmaWVzIFBhcmFtZXRlciBmdW5jdGlvbmFsaXR5LgorICAgICAgICAo
Q3BwRnVuY3Rpb25zVGVzdC50ZXN0X3NpbmdsZV9saW5lX3ZpZXcpOiBWZXJpZmllcyBTaW5nbGVM
aW5lVmlldyBmdW5jdGlvbmFsaXR5LgorICAgICAgICAoQ3BwRnVuY3Rpb25zVGVzdC50ZXN0X3Bh
cmFtZXRlcl9saXN0KTogRG9lcyBzb21lIG1pbmltYWwgdmVyaWZpY2F0aW9uIGZvciBwYXJhbWV0
ZXIgbGlzdC4KKyAgICAgICAgTXVjaCBtb3JlIHRob3JvdWdoIHZlcmlmaWNhdGlvbiBpcyBkb25l
IGFzIHBhcnQgb2YgRnVuY3Rpb25EZXRlY3Rpb25UZXN0LnRlc3RfcGFyYW1ldGVyX2xpc3QuCisg
ICAgICAgIChGdW5jdGlvbkRldGVjdGlvblRlc3QucGVyZm9ybV9mdW5jdGlvbl9kZXRlY3Rpb24p
OiBBZGRlZCBzdXBwb3J0IGZvciB2ZXJpZnlpbmcKKyAgICAgICAgdGhlIHBhcmFtZXRlcnMgZm91
bmQuCisgICAgICAgIChGdW5jdGlvbkRldGVjdGlvblRlc3QudGVzdF9mdW5jdGlvbl9kZWNsYXJh
dGlvbl9kZXRlY3Rpb24pOiBBZGRlZCBtb3JlIGZ1bmN0aW9uCisgICAgICAgIGRldGVjdGlvbiB0
ZXN0IHRvIHZlcmlmeSB0aGF0IHdlIGNhdGNoIHRoZSBvcGVyYXRvciBmdW5jdGlvbnMuCisgICAg
ICAgIChGdW5jdGlvbkRldGVjdGlvblRlc3QudGVzdF9pZ25vcmVfbWFjcm9zKTogVmVyaWZ5IHRo
YXQgZnVuY3Rpb24gZGV0ZWN0aW9uIGlnbm9yZXMgbWFjcm9zLgorICAgICAgICAoRnVuY3Rpb25E
ZXRlY3Rpb25UZXN0LnRlc3RfcGFyYW1ldGVyX2xpc3QpOiBBZGRlZCB0ZXN0cyB0byB2ZXJpZnkg
dGhlIHBhcmFtZXRlciBwYXJzaW5nLgorICAgICAgICAoQ2hlY2tGb3JGdW5jdGlvbkxlbmd0aHNU
ZXN0LnRlc3RfZnVuY3Rpb25fbGVuZ3RoX2NoZWNrX2RlZmluaXRpb25fc2V2ZXJpdHkxX2Zvcl9i
YWRfdGVzdF9kb2VzbnRfYnJlYWspOiBSZW1vdmVkCisgICAgICAgIGJlY2F1c2UgdGhlIGVycm9y
LiBUaGUgdGVzdCBpcyBhYm91dCB0aGUgYmFkIGZ1bmN0aW9uIG5hbWUuIEZpeGluZyB0aGUgbmFt
ZSBtYWtlcyB0aGUgdGVzdCBleGFjdGx5IGxpa2UKKyAgICAgICAgdGVzdF9mdW5jdGlvbl9sZW5n
dGhfY2hlY2tfZGVmaW5pdGlvbl9zZXZlcml0eTFfZm9yX3Rlc3QuCisKIDIwMTAtMTItMjIgIERh
dmlkIExldmluICA8bGV2aW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNo
aW5pY2hpcm8gSGFtYWppLgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHls
ZS9jaGVja2Vycy9jcHAucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJz
L2NwcC5weQppbmRleCA5NGU1YmRkYTQzOThlMWJjNTVlZTcwOTkxMGYyODVjYTNiNTJjNWViLi40
Y2JjZjZkZWM4ODliNjZlZTI2YTIwN2E3ODY0NmNiNzA5MGFiODAzIDEwMDY0NAotLS0gYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcC5weQorKysgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcC5weQpAQCAtMSw3ICsxLDcgQEAKICMhL3Vz
ci9iaW4vcHl0aG9uCiAjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQogIwotIyBDb3B5cmlnaHQgKEMp
IDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAy
MDA5LCAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjIENvcHlyaWdodCAo
QykgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLgogIyBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyBDb3B5cmlnaHQgKEMpIDIwMTAgQ2hyaXMgSmVyZG9u
ZWsgKGNqZXJkb25la0B3ZWJraXQub3JnKQpAQCAtMzA4LDYgKzMwOCwxMTcgQEAgY2xhc3MgX0lu
Y2x1ZGVTdGF0ZShkaWN0KToKICAgICAgICAgcmV0dXJuIGVycm9yX21lc3NhZ2UKIAogCitjbGFz
cyBQb3NpdGlvbihvYmplY3QpOgorICAgICIiIkhvbGRzIHRoZSBwb3NpdGlvbiBvZiBzb21ldGhp
bmcuIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJvdywgY29sdW1uKToKKyAgICAgICAgc2Vs
Zi5yb3cgPSByb3cKKyAgICAgICAgc2VsZi5jb2x1bW4gPSBjb2x1bW4KKworCitjbGFzcyBQYXJh
bWV0ZXIob2JqZWN0KToKKyAgICAiIiJJbmZvcm1hdGlvbiBhYm91dCBvbmUgZnVuY3Rpb24gcGFy
YW1ldGVyLiIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJhbWV0ZXIsIHBhcmFtZXRlcl9u
YW1lX2luZGV4LCByb3cpOgorICAgICAgICBzZWxmLnR5cGUgPSBwYXJhbWV0ZXJbOnBhcmFtZXRl
cl9uYW1lX2luZGV4XS5zdHJpcCgpCisgICAgICAgICMgUmVtb3ZlIGFueSBpbml0aWFsaXplcnMg
ZnJvbSB0aGUgcGFyYW1ldGVyIG5hbWUgKGUuZy4gaW50IGkgPSA1KS4KKyAgICAgICAgc2VsZi5u
YW1lID0gc3ViKHInPS4qJywgJycsIHBhcmFtZXRlcltwYXJhbWV0ZXJfbmFtZV9pbmRleDpdKS5z
dHJpcCgpCisgICAgICAgIHNlbGYucm93ID0gcm93CisKKworY2xhc3MgU2luZ2xlTGluZVZpZXco
b2JqZWN0KToKKyAgICAiIiJDb252ZXJ0cyBtdWx0aXBsZSBsaW5lcyBpbnRvIGEgc2luZ2xlIGxp
bmUgKHdpdGggbGluZSBicmVha3MgcmVwbGFjZWQgYnkgYQorICAgICAgIHNwYWNlKSB0byBhbGxv
dyBmb3IgZWFzaWVyIHNlYXJjaGluZy4iIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbGluZXMs
IHN0YXJ0X3Bvc2l0aW9uLCBlbmRfcG9zaXRpb24pOgorICAgICAgICB0cmltbWVkX2xpbmVzID0g
bGluZXNbc3RhcnRfcG9zaXRpb24ucm93OmVuZF9wb3NpdGlvbi5yb3cgKyAxXQorICAgICAgICB0
cmltbWVkX2xpbmVzWy0xXSA9IHRyaW1tZWRfbGluZXNbLTFdWzplbmRfcG9zaXRpb24uY29sdW1u
XQorICAgICAgICB0cmltbWVkX2xpbmVzWzBdID0gdHJpbW1lZF9saW5lc1swXVtzdGFydF9wb3Np
dGlvbi5jb2x1bW46XQorCisgICAgICAgICMgQ3JlYXRlIGEgc2luZ2xlIGxpbmUgd2l0aCBhbGwg
b2YgdGhlIHBhcmFtZXRlcnMuCisgICAgICAgIHNlbGYuc2luZ2xlX2xpbmUgPSAnICcuam9pbih0
cmltbWVkX2xpbmVzKQorCisgICAgICAgICMgS2VlcCB0aGUgcm93IGxlbmd0aHMsIHNvIHdlIGNh
biBjYWxjdWxhdGUgdGhlIG9yaWdpbmFsIHJvdyBudW1iZXIKKyAgICAgICAgIyBnaXZlbiBhIGNv
bHVtbiBpbiB0aGUgc2luZ2xlIGxpbmUgKGFkZGluZyAxIGR1ZSB0byB0aGUgc3BhY2UgYWRkZWQK
KyAgICAgICAgIyBkdXJpbmcgdGhlIGpvaW4pLgorICAgICAgICBzZWxmLl9yb3dfbGVuZ3RocyA9
IFtsZW4obGluZSkgKyAxIGZvciBsaW5lIGluIHRyaW1tZWRfbGluZXNdCisgICAgICAgIHNlbGYu
X3N0YXJ0aW5nX3JvdyA9IHN0YXJ0X3Bvc2l0aW9uLnJvdworCisgICAgZGVmIGNvbnZlcnRfY29s
dW1uX3RvX3JvdyhzZWxmLCBzaW5nbGVfbGluZV9jb2x1bW5fbnVtYmVyKToKKyAgICAgICAgIiIi
Q29udmVydCB0aGUgY29sdW1uIG51bWJlciBmcm9tIHRoZSBzaW5nbGUgbGluZSBpbnRvIHRoZSBv
cmlnaW5hbAorICAgICAgICBsaW5lIG51bWJlci4KKworICAgICAgICBTcGVjaWFsIGNhc2VzOgor
ICAgICAgICAqIENvbHVtbnMgaW4gdGhlIGFkZGVkIHNwYWNlcyBhcmUgY29uc2lkZXJlZCBwYXJ0
IG9mIHRoZSBwcmV2aW91cyBsaW5lLgorICAgICAgICAqIENvbHVtbnMgYmV5b25kIHRoZSBlbmQg
b2YgdGhlIGxpbmUgYXJlIGNvbnNpZGVyIHBhcnQgdGhlIGxhc3QgbGluZQorICAgICAgICBpbiB0
aGUgdmlldy4iIiIKKyAgICAgICAgdG90YWxfY29sdW1ucyA9IDAKKyAgICAgICAgcm93X29mZnNl
dCA9IDAKKyAgICAgICAgd2hpbGUgcm93X29mZnNldCA8IGxlbihzZWxmLl9yb3dfbGVuZ3Rocykg
LSAxIGFuZCBzaW5nbGVfbGluZV9jb2x1bW5fbnVtYmVyID49IHRvdGFsX2NvbHVtbnMgKyBzZWxm
Ll9yb3dfbGVuZ3Roc1tyb3dfb2Zmc2V0XToKKyAgICAgICAgICAgIHRvdGFsX2NvbHVtbnMgKz0g
c2VsZi5fcm93X2xlbmd0aHNbcm93X29mZnNldF0KKyAgICAgICAgICAgIHJvd19vZmZzZXQgKz0g
MQorICAgICAgICByZXR1cm4gc2VsZi5fc3RhcnRpbmdfcm93ICsgcm93X29mZnNldAorCisKK2Rl
ZiBwYXJhbWV0ZXJfbGlzdChlbGlkZWRfbGluZXMsIHN0YXJ0X3Bvc2l0aW9uLCBlbmRfcG9zaXRp
b24pOgorICAgICIiIkdlbmVyYXRvciBmb3IgYSBmdW5jdGlvbidzIHBhcmFtZXRlcnMuIiIiCisg
ICAgZGVmIGNyZWF0ZV9za2VsZXRvbl9wYXJhbWV0ZXJzKGFsbF9wYXJhbWV0ZXJzKToKKyAgICAg
ICAgIiIiQ29udmVydHMgYSBwYXJhbWV0ZXIgbGlzdCB0byBhIHNrZWxldG9uIHZlcnNpb24uIFRo
ZSBza2VsZXRvbiBvbmx5IGhhcyBvbmUKKyAgICAgICAgd29yZCBmb3IgdGhlIHBhcmFtZXRlciBu
YW1lLCBvbmUgd29yZCBmb3IgdGhlIHR5cGUsIGFuZCBjb21tYXMgYWZ0ZXIgZWFjaAorICAgICAg
ICBwYXJhbWV0ZXIgYW5kIG9ubHkgdGhlcmUsIGFuZCBldmVyeXRoaW5nIGluIHRoZSBza2VsZXRv
biByZW1haW5zIGluIHRoZQorICAgICAgICBzYW1lIGNvbHVtbnMgYXMgdGhlIG9yaWdpbmFsLiIi
IgorICAgICAgICBhbGxfc2ltcGxpZmljYXRpb25zID0gKAorICAgICAgICAgICAgIyBSZW1vdmUg
dGVtcGxhdGUgcGFyYW1ldGVycywgZnVuY3Rpb24gZGVjbGFyYXRpb24gcGFyYW1ldGVycywgZXRj
LgorICAgICAgICAgICAgcicoPFtePD5dKj8+KXwoXChbXlwoXCldKj9cKSl8KFx7W15ce1x9XSo/
XH0pfChcIltcIl0qXCIpJywKKyAgICAgICAgICAgICMgUmVtb3ZlIGV2ZXJ5dGhpbmcgaW5pdGlh
bGl6ZXJzCisgICAgICAgICAgICByJz1bXixdKicsCisgICAgICAgICAgICAjIFJlbW92ZSA6OiBh
bmQgZXZlcnl0aGluZyBiZWZvcmUgaXQuCisgICAgICAgICAgICByJ1teLF0qOjonLAorICAgICAg
ICAgICAgIyBSZW1vdmUgbW9kaWZpZXJzIGxpa2UgJiwgKi4KKyAgICAgICAgICAgIHInWyYqXScs
CisgICAgICAgICAgICAjIFJlbW92ZSBjb25zdCBtb2RpZmllcnMuCisgICAgICAgICAgICByJ1xi
Y29uc3RccysoPz1bQS1aYS16XSknLAorICAgICAgICAgICAgIyBSZW1vdmUgbnVtZXJpY2FsIG1v
ZGlmaWVycyBsaWtlIGxvbmcuCisgICAgICAgICAgICByJ1xiKHVuc2lnbmVkfGxvbmd8c2hvcnQp
XHMrKD89dW5zaWduZWR8bG9uZ3xzaG9ydHxpbnR8Y2hhcnxkb3VibGV8ZmxvYXQpJykKKworICAg
ICAgICBza2VsZXRvbl9wYXJhbWV0ZXJzID0gYWxsX3BhcmFtZXRlcnMKKyAgICAgICAgZm9yIHNp
bXBsaWZpY2F0aW9uIGluIGFsbF9zaW1wbGlmaWNhdGlvbnM6CisgICAgICAgICAgICBza2VsZXRv
bl9wYXJhbWV0ZXJzID0gaXRlcmF0aXZlbHlfcmVwbGFjZV9tYXRjaGVzX3dpdGhfY2hhcihzaW1w
bGlmaWNhdGlvbiwgJyAnLCBza2VsZXRvbl9wYXJhbWV0ZXJzKQorICAgICAgICAjIElmIHRoZXJl
IGFyZSBhbnkgcGFyYW1ldGVycywgdGhlbiBhZGQgYSAsIGFmdGVyIHRoZSBsYXN0IG9uZSB0bwor
ICAgICAgICAjIG1ha2UgYSByZWd1bGFyIHBhdHRlcm4gb2YgYSAsIGZvbGxvd2luZyBldmVyeSBw
YXJhbWV0ZXIuCisgICAgICAgIGlmIHNrZWxldG9uX3BhcmFtZXRlcnMuc3RyaXAoKToKKyAgICAg
ICAgICAgIHNrZWxldG9uX3BhcmFtZXRlcnMgKz0gJywnCisgICAgICAgIHJldHVybiBza2VsZXRv
bl9wYXJhbWV0ZXJzCisKKyAgICBkZWYgZmluZF9wYXJhbWV0ZXJfbmFtZV9pbmRleChza2VsZXRv
bl9wYXJhbWV0ZXIpOgorICAgICAgICAjIFRoZSBmaXJzdCBzcGFjZSBmcm9tIHRoZSByaWdodCBp
biB0aGUgc2ltcGxpZmllZCBwYXJhbWV0ZXIgaXMgd2hlcmUgdGhlIHBhcmFtZXRlciBuYW1lIHN0
YXJ0CisgICAgICAgICMgdW5sZXNzIHRoZSBmaXJzdCBzcGFjZSBpcyBiZWZvcmUgYW55IGNvbnRl
bnQgaW4gdGhlIHNpbXBsaWZpZWQgcGFyYW1ldGVyLgorICAgICAgICBiZWZvcmVfbmFtZV9pbmRl
eCA9IHNrZWxldG9uX3BhcmFtZXRlci5yc3RyaXAoKS5yZmluZCgnICcpCisgICAgICAgIGlmIGJl
Zm9yZV9uYW1lX2luZGV4ICE9IC0xIGFuZCBza2VsZXRvbl9wYXJhbWV0ZXJbOmJlZm9yZV9uYW1l
X2luZGV4XS5zdHJpcCgpOgorICAgICAgICAgICAgcmV0dXJuIGJlZm9yZV9uYW1lX2luZGV4ICsg
MQorICAgICAgICByZXR1cm4gbGVuKHNrZWxldG9uX3BhcmFtZXRlcikKKworICAgICMgQ3JlYXRl
IG5ldyBwb3NpdGlvbnMgdGhhdCBvbWl0IHRoZSBvdXRlciBwYXJlbnRoZXNpcyBvZiB0aGUgcGFy
YW1ldGVycy4KKyAgICBzdGFydF9wb3NpdGlvbiA9IFBvc2l0aW9uKHJvdz1zdGFydF9wb3NpdGlv
bi5yb3csIGNvbHVtbj1zdGFydF9wb3NpdGlvbi5jb2x1bW4gKyAxKQorICAgIGVuZF9wb3NpdGlv
biA9IFBvc2l0aW9uKHJvdz1lbmRfcG9zaXRpb24ucm93LCBjb2x1bW49ZW5kX3Bvc2l0aW9uLmNv
bHVtbiAtIDEpCisgICAgc2luZ2xlX2xpbmVfdmlldyA9IFNpbmdsZUxpbmVWaWV3KGVsaWRlZF9s
aW5lcywgc3RhcnRfcG9zaXRpb24sIGVuZF9wb3NpdGlvbikKKyAgICBza2VsZXRvbl9wYXJhbWV0
ZXJzID0gY3JlYXRlX3NrZWxldG9uX3BhcmFtZXRlcnMoc2luZ2xlX2xpbmVfdmlldy5zaW5nbGVf
bGluZSkKKyAgICBlbmRfaW5kZXggPSAtMQorCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgIyBG
aW5kIHRoZSBlbmQgb2YgdGhlIG5leHQgcGFyYW1ldGVyLgorICAgICAgICBzdGFydF9pbmRleCA9
IGVuZF9pbmRleCArIDEKKyAgICAgICAgZW5kX2luZGV4ID0gc2tlbGV0b25fcGFyYW1ldGVycy5m
aW5kKCcsJywgc3RhcnRfaW5kZXgpCisKKyAgICAgICAgIyBObyBjb21tYSBtZWFucyB0aGF0IGFs
bCBwYXJhbWV0ZXJzIGhhdmUgYmVlbiBwYXJzZWQuCisgICAgICAgIGlmIGVuZF9pbmRleCA9PSAt
MToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICByb3cgPSBzaW5nbGVfbGluZV92aWV3LmNv
bnZlcnRfY29sdW1uX3RvX3JvdyhlbmRfaW5kZXgpCisKKyAgICAgICAgIyBQYXJzZSB0aGUgcGFy
YW1ldGVyIGludG8gYSB0eXBlIGFuZCBwYXJhbWV0ZXIgbmFtZS4KKyAgICAgICAgc2tlbGV0b25f
cGFyYW1ldGVyID0gc2tlbGV0b25fcGFyYW1ldGVyc1tzdGFydF9pbmRleDplbmRfaW5kZXhdCisg
ICAgICAgIG5hbWVfb2Zmc2V0ID0gZmluZF9wYXJhbWV0ZXJfbmFtZV9pbmRleChza2VsZXRvbl9w
YXJhbWV0ZXIpCisgICAgICAgIHBhcmFtZXRlciA9IHNpbmdsZV9saW5lX3ZpZXcuc2luZ2xlX2xp
bmVbc3RhcnRfaW5kZXg6ZW5kX2luZGV4XQorICAgICAgICB5aWVsZCBQYXJhbWV0ZXIocGFyYW1l
dGVyLCBuYW1lX29mZnNldCwgcm93KQorCisKIGNsYXNzIF9GdW5jdGlvblN0YXRlKG9iamVjdCk6
CiAgICAgIiIiVHJhY2tzIGN1cnJlbnQgZnVuY3Rpb24gbmFtZSBhbmQgdGhlIG51bWJlciBvZiBs
aW5lcyBpbiBpdHMgYm9keS4KIApAQCAtMzI5LDcgKzQ0MCw4IEBAIGNsYXNzIF9GdW5jdGlvblN0
YXRlKG9iamVjdCk6CiAgICAgICAgIHNlbGYuYm9keV9zdGFydF9saW5lX251bWJlciA9IC0xMDAw
CiAgICAgICAgIHNlbGYuZW5kaW5nX2xpbmVfbnVtYmVyID0gLTEwMDAKIAotICAgIGRlZiBiZWdp
bihzZWxmLCBmdW5jdGlvbl9uYW1lLCBib2R5X3N0YXJ0X2xpbmVfbnVtYmVyLCBlbmRpbmdfbGlu
ZV9udW1iZXIsIGlzX2RlY2xhcmF0aW9uKToKKyAgICBkZWYgYmVnaW4oc2VsZiwgZnVuY3Rpb25f
bmFtZSwgYm9keV9zdGFydF9saW5lX251bWJlciwgZW5kaW5nX2xpbmVfbnVtYmVyLCBpc19kZWNs
YXJhdGlvbiwKKyAgICAgICAgICAgICAgcGFyYW1ldGVyX3N0YXJ0X3Bvc2l0aW9uLCBwYXJhbWV0
ZXJfZW5kX3Bvc2l0aW9uLCBjbGVhbl9saW5lcyk6CiAgICAgICAgICIiIlN0YXJ0IGFuYWx5emlu
ZyBmdW5jdGlvbiBib2R5LgogCiAgICAgICAgIEFyZ3M6CkBAIC0zMzcsNiArNDQ5LDkgQEAgY2xh
c3MgX0Z1bmN0aW9uU3RhdGUob2JqZWN0KToKICAgICAgICAgICAgIGJvZHlfc3RhcnRfbGluZV9u
dW1iZXI6IFRoZSBsaW5lIG51bWJlciBvZiB0aGUgeyBvciB0aGUgOyBmb3IgYSBwcm90b3lwZS4K
ICAgICAgICAgICAgIGVuZGluZ19saW5lX251bWJlcjogVGhlIGxpbmUgbnVtYmVyIHdoZXJlIHRo
ZSBmdW5jdGlvbiBlbmRzLgogICAgICAgICAgICAgaXNfZGVjbGFyYXRpb246IFRydWUgaWYgdGhp
cyBpcyBhIHByb3RvdHlwZS4KKyAgICAgICAgICAgIHBhcmFtZXRlcl9zdGFydF9wb3NpdGlvbjog
cG9zaXRpb24gaW4gZWxpZGVkIG9mIHRoZSAnKCcgZm9yIHRoZSBwYXJhbWV0ZXJzLgorICAgICAg
ICAgICAgcGFyYW1ldGVyX2VuZF9wb3NpdGlvbjogcG9zaXRpb24gaW4gZWxpZGVkIG9mIHRoZSAn
KScgZm9yIHRoZSBwYXJhbWV0ZXJzLgorICAgICAgICAgICAgY2xlYW5fbGluZXM6IEEgQ2xlYW5z
ZWRMaW5lcyBpbnN0YW5jZSBjb250YWluaW5nIHRoZSBmaWxlLgogICAgICAgICAiIiIKICAgICAg
ICAgc2VsZi5pbl9hX2Z1bmN0aW9uID0gVHJ1ZQogICAgICAgICBzZWxmLmxpbmVzX2luX2Z1bmN0
aW9uID0gLTEgICMgRG9uJ3QgY291bnQgdGhlIG9wZW4gYnJhY2UgbGluZS4KQEAgLTM0NCw2ICs0
NTksMTcgQEAgY2xhc3MgX0Z1bmN0aW9uU3RhdGUob2JqZWN0KToKICAgICAgICAgc2VsZi5ib2R5
X3N0YXJ0X2xpbmVfbnVtYmVyID0gYm9keV9zdGFydF9saW5lX251bWJlcgogICAgICAgICBzZWxm
LmVuZGluZ19saW5lX251bWJlciA9IGVuZGluZ19saW5lX251bWJlcgogICAgICAgICBzZWxmLmlz
X2RlY2xhcmF0aW9uID0gaXNfZGVjbGFyYXRpb24KKyAgICAgICAgc2VsZi5wYXJhbWV0ZXJfc3Rh
cnRfcG9zaXRpb24gPSBwYXJhbWV0ZXJfc3RhcnRfcG9zaXRpb24KKyAgICAgICAgc2VsZi5wYXJh
bWV0ZXJfZW5kX3Bvc2l0aW9uID0gcGFyYW1ldGVyX2VuZF9wb3NpdGlvbgorICAgICAgICBzZWxm
Ll9jbGVhbl9saW5lcyA9IGNsZWFuX2xpbmVzCisgICAgICAgIHNlbGYuX3BhcmFtZXRlcl9saXN0
ID0gTm9uZQorCisgICAgZGVmIHBhcmFtZXRlcl9saXN0KHNlbGYpOgorICAgICAgICBpZiBub3Qg
c2VsZi5fcGFyYW1ldGVyX2xpc3Q6CisgICAgICAgICAgICAjIFN0b3JlIHRoZSBmaW5hbCByZXN1
bHQgYXMgYSB0dXBsZSBzaW5jZSB0aGF0IGlzIGltbXV0YWJsZS4KKyAgICAgICAgICAgIHNlbGYu
X3BhcmFtZXRlcl9saXN0ID0gdHVwbGUocGFyYW1ldGVyX2xpc3Qoc2VsZi5fY2xlYW5fbGluZXMu
ZWxpZGVkLCBzZWxmLnBhcmFtZXRlcl9zdGFydF9wb3NpdGlvbiwgc2VsZi5wYXJhbWV0ZXJfZW5k
X3Bvc2l0aW9uKSkKKworICAgICAgICByZXR1cm4gc2VsZi5fcGFyYW1ldGVyX2xpc3QKIAogICAg
IGRlZiBjb3VudChzZWxmLCBsaW5lX251bWJlcik6CiAgICAgICAgICIiIkNvdW50IGxpbmUgaW4g
Y3VycmVudCBmdW5jdGlvbiBib2R5LiIiIgpAQCAtMTIxMyw3ICsxMzM5LDExIEBAIGRlZiBkZXRl
Y3RfZnVuY3Rpb25zKGNsZWFuX2xpbmVzLCBsaW5lX251bWJlciwgZnVuY3Rpb25fc3RhdGUsIGVy
cm9yKToKICAgICByYXcgPSBjbGVhbl9saW5lcy5yYXdfbGluZXMKICAgICByYXdfbGluZSA9IHJh
d1tsaW5lX251bWJlcl0KIAotICAgIHJlZ2V4cCA9IHInXHMqKFx3KFx3fDo6fFwqfFwmfFxzfDx8
PnwsfH4pKilcKCcgICMgZGVjbHMgKiAmIHNwYWNlOjpuYW1lKCAuLi4KKyAgICAjIExpbmVzIGVu
ZGluZyB3aXRoIGEgXCBpbmRpY2F0ZSBhIG1hY3JvLiBEb24ndCB0cnkgdG8gY2hlY2sgdGhlbS4K
KyAgICBpZiByYXdfbGluZS5lbmRzd2l0aCgnXFwnKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBy
ZWdleHAgPSByJ1xzKihcdyhcd3w6OnxcKnxcJnxcc3w8fD58LHx+fChvcGVyYXRvclxzKigvfC18
PXwhfFwrKSspKSopXCgnICAjIGRlY2xzICogJiBzcGFjZTo6bmFtZSggLi4uCiAgICAgbWF0Y2hf
cmVzdWx0ID0gbWF0Y2gocmVnZXhwLCBsaW5lKQogICAgIGlmIG5vdCBtYXRjaF9yZXN1bHQ6CiAg
ICAgICAgIHJldHVybgpAQCAtMTIzMiw3ICsxMzYyLDcgQEAgZGVmIGRldGVjdF9mdW5jdGlvbnMo
Y2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBmdW5jdGlvbl9zdGF0ZSwgZXJyb3IpOgogICAgICAg
ICAgICAgIyBSZXBsYWNlIHRlbXBsYXRlIGNvbnN0cnVjdHMgd2l0aCBfIHNvIHRoYXQgbm8gc3Bh
Y2VzIHJlbWFpbiBpbiB0aGUgZnVuY3Rpb24gbmFtZSwKICAgICAgICAgICAgICMgd2hpbGUga2Vl
cGluZyB0aGUgY29sdW1uIG51bWJlcnMgb2Ygb3RoZXIgY2hhcmFjdGVycyB0aGUgc2FtZSBhcyAi
bGluZSIuCiAgICAgICAgICAgICBsaW5lX3dpdGhfbm9fdGVtcGxhdGVzID0gaXRlcmF0aXZlbHlf
cmVwbGFjZV9tYXRjaGVzX3dpdGhfY2hhcihyJzxbXjw+XSo+JywgJ18nLCBsaW5lKQotICAgICAg
ICAgICAgbWF0Y2hfZnVuY3Rpb24gPSBzZWFyY2gocicoKFx3fDp8PHw+fCx8fikqKVwoJywgbGlu
ZV93aXRoX25vX3RlbXBsYXRlcykKKyAgICAgICAgICAgIG1hdGNoX2Z1bmN0aW9uID0gc2VhcmNo
KHInKChcd3w6fDx8PnwsfH58KG9wZXJhdG9yXHMqKC98LXw9fCF8XCspKykpKilcKCcsIGxpbmVf
d2l0aF9ub190ZW1wbGF0ZXMpCiAgICAgICAgICAgICBpZiBub3QgbWF0Y2hfZnVuY3Rpb246CiAg
ICAgICAgICAgICAgICAgcmV0dXJuICAjIFRoZSAnKCcgbXVzdCBoYXZlIGJlZW4gaW5zaWRlIG9m
IGEgdGVtcGxhdGUuCiAKQEAgLTEyNDYsMTMgKzEzNzYsMjIgQEAgZGVmIGRldGVjdF9mdW5jdGlv
bnMoY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBmdW5jdGlvbl9zdGF0ZSwgZXJyb3IpOgogICAg
ICAgICAgICAgICAgICAgICBmdW5jdGlvbiArPSBwYXJhbWV0ZXJfcmVnZXhwLmdyb3VwKDEpCiAg
ICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGZ1bmN0aW9uICs9ICcoKScKKworICAg
ICAgICAgICAgcGFyYW1ldGVyX3N0YXJ0X3Bvc2l0aW9uID0gUG9zaXRpb24obGluZV9udW1iZXIs
IG1hdGNoX2Z1bmN0aW9uLmVuZCgxKSkKKyAgICAgICAgICAgIGNsb3NlX3Jlc3VsdCA9IGNsb3Nl
X2V4cHJlc3Npb24oY2xlYW5fbGluZXMsIGxpbmVfbnVtYmVyLCBwYXJhbWV0ZXJfc3RhcnRfcG9z
aXRpb24uY29sdW1uKQorICAgICAgICAgICAgaWYgY2xvc2VfcmVzdWx0WzFdID09IGxlbihjbGVh
bl9saW5lcy5lbGlkZWQpOgorICAgICAgICAgICAgICAgICMgTm8gZW5kIHdhcyBmb3VuZC4KKyAg
ICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHBhcmFtZXRlcl9lbmRfcG9zaXRpb24g
PSBQb3NpdGlvbihjbG9zZV9yZXN1bHRbMV0sIGNsb3NlX3Jlc3VsdFsyXSkKKwogICAgICAgICAg
ICAgaXNfZGVjbGFyYXRpb24gPSBib29sKHNlYXJjaChyJ15bXntdKjsnLCBzdGFydF9saW5lKSkK
ICAgICAgICAgICAgIGlmIGlzX2RlY2xhcmF0aW9uOgogICAgICAgICAgICAgICAgIGVuZGluZ19s
aW5lX251bWJlciA9IHN0YXJ0X2xpbmVfbnVtYmVyCiAgICAgICAgICAgICBlbHNlOgogICAgICAg
ICAgICAgICAgIG9wZW5fYnJhY2VfaW5kZXggPSBzdGFydF9saW5lLmZpbmQoJ3snKQogICAgICAg
ICAgICAgICAgIGVuZGluZ19saW5lX251bWJlciA9IGNsb3NlX2V4cHJlc3Npb24oY2xlYW5fbGlu
ZXMsIHN0YXJ0X2xpbmVfbnVtYmVyLCBvcGVuX2JyYWNlX2luZGV4KVsxXQotICAgICAgICAgICAg
ZnVuY3Rpb25fc3RhdGUuYmVnaW4oZnVuY3Rpb24sIHN0YXJ0X2xpbmVfbnVtYmVyLCBlbmRpbmdf
bGluZV9udW1iZXIsIGlzX2RlY2xhcmF0aW9uKQorICAgICAgICAgICAgZnVuY3Rpb25fc3RhdGUu
YmVnaW4oZnVuY3Rpb24sIHN0YXJ0X2xpbmVfbnVtYmVyLCBlbmRpbmdfbGluZV9udW1iZXIsIGlz
X2RlY2xhcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVy
X3N0YXJ0X3Bvc2l0aW9uLCBwYXJhbWV0ZXJfZW5kX3Bvc2l0aW9uLCBjbGVhbl9saW5lcykKICAg
ICAgICAgICAgIHJldHVybgogCiAgICAgIyBObyBib2R5IGZvciB0aGUgZnVuY3Rpb24gKG9yIGV2
aWRlbmNlIG9mIGEgbm9uLWZ1bmN0aW9uKSB3YXMgZm91bmQuCmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcF91bml0dGVzdC5weSBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwX3VuaXR0ZXN0LnB5CmluZGV4IDcwZGYx
ZWE1ZWNjZTE4Mjc4OWJkMGQ2MGM5NDQ5Zjk5ZmYwOTFhNDYuLjU0MzE1NGI4MDVkNDVhYTkwYjM1
ZjJiMTkyYTExZDNiNmNjNzg5NjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
c3R5bGUvY2hlY2tlcnMvY3BwX3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvc3R5bGUvY2hlY2tlcnMvY3BwX3VuaXR0ZXN0LnB5CkBAIC0xLDcgKzEsNyBAQAogIyEvdXNy
L2Jpbi9weXRob24KICMgLSotIGNvZGluZzogdXRmLTg7IC0qLQogIwotIyBDb3B5cmlnaHQgKEMp
IDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAy
MDA5LCAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjIENvcHlyaWdodCAo
QykgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLgogIyBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyBDb3B5cmlnaHQgKEMpIDIwMTAgQ2hyaXMgSmVyZG9u
ZWsgKGNqZXJkb25la0B3ZWJraXQub3JnKQpAQCAtMTE5LDYgKzExOSw2MyBAQCBjbGFzcyBDcHBG
dW5jdGlvbnNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgc2VsZi5hc3NlcnRGYWxz
ZShjcHBfc3R5bGUuX0ZpbGVTdGF0ZShjbGVhbl9saW5lcywgJ2gnKS5pc19jX29yX29iamVjdGl2
ZV9jKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjcHBfc3R5bGUuX0ZpbGVTdGF0ZShjbGVh
bl9vYmpjX2xpbmVzLCAnaCcpLmlzX2Nfb3Jfb2JqZWN0aXZlX2MoKSkKIAorICAgIGRlZiB0ZXN0
X3BhcmFtZXRlcihzZWxmKToKKyAgICAgICAgIyBUZXN0IHR5cGUuCisgICAgICAgIHBhcmFtZXRl
ciA9IGNwcF9zdHlsZS5QYXJhbWV0ZXIoJ0V4Y2VwdGlvbkNvZGUnLCAxMywgMSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbHMocGFyYW1ldGVyLnR5cGUsICdFeGNlcHRpb25Db2RlJykKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbHMocGFyYW1ldGVyLm5hbWUsICcnKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFscyhwYXJhbWV0ZXIucm93LCAxKQorCisgICAgICAgICMgVGVzdCB0eXBlIGFuZCBu
YW1lLgorICAgICAgICBwYXJhbWV0ZXIgPSBjcHBfc3R5bGUuUGFyYW1ldGVyKCdQYXNzUmVmUHRy
PE15Q2xhc3M+IHBhcmVudCcsIDE5LCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwYXJh
bWV0ZXIudHlwZSwgJ1Bhc3NSZWZQdHI8TXlDbGFzcz4nKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFscyhwYXJhbWV0ZXIubmFtZSwgJ3BhcmVudCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxz
KHBhcmFtZXRlci5yb3csIDEpCisKKyAgICAgICAgIyBUZXN0IHR5cGUsIG5vIG5hbWUsIHdpdGgg
ZGVmYXVsdCB2YWx1ZS4KKyAgICAgICAgcGFyYW1ldGVyID0gY3BwX3N0eWxlLlBhcmFtZXRlcign
TXlDbGFzcyA9IDAnLCA3LCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwYXJhbWV0ZXIu
dHlwZSwgJ015Q2xhc3MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwYXJhbWV0ZXIubmFt
ZSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBhcmFtZXRlci5yb3csIDApCisKKyAg
ICAgICAgIyBUZXN0IHR5cGUsIG5hbWUsIGFuZCBkZWZhdWx0IHZhbHVlLgorICAgICAgICBwYXJh
bWV0ZXIgPSBjcHBfc3R5bGUuUGFyYW1ldGVyKCdNeUNsYXNzIGEgPSAwJywgNywgMCkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbHMocGFyYW1ldGVyLnR5cGUsICdNeUNsYXNzJykKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbHMocGFyYW1ldGVyLm5hbWUsICdhJykKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbHMocGFyYW1ldGVyLnJvdywgMCkKKworICAgIGRlZiB0ZXN0X3NpbmdsZV9saW5lX3Zp
ZXcoc2VsZik6CisgICAgICAgIHN0YXJ0X3Bvc2l0aW9uID0gY3BwX3N0eWxlLlBvc2l0aW9uKHJv
dz0xLCBjb2x1bW49MSkKKyAgICAgICAgZW5kX3Bvc2l0aW9uID0gY3BwX3N0eWxlLlBvc2l0aW9u
KHJvdz0zLCBjb2x1bW49MSkKKyAgICAgICAgc2luZ2xlX2xpbmVfdmlldyA9IGNwcF9zdHlsZS5T
aW5nbGVMaW5lVmlldyhbJzAnLCAnYWInLCAnY2RlJywgJ2YnXSwgc3RhcnRfcG9zaXRpb24sIGVu
ZF9wb3NpdGlvbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2luZ2xlX2xpbmVfdmlldy5z
aW5nbGVfbGluZSwgJ2IgY2RlIGYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzaW5nbGVf
bGluZV92aWV3LmNvbnZlcnRfY29sdW1uX3RvX3JvdygwKSwgMSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbHMoc2luZ2xlX2xpbmVfdmlldy5jb252ZXJ0X2NvbHVtbl90b19yb3coMSksIDEpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNpbmdsZV9saW5lX3ZpZXcuY29udmVydF9jb2x1bW5f
dG9fcm93KDIpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzaW5nbGVfbGluZV92aWV3
LmNvbnZlcnRfY29sdW1uX3RvX3Jvdyg1KSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMo
c2luZ2xlX2xpbmVfdmlldy5jb252ZXJ0X2NvbHVtbl90b19yb3coNiksIDMpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWxzKHNpbmdsZV9saW5lX3ZpZXcuY29udmVydF9jb2x1bW5fdG9fcm93KDEw
MCksIDMpCisKKyAgICBkZWYgdGVzdF9wYXJhbWV0ZXJfbGlzdChzZWxmKToKKyAgICAgICAgZWxp
ZGVkX2xpbmVzID0gWydpbnQgYmxhaChQYXNzUmVmUHRyPE15Q2xhc3M+IHBhcmFtTmFtZSwnLAor
ICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbnN0IE90aGVyMUNsYXNzJiBmb28sJywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICdjb25zdCBDb21wbGV4VGVtcGxhdGU8Q2xhc3MxLCBOZXN0ZWRU
ZW1wbGF0ZTxQMSwgUDI+ID4qIGNvbnN0ICogcGFyYW0gPSBuZXcgQ29tcGxleFRlbXBsYXRlPENs
YXNzMSwgTmVzdGVkVGVtcGxhdGU8UDEsIFAyPiA+KDM0LCA0MiksJywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICdpbnQqIG15Q291bnQgPSAwKTsnXQorICAgICAgICBzdGFydF9wb3NpdGlvbiA9
IGNwcF9zdHlsZS5Qb3NpdGlvbihyb3c9MCwgY29sdW1uPTgpCisgICAgICAgIGVuZF9wb3NpdGlv
biA9IGNwcF9zdHlsZS5Qb3NpdGlvbihyb3c9MywgY29sdW1uPTE2KQorCisgICAgICAgIGV4cGVj
dGVkX3BhcmFtZXRlcnMgPSAoeyd0eXBlJzogJ1Bhc3NSZWZQdHI8TXlDbGFzcz4nLCAnbmFtZSc6
ICdwYXJhbU5hbWUnLCAncm93JzogMH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
eyd0eXBlJzogJ2NvbnN0IE90aGVyMUNsYXNzJicsICduYW1lJzogJ2ZvbycsICdyb3cnOiAxfSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7J3R5cGUnOiAnY29uc3QgQ29tcGxleFRl
bXBsYXRlPENsYXNzMSwgTmVzdGVkVGVtcGxhdGU8UDEsIFAyPiA+KiBjb25zdCAqJywgJ25hbWUn
OiAncGFyYW0nLCAncm93JzogMn0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyd0
eXBlJzogJ2ludConLCAnbmFtZSc6ICdteUNvdW50JywgJ3Jvdyc6IDN9KQorICAgICAgICBpbmRl
eCA9IDAKKyAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjcHBfc3R5bGUucGFyYW1ldGVyX2xpc3Qo
ZWxpZGVkX2xpbmVzLCBzdGFydF9wb3NpdGlvbiwgZW5kX3Bvc2l0aW9uKToKKyAgICAgICAgICAg
IGV4cGVjdGVkX3BhcmFtZXRlciA9IGV4cGVjdGVkX3BhcmFtZXRlcnNbaW5kZXhdCisgICAgICAg
ICAgICBzZWxmLmFzc2VydEVxdWFscyhwYXJhbWV0ZXIudHlwZSwgZXhwZWN0ZWRfcGFyYW1ldGVy
Wyd0eXBlJ10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwYXJhbWV0ZXIubmFtZSwg
ZXhwZWN0ZWRfcGFyYW1ldGVyWyduYW1lJ10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFs
cyhwYXJhbWV0ZXIucm93LCBleHBlY3RlZF9wYXJhbWV0ZXJbJ3JvdyddKQorICAgICAgICAgICAg
aW5kZXggKz0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhpbmRleCwgbGVuKGV4cGVjdGVk
X3BhcmFtZXRlcnMpKQogCiBjbGFzcyBDcHBTdHlsZVRlc3RCYXNlKHVuaXR0ZXN0LlRlc3RDYXNl
KToKICAgICAiIiJQcm92aWRlcyBzb21lIHVzZWZ1bCBoZWxwZXIgZnVuY3Rpb25zIGZvciBjcHBf
c3R5bGUgdGVzdHMuCkBAIC0yNTAsNiArMzA3LDE2IEBAIGNsYXNzIEZ1bmN0aW9uRGV0ZWN0aW9u
VGVzdChDcHBTdHlsZVRlc3RCYXNlKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZnVuY3Rp
b25fc3RhdGUuYm9keV9zdGFydF9saW5lX251bWJlciwgZnVuY3Rpb25faW5mb3JtYXRpb25bJ2Jv
ZHlfc3RhcnRfbGluZV9udW1iZXInXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZnVuY3Rp
b25fc3RhdGUuZW5kaW5nX2xpbmVfbnVtYmVyLCBmdW5jdGlvbl9pbmZvcm1hdGlvblsnZW5kaW5n
X2xpbmVfbnVtYmVyJ10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGZ1bmN0aW9uX3N0YXRl
LmlzX2RlY2xhcmF0aW9uLCBmdW5jdGlvbl9pbmZvcm1hdGlvblsnaXNfZGVjbGFyYXRpb24nXSkK
KyAgICAgICAgZXhwZWN0ZWRfcGFyYW1ldGVycyA9IGZ1bmN0aW9uX2luZm9ybWF0aW9uLmdldCgn
cGFyYW1ldGVyX2xpc3QnKQorICAgICAgICBpZiBleHBlY3RlZF9wYXJhbWV0ZXJzOgorICAgICAg
ICAgICAgYWN0dWFsX3BhcmFtZXRlcnMgPSBmdW5jdGlvbl9zdGF0ZS5wYXJhbWV0ZXJfbGlzdCgp
CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4oYWN0dWFsX3BhcmFtZXRlcnMpLCBs
ZW4oZXhwZWN0ZWRfcGFyYW1ldGVycykpCisgICAgICAgICAgICBmb3IgaW5kZXggaW4gcmFuZ2Uo
bGVuKGV4cGVjdGVkX3BhcmFtZXRlcnMpKToKKyAgICAgICAgICAgICAgICBhY3R1YWxfcGFyYW1l
dGVyID0gYWN0dWFsX3BhcmFtZXRlcnNbaW5kZXhdCisgICAgICAgICAgICAgICAgZXhwZWN0ZWRf
cGFyYW1ldGVyID0gZXhwZWN0ZWRfcGFyYW1ldGVyc1tpbmRleF0KKyAgICAgICAgICAgICAgICBz
ZWxmLmFzc2VydEVxdWFscyhhY3R1YWxfcGFyYW1ldGVyLnR5cGUsIGV4cGVjdGVkX3BhcmFtZXRl
clsndHlwZSddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGFjdHVhbF9wYXJh
bWV0ZXIubmFtZSwgZXhwZWN0ZWRfcGFyYW1ldGVyWyduYW1lJ10pCisgICAgICAgICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbHMoYWN0dWFsX3BhcmFtZXRlci5yb3csIGV4cGVjdGVkX3BhcmFtZXRl
clsncm93J10pCiAKICAgICBkZWYgdGVzdF9iYXNpY19mdW5jdGlvbl9kZXRlY3Rpb24oc2VsZik6
CiAgICAgICAgIHNlbGYucGVyZm9ybV9mdW5jdGlvbl9kZXRlY3Rpb24oCkBAIC0yNjgsNiArMzM1
LDM3IEBAIGNsYXNzIEZ1bmN0aW9uRGV0ZWN0aW9uVGVzdChDcHBTdHlsZVRlc3RCYXNlKToKICAg
ICAgICAgICAgICAnZW5kaW5nX2xpbmVfbnVtYmVyJzogMCwKICAgICAgICAgICAgICAnaXNfZGVj
bGFyYXRpb24nOiBUcnVlfSkKIAorICAgICAgICBzZWxmLnBlcmZvcm1fZnVuY3Rpb25fZGV0ZWN0
aW9uKAorICAgICAgICAgICAgWydDaGVja2VkSW50PFQ+IG9wZXJhdG9yIC8oY29uc3QgQ2hlY2tl
ZEludDxUPiAmbGhzLCBjb25zdCBDaGVja2VkSW50PFQ+ICZyaHMpOyddLAorICAgICAgICAgICAg
eyduYW1lJzogJ29wZXJhdG9yIC8nLAorICAgICAgICAgICAgICdib2R5X3N0YXJ0X2xpbmVfbnVt
YmVyJzogMCwKKyAgICAgICAgICAgICAnZW5kaW5nX2xpbmVfbnVtYmVyJzogMCwKKyAgICAgICAg
ICAgICAnaXNfZGVjbGFyYXRpb24nOiBUcnVlfSkKKworICAgICAgICBzZWxmLnBlcmZvcm1fZnVu
Y3Rpb25fZGV0ZWN0aW9uKAorICAgICAgICAgICAgWydDaGVja2VkSW50PFQ+IG9wZXJhdG9yIC0o
Y29uc3QgQ2hlY2tlZEludDxUPiAmbGhzLCBjb25zdCBDaGVja2VkSW50PFQ+ICZyaHMpOyddLAor
ICAgICAgICAgICAgeyduYW1lJzogJ29wZXJhdG9yIC0nLAorICAgICAgICAgICAgICdib2R5X3N0
YXJ0X2xpbmVfbnVtYmVyJzogMCwKKyAgICAgICAgICAgICAnZW5kaW5nX2xpbmVfbnVtYmVyJzog
MCwKKyAgICAgICAgICAgICdpc19kZWNsYXJhdGlvbic6IFRydWV9KQorCisgICAgICAgIHNlbGYu
cGVyZm9ybV9mdW5jdGlvbl9kZXRlY3Rpb24oCisgICAgICAgICAgICBbJ0NoZWNrZWRJbnQ8VD4g
b3BlcmF0b3IgIT0oY29uc3QgQ2hlY2tlZEludDxUPiAmbGhzLCBjb25zdCBDaGVja2VkSW50PFQ+
ICZyaHMpOyddLAorICAgICAgICAgICAgeyduYW1lJzogJ29wZXJhdG9yICE9JywKKyAgICAgICAg
ICAgICAnYm9keV9zdGFydF9saW5lX251bWJlcic6IDAsCisgICAgICAgICAgICAgJ2VuZGluZ19s
aW5lX251bWJlcic6IDAsCisgICAgICAgICAgICAgJ2lzX2RlY2xhcmF0aW9uJzogVHJ1ZX0pCisK
KyAgICAgICAgc2VsZi5wZXJmb3JtX2Z1bmN0aW9uX2RldGVjdGlvbigKKyAgICAgICAgICAgIFsn
Q2hlY2tlZEludDxUPiBvcGVyYXRvciArKGNvbnN0IENoZWNrZWRJbnQ8VD4gJmxocywgY29uc3Qg
Q2hlY2tlZEludDxUPiAmcmhzKTsnXSwKKyAgICAgICAgICAgIHsnbmFtZSc6ICdvcGVyYXRvciAr
JywKKyAgICAgICAgICAgICAnYm9keV9zdGFydF9saW5lX251bWJlcic6IDAsCisgICAgICAgICAg
ICAgJ2VuZGluZ19saW5lX251bWJlcic6IDAsCisgICAgICAgICAgICAgJ2lzX2RlY2xhcmF0aW9u
JzogVHJ1ZX0pCisKKyAgICBkZWYgdGVzdF9pZ25vcmVfbWFjcm9zKHNlbGYpOgorICAgICAgICBz
ZWxmLnBlcmZvcm1fZnVuY3Rpb25fZGV0ZWN0aW9uKFsndm9pZCBhRnVuY3Rpb25OYW1lKGludCk7
IFxcJ10sIE5vbmUpCisKICAgICBkZWYgdGVzdF9ub25fZnVuY3Rpb25zKHNlbGYpOgogICAgICAg
ICAjIFRoaXMgY2FzZSBleHBvc2VkIGFuIGVycm9yIGJlY2F1c2UgdGhlIG9wZW4gYnJhY2Ugd2Fz
IGluIHF1b3Rlcy4KICAgICAgICAgc2VsZi5wZXJmb3JtX2Z1bmN0aW9uX2RldGVjdGlvbigKQEAg
LTI4NCw2ICszODIsNzAgQEAgY2xhc3MgRnVuY3Rpb25EZXRlY3Rpb25UZXN0KENwcFN0eWxlVGVz
dEJhc2UpOgogICAgICAgICAjIFNpbXBsZSB0ZXN0IGNhc2Ugd2l0aCBzb21ldGhpbmcgdGhhdCBp
cyBub3QgYSBmdW5jdGlvbi4KICAgICAgICAgc2VsZi5wZXJmb3JtX2Z1bmN0aW9uX2RldGVjdGlv
bihbJ2NsYXNzIFN0dWZmOyddLCBOb25lKQogCisgICAgZGVmIHRlc3RfcGFyYW1ldGVyX2xpc3Qo
c2VsZik6CisgICAgICAgICMgQSBmdW5jdGlvbiB3aXRoIG5vIGFyZ3VtZW50cy4KKyAgICAgICAg
ZnVuY3Rpb25fc3RhdGUgPSBzZWxmLnBlcmZvcm1fZnVuY3Rpb25fZGV0ZWN0aW9uKAorICAgICAg
ICAgICAgWyd2b2lkIGZ1bmN0aW9uTmFtZSgpOyddLAorICAgICAgICAgICAgeyduYW1lJzogJ2Z1
bmN0aW9uTmFtZScsCisgICAgICAgICAgICAgJ2JvZHlfc3RhcnRfbGluZV9udW1iZXInOiAwLAor
ICAgICAgICAgICAgICdlbmRpbmdfbGluZV9udW1iZXInOiAwLAorICAgICAgICAgICAgICdpc19k
ZWNsYXJhdGlvbic6IFRydWUsCisgICAgICAgICAgICAgJ3BhcmFtZXRlcl9saXN0JzogKCl9KQor
CisgICAgICAgICMgQSBmdW5jdGlvbiB3aXRoIG9uZSBhcmd1bWVudC4KKyAgICAgICAgZnVuY3Rp
b25fc3RhdGUgPSBzZWxmLnBlcmZvcm1fZnVuY3Rpb25fZGV0ZWN0aW9uKAorICAgICAgICAgICAg
Wyd2b2lkIGZ1bmN0aW9uTmFtZShpbnQpOyddLAorICAgICAgICAgICAgeyduYW1lJzogJ2Z1bmN0
aW9uTmFtZScsCisgICAgICAgICAgICAgJ2JvZHlfc3RhcnRfbGluZV9udW1iZXInOiAwLAorICAg
ICAgICAgICAgICdlbmRpbmdfbGluZV9udW1iZXInOiAwLAorICAgICAgICAgICAgICdpc19kZWNs
YXJhdGlvbic6IFRydWUsCisgICAgICAgICAgICAgJ3BhcmFtZXRlcl9saXN0JzoKKyAgICAgICAg
ICAgICAgICAgKHsndHlwZSc6ICdpbnQnLCAnbmFtZSc6ICcnLCAncm93JzogMH0sKX0pCisKKyAg
ICAgICAgIyBBIGZ1bmN0aW9uIHdpdGggdW5zaWduZWQgYW5kIHNob3J0IGFyZ3VtZW50cworICAg
ICAgICBmdW5jdGlvbl9zdGF0ZSA9IHNlbGYucGVyZm9ybV9mdW5jdGlvbl9kZXRlY3Rpb24oCisg
ICAgICAgICAgICBbJ3ZvaWQgZnVuY3Rpb25OYW1lKHVuc2lnbmVkIGEsIHNob3J0IGIsIGxvbmcg
YywgbG9uZyBsb25nIHNob3J0IHVuc2lnbmVkIGludCk7J10sCisgICAgICAgICAgICB7J25hbWUn
OiAnZnVuY3Rpb25OYW1lJywKKyAgICAgICAgICAgICAnYm9keV9zdGFydF9saW5lX251bWJlcic6
IDAsCisgICAgICAgICAgICAgJ2VuZGluZ19saW5lX251bWJlcic6IDAsCisgICAgICAgICAgICAg
J2lzX2RlY2xhcmF0aW9uJzogVHJ1ZSwKKyAgICAgICAgICAgICAncGFyYW1ldGVyX2xpc3QnOgor
ICAgICAgICAgICAgICAgICAoeyd0eXBlJzogJ3Vuc2lnbmVkJywgJ25hbWUnOiAnYScsICdyb3cn
OiAwfSwKKyAgICAgICAgICAgICAgICAgIHsndHlwZSc6ICdzaG9ydCcsICduYW1lJzogJ2InLCAn
cm93JzogMH0sCisgICAgICAgICAgICAgICAgICB7J3R5cGUnOiAnbG9uZycsICduYW1lJzogJ2Mn
LCAncm93JzogMH0sCisgICAgICAgICAgICAgICAgICB7J3R5cGUnOiAnbG9uZyBsb25nIHNob3J0
IHVuc2lnbmVkIGludCcsICduYW1lJzogJycsICdyb3cnOiAwfSl9KQorCisgICAgICAgICMgU29t
ZSBwYXJhbWV0ZXIgdHlwZSB3aXRoIG1vZGlmaWVycyBhbmQgbm8gcGFyYW1ldGVyIG5hbWVzLgor
ICAgICAgICBmdW5jdGlvbl9zdGF0ZSA9IHNlbGYucGVyZm9ybV9mdW5jdGlvbl9kZXRlY3Rpb24o
CisgICAgICAgICAgICBbJ3ZpcnR1YWwgdm9pZCBkZXRlcm1pbmVBUklBRHJvcEVmZmVjdHMoVmVj
dG9yPFN0cmluZz4qJiwgY29uc3QgdW5zaWduZWQgbG9uZyBpbnQqJiwgY29uc3QgTWVkaWFQbGF5
ZXI6OlByZWxvYWQsIE90aGVyPE90aGVyMiwgT3RoZXIzPFAxLCBQMj4gPiwgaW50KTsnXSwKKyAg
ICAgICAgICAgIHsnbmFtZSc6ICdkZXRlcm1pbmVBUklBRHJvcEVmZmVjdHMnLAorICAgICAgICAg
ICAgICdib2R5X3N0YXJ0X2xpbmVfbnVtYmVyJzogMCwKKyAgICAgICAgICAgICAnZW5kaW5nX2xp
bmVfbnVtYmVyJzogMCwKKyAgICAgICAgICAgICAnaXNfZGVjbGFyYXRpb24nOiBUcnVlLAorICAg
ICAgICAgICAgICdwYXJhbWV0ZXJfbGlzdCc6CisgICAgICAgICAgICAgICAgICh7J3R5cGUnOiAn
VmVjdG9yPFN0cmluZz4qJicsICduYW1lJzogJycsICdyb3cnOiAwfSwKKyAgICAgICAgICAgICAg
ICAgIHsndHlwZSc6ICdjb25zdCB1bnNpZ25lZCBsb25nIGludComJywgJ25hbWUnOiAnJywgJ3Jv
dyc6IDB9LAorICAgICAgICAgICAgICAgICAgeyd0eXBlJzogJ2NvbnN0IE1lZGlhUGxheWVyOjpQ
cmVsb2FkJywgJ25hbWUnOiAnJywgJ3Jvdyc6IDB9LAorICAgICAgICAgICAgICAgICAgeyd0eXBl
JzogJ090aGVyPE90aGVyMiwgT3RoZXIzPFAxLCBQMj4gPicsICduYW1lJzogJycsICdyb3cnOiAw
fSwKKyAgICAgICAgICAgICAgICAgIHsndHlwZSc6ICdpbnQnLCAnbmFtZSc6ICcnLCAncm93Jzog
MH0pfSkKKworICAgICAgICAjIFRyeSBwYXJzaW5nIGEgZnVuY3Rpb24gd2l0aCBhIHZlcnkgY29t
cGxleCBkZWZpbml0aW9uLgorICAgICAgICBmdW5jdGlvbl9zdGF0ZSA9IHNlbGYucGVyZm9ybV9m
dW5jdGlvbl9kZXRlY3Rpb24oCisgICAgICAgICAgICBbJ0Fub3RoZXJUZW1wbGF0ZTxDbGFzczEs
IENsYXNzMj4gYUZ1bmN0aW9uTmFtZShQYXNzUmVmUHRyPE15Q2xhc3M+IHBhcmFtTmFtZSwnLAor
ICAgICAgICAgICAgICdjb25zdCBPdGhlcjFDbGFzcyYgZm9vLCcsCisgICAgICAgICAgICAgJ2Nv
bnN0IENvbXBsZXhUZW1wbGF0ZTxDbGFzczEsIE5lc3RlZFRlbXBsYXRlPFAxLCBQMj4gPiogY29u
c3QgKiBwYXJhbSA9IG5ldyBDb21wbGV4VGVtcGxhdGU8Q2xhc3MxLCBOZXN0ZWRUZW1wbGF0ZTxQ
MSwgUDI+ID4oMzQsIDQyKSwnLAorICAgICAgICAgICAgICdpbnQqIG15Q291bnQgPSAwKTsnXSwK
KyAgICAgICAgICAgIHsnbmFtZSc6ICdhRnVuY3Rpb25OYW1lJywKKyAgICAgICAgICAgICAnYm9k
eV9zdGFydF9saW5lX251bWJlcic6IDMsCisgICAgICAgICAgICAgJ2VuZGluZ19saW5lX251bWJl
cic6IDMsCisgICAgICAgICAgICAgJ2lzX2RlY2xhcmF0aW9uJzogVHJ1ZSwKKyAgICAgICAgICAg
ICAncGFyYW1ldGVyX2xpc3QnOgorICAgICAgICAgICAgICAgICAoeyd0eXBlJzogJ1Bhc3NSZWZQ
dHI8TXlDbGFzcz4nLCAnbmFtZSc6ICdwYXJhbU5hbWUnLCAncm93JzogMH0sCisgICAgICAgICAg
ICAgICAgICB7J3R5cGUnOiAnY29uc3QgT3RoZXIxQ2xhc3MmJywgJ25hbWUnOiAnZm9vJywgJ3Jv
dyc6IDF9LAorICAgICAgICAgICAgICAgICAgeyd0eXBlJzogJ2NvbnN0IENvbXBsZXhUZW1wbGF0
ZTxDbGFzczEsIE5lc3RlZFRlbXBsYXRlPFAxLCBQMj4gPiogY29uc3QgKicsICduYW1lJzogJ3Bh
cmFtJywgJ3Jvdyc6IDJ9LAorICAgICAgICAgICAgICAgICAgeyd0eXBlJzogJ2ludConLCAnbmFt
ZSc6ICdteUNvdW50JywgJ3Jvdyc6IDN9KX0pCisKKwogY2xhc3MgQ3BwU3R5bGVUZXN0KENwcFN0
eWxlVGVzdEJhc2UpOgogCiAgICAgIyBUZXN0IGdldCBsaW5lIHdpZHRoLgpAQCAtMjU0OSwxNCAr
MjcxMSwxMiBAQCBjbGFzcyBDaGVja0ZvckZ1bmN0aW9uTGVuZ3Roc1Rlc3QoQ3BwU3R5bGVUZXN0
QmFzZSk6CiAgICAgICAgIGVycm9yX2xldmVsID0gMQogICAgICAgICBlcnJvcl9saW5lcyA9IHNl
bGYudHJpZ2dlcl90ZXN0X2xpbmVzKGVycm9yX2xldmVsKSArIDEKICAgICAgICAgdHJpZ2dlcl9s
ZXZlbCA9IHNlbGYudHJpZ2dlcl90ZXN0X2xpbmVzKHNlbGYubWluX2NvbmZpZGVuY2UpCisgICAg
ICAgICMgU2luY2UgdGhlIGZ1bmN0aW9uIG5hbWUgaXNuJ3QgdmFsaWQsIHRoZSBmdW5jdGlvbiBk
ZXRlY3Rpb24gYWxnb3JpdGhtCisgICAgICAgICMgd2lsbCBza2lwIGl0LCBzbyBubyBlcnJvciBp
cyBwcm9kdWNlZC4KICAgICAgICAgc2VsZi5hc3NlcnRfZnVuY3Rpb25fbGVuZ3Roc19jaGVjaygK
ICAgICAgICAgICAgICgnVEVTVF9GKCcKICAgICAgICAgICAgICArIHNlbGYuZnVuY3Rpb25fYm9k
eShlcnJvcl9saW5lcykpLAotICAgICAgICAgICAgKCdTbWFsbCBhbmQgZm9jdXNlZCBmdW5jdGlv
bnMgYXJlIHByZWZlcnJlZDogJwotICAgICAgICAgICAgICdURVNUX0YgaGFzICVkIG5vbi1jb21t
ZW50IGxpbmVzICcKLSAgICAgICAgICAgICAnKGVycm9yIHRyaWdnZXJlZCBieSBleGNlZWRpbmcg
JWQgbGluZXMpLicKLSAgICAgICAgICAgICAnICBbcmVhZGFiaWxpdHkvZm5fc2l6ZV0gWyVkXScp
Ci0gICAgICAgICAgICAlIChlcnJvcl9saW5lcywgdHJpZ2dlcl9sZXZlbCwgZXJyb3JfbGV2ZWwp
KQorICAgICAgICAgICAgJycpCiAKICAgICBkZWYgdGVzdF9mdW5jdGlvbl9sZW5ndGhfY2hlY2tf
ZGVmaW5pdGlvbl9zZXZlcml0eTFfd2l0aF9lbWJlZGRlZF9ub19saW50cyhzZWxmKToKICAgICAg
ICAgZXJyb3JfbGV2ZWwgPSAxCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77456</attachid>
            <date>2010-12-26 09:26:34 -0800</date>
            <delta_ts>2010-12-26 12:28:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51451-20101226092633.patch</filename>
            <type>text/plain</type>
            <size>27671</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBjZjMw
NDUxYmFhZDNiMzM4NzcwZWFjOGU2ODg1ODAzZDY4MWExZTdjLi5mNTJjODIwMzFmNDUyZTM2ZGE4
Y2MzZTY5NDNjN2Y2NzAzNDAzYzY5IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDAgQEAKKzIwMTAtMTItMjEgIERhdmlkIExldmlu
ICA8bGV2aW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIGNoZWNrLXdlYmtpdC1zdHlsZSBzaG91bGQgYmUgYWJsZSB0byBwYXJz
ZSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBwYXJhbWV0ZXJzLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE0NTEKKworICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwLnB5OgorICAgICAgICAoUG9zaXRpb24uX19pbml0X18p
OiBIb2xkcyBzaW1wbGUgcG9zaXRpb24gaW5mb3JtYXRpb24gKHJvdywgY29sdW1uKS4KKyAgICAg
ICAgKFBhcmFtZXRlci5fX2luaXRfXyk6IEhvbGRzIGluZm9ybWF0aW9uIGFib3V0IGEgcGFyYW1l
dGVyLgorICAgICAgICAoU2luZ2xlTGluZVZpZXcuX19pbml0KTogQ29udmVydHMgbXVsdGlwbGUg
bGluZXMgaW50byBhIHNpbmdsZSBsaW5lIGZvciBzaW1wbGVyIHNlYXJjaGVzLgorICAgICAgICAo
U2luZ2xlTGluZVZpZXcuY29udmVydF9jb2x1bW5fdG9fcm93KTogUmV0dXJucyB0aGUgb3JpZ2lu
YWwgcm93IGdpdmVuIGEgY29sdW1uLgorICAgICAgICAoY3JlYXRlX3NrZWxldG9uX3BhcmFtZXRl
cnMpOiBTaW1wbGlmaWVzIGEgcGFyYW1ldGVyIGxpc3QgZm9yIGVhc2llciBzZWFyY2hpbmcuCisg
ICAgICAgIChmaW5kX3BhcmFtZXRlcl9uYW1lX2luZGV4KTogRmluZHMgd2hlcmUgdGhlIHBhcmFt
ZXRlciBuYW1lIGlzLgorICAgICAgICAocGFyYW1ldGVyX2xpc3QpOiBHZW5lcmF0ZXMgdGhlIGxp
c3Qgb2YgcGFyYW1ldGVycyBmb3IgYSBmdW5jdGlvbi4KKyAgICAgICAgKF9GdW5jdGlvblN0YXRl
LmJlZ2luKTogQWRkZWQgaW5mb3JtYXRpb24gdG8gYWxsb3cgZGV0ZXJtaW5pbmcgdGhlIHBhcmFt
ZXRlcnMKKyAgICAgICAgb24gZGVtYW5kLgorICAgICAgICAoX0Z1bmN0aW9uU3RhdGUuZ2V0X3Bh
cmFtZXRlcl9saXN0KTogUmV0dXJucyBhIHR1cGxlIG9mIGZ1bmN0aW9uIHBhcmFtZXRlcnMuCisg
ICAgICAgIChkZXRlY3RfZnVuY3Rpb25zKTogSW1wcm92ZSBmdW5jdGlvbiBkZXRlY3Rpb24gZm9y
IG9wZXJhdG9yIGZ1bmN0aW9ucyBhbmQKKyAgICAgICAgZGV0ZXJtaW5lIHdoZXJlIHRoZSBwYXJh
bWV0ZXJzIGVuZCBhbmQgcGFzcyB0aGF0IHRvIF9GdW5jdGlvblN0YXRlLmJlZ2luLgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwX3VuaXR0ZXN0LnB5OgorICAg
ICAgICAoQ3BwRnVuY3Rpb25zVGVzdC50ZXN0X3BhcmFtZXRlcik6IFZlcmlmaWVzIFBhcmFtZXRl
ciBmdW5jdGlvbmFsaXR5LgorICAgICAgICAoQ3BwRnVuY3Rpb25zVGVzdC50ZXN0X3NpbmdsZV9s
aW5lX3ZpZXcpOiBWZXJpZmllcyBTaW5nbGVMaW5lVmlldyBmdW5jdGlvbmFsaXR5LgorICAgICAg
ICAoQ3BwRnVuY3Rpb25zVGVzdC50ZXN0X2NyZWF0ZV9za2VsZXRvbl9wYXJhbWV0ZXJzKTogVmVy
aWZpZXMgY3JlYXRlX3NrZWxldG9uX3BhcmFtZXRlcnMuCisgICAgICAgIChDcHBGdW5jdGlvbnNU
ZXN0LnRlc3RfZmluZF9wYXJhbWV0ZXJfbmFtZV9pbmRleCk6IFZlcmlmaWVzIGZpbmRfcGFyYW1l
dGVyX25hbWVfaW5kZXguCisgICAgICAgIChDcHBGdW5jdGlvbnNUZXN0LnRlc3RfcGFyYW1ldGVy
X2xpc3QpOiBEb2VzIHNvbWUgbWluaW1hbCB2ZXJpZmljYXRpb24gZm9yIHBhcmFtZXRlciBsaXN0
LgorICAgICAgICBNdWNoIG1vcmUgdGhvcm91Z2ggdmVyaWZpY2F0aW9uIGlzIGRvbmUgYXMgcGFy
dCBvZiBGdW5jdGlvbkRldGVjdGlvblRlc3QudGVzdF9wYXJhbWV0ZXJfbGlzdC4KKyAgICAgICAg
KEZ1bmN0aW9uRGV0ZWN0aW9uVGVzdC5wZXJmb3JtX2Z1bmN0aW9uX2RldGVjdGlvbik6IEFkZGVk
IHN1cHBvcnQgZm9yIHZlcmlmeWluZworICAgICAgICB0aGUgcGFyYW1ldGVycyBmb3VuZC4KKyAg
ICAgICAgKEZ1bmN0aW9uRGV0ZWN0aW9uVGVzdC50ZXN0X2Z1bmN0aW9uX2RlY2xhcmF0aW9uX2Rl
dGVjdGlvbik6IEFkZGVkIG1vcmUgZnVuY3Rpb24KKyAgICAgICAgZGV0ZWN0aW9uIHRlc3QgdG8g
dmVyaWZ5IHRoYXQgd2UgY2F0Y2ggdGhlIG9wZXJhdG9yIGZ1bmN0aW9ucy4KKyAgICAgICAgKEZ1
bmN0aW9uRGV0ZWN0aW9uVGVzdC50ZXN0X2lnbm9yZV9tYWNyb3MpOiBWZXJpZnkgdGhhdCBmdW5j
dGlvbiBkZXRlY3Rpb24gaWdub3JlcyBtYWNyb3MuCisgICAgICAgIChGdW5jdGlvbkRldGVjdGlv
blRlc3QudGVzdF9wYXJhbWV0ZXJfbGlzdCk6IEFkZGVkIHRlc3RzIHRvIHZlcmlmeSB0aGUgcGFy
YW1ldGVyIHBhcnNpbmcuCisgICAgICAgIChDaGVja0ZvckZ1bmN0aW9uTGVuZ3Roc1Rlc3QudGVz
dF9mdW5jdGlvbl9sZW5ndGhfY2hlY2tfZGVmaW5pdGlvbl9zZXZlcml0eTFfZm9yX2JhZF90ZXN0
X2RvZXNudF9icmVhayk6IFJlbW92ZWQKKyAgICAgICAgYmVjYXVzZSB0aGUgZXJyb3IuIFRoZSB0
ZXN0IGlzIGFib3V0IHRoZSBiYWQgZnVuY3Rpb24gbmFtZS4gRml4aW5nIHRoZSBuYW1lIG1ha2Vz
IHRoZSB0ZXN0IGV4YWN0bHkgbGlrZQorICAgICAgICB0ZXN0X2Z1bmN0aW9uX2xlbmd0aF9jaGVj
a19kZWZpbml0aW9uX3NldmVyaXR5MV9mb3JfdGVzdC4KKwogMjAxMC0xMi0yMiAgRGF2aWQgTGV2
aW4gIDxsZXZpbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2hpbmljaGly
byBIYW1hamkuCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNr
ZXJzL2NwcC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwLnB5
CmluZGV4IDk0ZTViZGRhNDM5OGUxYmM1NWVlNzA5OTEwZjI4NWNhM2I1MmM1ZWIuLmY3MjFiOWY1
MTJhM2FmMTE0YTZhNTI0Njg4MDY0ODlkYTNiMWQ4MTggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwLnB5CkBAIC0xLDcgKzEsNyBAQAogIyEvdXNyL2Jpbi9w
eXRob24KICMgLSotIGNvZGluZzogdXRmLTggLSotCiAjCi0jIENvcHlyaWdodCAoQykgMjAwOSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMDksIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMgQ29weXJpZ2h0IChDKSAyMDA5
IFRvcmNoIE1vYmlsZSBJbmMuCiAjIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAjIENvcHlyaWdodCAoQykgMjAxMCBDaHJpcyBKZXJkb25layAoY2pl
cmRvbmVrQHdlYmtpdC5vcmcpCkBAIC0zMDgsNiArMzA4LDEzMyBAQCBjbGFzcyBfSW5jbHVkZVN0
YXRlKGRpY3QpOgogICAgICAgICByZXR1cm4gZXJyb3JfbWVzc2FnZQogCiAKK2NsYXNzIFBvc2l0
aW9uKG9iamVjdCk6CisgICAgIiIiSG9sZHMgdGhlIHBvc2l0aW9uIG9mIHNvbWV0aGluZy4iIiIK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgcm93LCBjb2x1bW4pOgorICAgICAgICBzZWxmLnJvdyA9
IHJvdworICAgICAgICBzZWxmLmNvbHVtbiA9IGNvbHVtbgorCisKK2NsYXNzIFBhcmFtZXRlcihv
YmplY3QpOgorICAgICIiIkluZm9ybWF0aW9uIGFib3V0IG9uZSBmdW5jdGlvbiBwYXJhbWV0ZXIu
IiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcmFtZXRlciwgcGFyYW1ldGVyX25hbWVfaW5k
ZXgsIHJvdyk6CisgICAgICAgIHNlbGYudHlwZSA9IHBhcmFtZXRlcls6cGFyYW1ldGVyX25hbWVf
aW5kZXhdLnN0cmlwKCkKKyAgICAgICAgIyBSZW1vdmUgYW55IGluaXRpYWxpemVycyBmcm9tIHRo
ZSBwYXJhbWV0ZXIgbmFtZSAoZS5nLiBpbnQgaSA9IDUpLgorICAgICAgICBzZWxmLm5hbWUgPSBz
dWIocic9LionLCAnJywgcGFyYW1ldGVyW3BhcmFtZXRlcl9uYW1lX2luZGV4Ol0pLnN0cmlwKCkK
KyAgICAgICAgc2VsZi5yb3cgPSByb3cKKworCitjbGFzcyBTaW5nbGVMaW5lVmlldyhvYmplY3Qp
OgorICAgICIiIkNvbnZlcnRzIG11bHRpcGxlIGxpbmVzIGludG8gYSBzaW5nbGUgbGluZSAod2l0
aCBsaW5lIGJyZWFrcyByZXBsYWNlZCBieSBhCisgICAgICAgc3BhY2UpIHRvIGFsbG93IGZvciBl
YXNpZXIgc2VhcmNoaW5nLiIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsaW5lcywgc3RhcnRf
cG9zaXRpb24sIGVuZF9wb3NpdGlvbik6CisgICAgICAgICIiIkNyZWF0ZSBhIFNpbmdsZUxpbmVW
aWV3IGluc3RhbmNlLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgbGluZXM6IGEgbGlzdCBv
ZiBtdWx0aXBsZSBsaW5lcyB0byBjb21iaW5lIGludG8gYSBzaW5nbGUgbGluZS4KKyAgICAgICAg
ICBzdGFydF9wb3NpdGlvbjogb2Zmc2V0IHdpdGhpbiBsaW5lcyBvZiB3aGVyZSB0byBzdGFydCB0
aGUgc2luZ2xlIGxpbmUuCisgICAgICAgICAgZW5kX3Bvc2l0aW9uOiBqdXN0IGFmdGVyIHdoZXJl
IHRvIGVuZCAobGlrZSBhIHNsaWNlIG9wZXJhdGlvbikuCisgICAgICAgICIiIgorICAgICAgICAj
IEdldCB0aGUgcm93cyBvZiBpbnRlcmVzdC4KKyAgICAgICAgdHJpbW1lZF9saW5lcyA9IGxpbmVz
W3N0YXJ0X3Bvc2l0aW9uLnJvdzplbmRfcG9zaXRpb24ucm93ICsgMV0KKworICAgICAgICAjIFJl
bW92ZSB0aGUgY29sdW1ucyBvbiB0aGUgbGFzdCBsaW5lIHRoYXQgYXJlbid0IGluY2x1ZGVkLgor
ICAgICAgICB0cmltbWVkX2xpbmVzWy0xXSA9IHRyaW1tZWRfbGluZXNbLTFdWzplbmRfcG9zaXRp
b24uY29sdW1uXQorCisgICAgICAgICMgUmVtb3ZlIHRoZSBjb2x1bW5zIG9uIHRoZSBmaXJzdCBs
aW5lIHRoYXQgYXJlbid0IGluY2x1ZGVkLgorICAgICAgICB0cmltbWVkX2xpbmVzWzBdID0gdHJp
bW1lZF9saW5lc1swXVtzdGFydF9wb3NpdGlvbi5jb2x1bW46XQorCisgICAgICAgICMgQ3JlYXRl
IGEgc2luZ2xlIGxpbmUgd2l0aCBhbGwgb2YgdGhlIHBhcmFtZXRlcnMuCisgICAgICAgIHNlbGYu
c2luZ2xlX2xpbmUgPSAnICcuam9pbih0cmltbWVkX2xpbmVzKQorCisgICAgICAgICMgS2VlcCB0
aGUgcm93IGxlbmd0aHMsIHNvIHdlIGNhbiBjYWxjdWxhdGUgdGhlIG9yaWdpbmFsIHJvdyBudW1i
ZXIKKyAgICAgICAgIyBnaXZlbiBhIGNvbHVtbiBpbiB0aGUgc2luZ2xlIGxpbmUgKGFkZGluZyAx
IGR1ZSB0byB0aGUgc3BhY2UgYWRkZWQKKyAgICAgICAgIyBkdXJpbmcgdGhlIGpvaW4pLgorICAg
ICAgICBzZWxmLl9yb3dfbGVuZ3RocyA9IFtsZW4obGluZSkgKyAxIGZvciBsaW5lIGluIHRyaW1t
ZWRfbGluZXNdCisgICAgICAgIHNlbGYuX3N0YXJ0aW5nX3JvdyA9IHN0YXJ0X3Bvc2l0aW9uLnJv
dworCisgICAgZGVmIGNvbnZlcnRfY29sdW1uX3RvX3JvdyhzZWxmLCBzaW5nbGVfbGluZV9jb2x1
bW5fbnVtYmVyKToKKyAgICAgICAgIiIiQ29udmVydCB0aGUgY29sdW1uIG51bWJlciBmcm9tIHRo
ZSBzaW5nbGUgbGluZSBpbnRvIHRoZSBvcmlnaW5hbAorICAgICAgICBsaW5lIG51bWJlci4KKwor
ICAgICAgICBTcGVjaWFsIGNhc2VzOgorICAgICAgICAqIENvbHVtbnMgaW4gdGhlIGFkZGVkIHNw
YWNlcyBhcmUgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBwcmV2aW91cyBsaW5lLgorICAgICAgICAq
IENvbHVtbnMgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGxpbmUgYXJlIGNvbnNpZGVyIHBhcnQgdGhl
IGxhc3QgbGluZQorICAgICAgICBpbiB0aGUgdmlldy4iIiIKKyAgICAgICAgdG90YWxfY29sdW1u
cyA9IDAKKyAgICAgICAgcm93X29mZnNldCA9IDAKKyAgICAgICAgd2hpbGUgcm93X29mZnNldCA8
IGxlbihzZWxmLl9yb3dfbGVuZ3RocykgLSAxIGFuZCBzaW5nbGVfbGluZV9jb2x1bW5fbnVtYmVy
ID49IHRvdGFsX2NvbHVtbnMgKyBzZWxmLl9yb3dfbGVuZ3Roc1tyb3dfb2Zmc2V0XToKKyAgICAg
ICAgICAgIHRvdGFsX2NvbHVtbnMgKz0gc2VsZi5fcm93X2xlbmd0aHNbcm93X29mZnNldF0KKyAg
ICAgICAgICAgIHJvd19vZmZzZXQgKz0gMQorICAgICAgICByZXR1cm4gc2VsZi5fc3RhcnRpbmdf
cm93ICsgcm93X29mZnNldAorCisKK2RlZiBjcmVhdGVfc2tlbGV0b25fcGFyYW1ldGVycyhhbGxf
cGFyYW1ldGVycyk6CisgICAgIiIiQ29udmVydHMgYSBwYXJhbWV0ZXIgbGlzdCB0byBhIHNrZWxl
dG9uIHZlcnNpb24uCisKKyAgICBUaGUgc2tlbGV0b24gb25seSBoYXMgb25lIHdvcmQgZm9yIHRo
ZSBwYXJhbWV0ZXIgbmFtZSwgb25lIHdvcmQgZm9yIHRoZSB0eXBlLAorICAgIGFuZCBjb21tYXMg
YWZ0ZXIgZWFjaCBwYXJhbWV0ZXIgYW5kIG9ubHkgdGhlcmUuIEV2ZXJ5dGhpbmcgaW4gdGhlIHNr
ZWxldG9uCisgICAgcmVtYWlucyBpbiB0aGUgc2FtZSBjb2x1bW5zIGFzIHRoZSBvcmlnaW5hbC4i
IiIKKyAgICBhbGxfc2ltcGxpZmljYXRpb25zID0gKAorICAgICAgICAjIFJlbW92ZSB0ZW1wbGF0
ZSBwYXJhbWV0ZXJzLCBmdW5jdGlvbiBkZWNsYXJhdGlvbiBwYXJhbWV0ZXJzLCBldGMuCisgICAg
ICAgIHInKDxbXjw+XSo/Pil8KFwoW15cKFwpXSo/XCkpfChce1teXHtcfV0qP1x9KScsCisgICAg
ICAgICMgUmVtb3ZlIGFsbCBpbml0aWFsaXplcnMuCisgICAgICAgIHInPVteLF0qJywKKyAgICAg
ICAgIyBSZW1vdmUgOjogYW5kIGV2ZXJ5dGhpbmcgYmVmb3JlIGl0LgorICAgICAgICByJ1teLF0q
OjonLAorICAgICAgICAjIFJlbW92ZSBtb2RpZmllcnMgbGlrZSAmLCAqLgorICAgICAgICByJ1sm
Kl0nLAorICAgICAgICAjIFJlbW92ZSBjb25zdCBtb2RpZmllcnMuCisgICAgICAgIHInXGJjb25z
dFxzKyg/PVtBLVphLXpdKScsCisgICAgICAgICMgUmVtb3ZlIG51bWVyaWNhbCBtb2RpZmllcnMg
bGlrZSBsb25nLgorICAgICAgICByJ1xiKHVuc2lnbmVkfGxvbmd8c2hvcnQpXHMrKD89dW5zaWdu
ZWR8bG9uZ3xzaG9ydHxpbnR8Y2hhcnxkb3VibGV8ZmxvYXQpJykKKworICAgIHNrZWxldG9uX3Bh
cmFtZXRlcnMgPSBhbGxfcGFyYW1ldGVycworICAgIGZvciBzaW1wbGlmaWNhdGlvbiBpbiBhbGxf
c2ltcGxpZmljYXRpb25zOgorICAgICAgICBza2VsZXRvbl9wYXJhbWV0ZXJzID0gaXRlcmF0aXZl
bHlfcmVwbGFjZV9tYXRjaGVzX3dpdGhfY2hhcihzaW1wbGlmaWNhdGlvbiwgJyAnLCBza2VsZXRv
bl9wYXJhbWV0ZXJzKQorICAgICMgSWYgdGhlcmUgYXJlIGFueSBwYXJhbWV0ZXJzLCB0aGVuIGFk
ZCBhICwgYWZ0ZXIgdGhlIGxhc3Qgb25lIHRvCisgICAgIyBtYWtlIGEgcmVndWxhciBwYXR0ZXJu
IG9mIGEgLCBmb2xsb3dpbmcgZXZlcnkgcGFyYW1ldGVyLgorICAgIGlmIHNrZWxldG9uX3BhcmFt
ZXRlcnMuc3RyaXAoKToKKyAgICAgICAgc2tlbGV0b25fcGFyYW1ldGVycyArPSAnLCcKKyAgICBy
ZXR1cm4gc2tlbGV0b25fcGFyYW1ldGVycworCisKK2RlZiBmaW5kX3BhcmFtZXRlcl9uYW1lX2lu
ZGV4KHNrZWxldG9uX3BhcmFtZXRlcik6CisgICAgIiIiRGV0ZXJtaW5lcyB3aGVyZSB0aGUgcGFy
YW1ldGVyZSBuYW1lIHN0YXJ0cyBnaXZlbiB0aGUgc2tlbGV0b24gcGFyYW1ldGVyLiIiIgorICAg
ICMgVGhlIGZpcnN0IHNwYWNlIGZyb20gdGhlIHJpZ2h0IGluIHRoZSBzaW1wbGlmaWVkIHBhcmFt
ZXRlciBpcyB3aGVyZSB0aGUgcGFyYW1ldGVyCisgICAgIyBuYW1lIHN0YXJ0cyB1bmxlc3MgdGhl
IGZpcnN0IHNwYWNlIGlzIGJlZm9yZSBhbnkgY29udGVudCBpbiB0aGUgc2ltcGxpZmllZCBwYXJh
bWV0ZXIuCisgICAgYmVmb3JlX25hbWVfaW5kZXggPSBza2VsZXRvbl9wYXJhbWV0ZXIucnN0cmlw
KCkucmZpbmQoJyAnKQorICAgIGlmIGJlZm9yZV9uYW1lX2luZGV4ICE9IC0xIGFuZCBza2VsZXRv
bl9wYXJhbWV0ZXJbOmJlZm9yZV9uYW1lX2luZGV4XS5zdHJpcCgpOgorICAgICAgICByZXR1cm4g
YmVmb3JlX25hbWVfaW5kZXggKyAxCisgICAgcmV0dXJuIGxlbihza2VsZXRvbl9wYXJhbWV0ZXIp
CisKKworZGVmIHBhcmFtZXRlcl9saXN0KGVsaWRlZF9saW5lcywgc3RhcnRfcG9zaXRpb24sIGVu
ZF9wb3NpdGlvbik6CisgICAgIiIiR2VuZXJhdG9yIGZvciBhIGZ1bmN0aW9uJ3MgcGFyYW1ldGVy
cy4iIiIKKyAgICAjIENyZWF0ZSBuZXcgcG9zaXRpb25zIHRoYXQgb21pdCB0aGUgb3V0ZXIgcGFy
ZW50aGVzaXMgb2YgdGhlIHBhcmFtZXRlcnMuCisgICAgc3RhcnRfcG9zaXRpb24gPSBQb3NpdGlv
bihyb3c9c3RhcnRfcG9zaXRpb24ucm93LCBjb2x1bW49c3RhcnRfcG9zaXRpb24uY29sdW1uICsg
MSkKKyAgICBlbmRfcG9zaXRpb24gPSBQb3NpdGlvbihyb3c9ZW5kX3Bvc2l0aW9uLnJvdywgY29s
dW1uPWVuZF9wb3NpdGlvbi5jb2x1bW4gLSAxKQorICAgIHNpbmdsZV9saW5lX3ZpZXcgPSBTaW5n
bGVMaW5lVmlldyhlbGlkZWRfbGluZXMsIHN0YXJ0X3Bvc2l0aW9uLCBlbmRfcG9zaXRpb24pCisg
ICAgc2tlbGV0b25fcGFyYW1ldGVycyA9IGNyZWF0ZV9za2VsZXRvbl9wYXJhbWV0ZXJzKHNpbmds
ZV9saW5lX3ZpZXcuc2luZ2xlX2xpbmUpCisgICAgZW5kX2luZGV4ID0gLTEKKworICAgIHdoaWxl
IFRydWU6CisgICAgICAgICMgRmluZCB0aGUgZW5kIG9mIHRoZSBuZXh0IHBhcmFtZXRlci4KKyAg
ICAgICAgc3RhcnRfaW5kZXggPSBlbmRfaW5kZXggKyAxCisgICAgICAgIGVuZF9pbmRleCA9IHNr
ZWxldG9uX3BhcmFtZXRlcnMuZmluZCgnLCcsIHN0YXJ0X2luZGV4KQorCisgICAgICAgICMgTm8g
Y29tbWEgbWVhbnMgdGhhdCBhbGwgcGFyYW1ldGVycyBoYXZlIGJlZW4gcGFyc2VkLgorICAgICAg
ICBpZiBlbmRfaW5kZXggPT0gLTE6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgcm93ID0g
c2luZ2xlX2xpbmVfdmlldy5jb252ZXJ0X2NvbHVtbl90b19yb3coZW5kX2luZGV4KQorCisgICAg
ICAgICMgUGFyc2UgdGhlIHBhcmFtZXRlciBpbnRvIGEgdHlwZSBhbmQgcGFyYW1ldGVyIG5hbWUu
CisgICAgICAgIHNrZWxldG9uX3BhcmFtZXRlciA9IHNrZWxldG9uX3BhcmFtZXRlcnNbc3RhcnRf
aW5kZXg6ZW5kX2luZGV4XQorICAgICAgICBuYW1lX29mZnNldCA9IGZpbmRfcGFyYW1ldGVyX25h
bWVfaW5kZXgoc2tlbGV0b25fcGFyYW1ldGVyKQorICAgICAgICBwYXJhbWV0ZXIgPSBzaW5nbGVf
bGluZV92aWV3LnNpbmdsZV9saW5lW3N0YXJ0X2luZGV4OmVuZF9pbmRleF0KKyAgICAgICAgeWll
bGQgUGFyYW1ldGVyKHBhcmFtZXRlciwgbmFtZV9vZmZzZXQsIHJvdykKKworCiBjbGFzcyBfRnVu
Y3Rpb25TdGF0ZShvYmplY3QpOgogICAgICIiIlRyYWNrcyBjdXJyZW50IGZ1bmN0aW9uIG5hbWUg
YW5kIHRoZSBudW1iZXIgb2YgbGluZXMgaW4gaXRzIGJvZHkuCiAKQEAgLTMyOSw3ICs0NTYsOCBA
QCBjbGFzcyBfRnVuY3Rpb25TdGF0ZShvYmplY3QpOgogICAgICAgICBzZWxmLmJvZHlfc3RhcnRf
bGluZV9udW1iZXIgPSAtMTAwMAogICAgICAgICBzZWxmLmVuZGluZ19saW5lX251bWJlciA9IC0x
MDAwCiAKLSAgICBkZWYgYmVnaW4oc2VsZiwgZnVuY3Rpb25fbmFtZSwgYm9keV9zdGFydF9saW5l
X251bWJlciwgZW5kaW5nX2xpbmVfbnVtYmVyLCBpc19kZWNsYXJhdGlvbik6CisgICAgZGVmIGJl
Z2luKHNlbGYsIGZ1bmN0aW9uX25hbWUsIGJvZHlfc3RhcnRfbGluZV9udW1iZXIsIGVuZGluZ19s
aW5lX251bWJlciwgaXNfZGVjbGFyYXRpb24sCisgICAgICAgICAgICAgIHBhcmFtZXRlcl9zdGFy
dF9wb3NpdGlvbiwgcGFyYW1ldGVyX2VuZF9wb3NpdGlvbiwgY2xlYW5fbGluZXMpOgogICAgICAg
ICAiIiJTdGFydCBhbmFseXppbmcgZnVuY3Rpb24gYm9keS4KIAogICAgICAgICBBcmdzOgpAQCAt
MzM3LDYgKzQ2NSw5IEBAIGNsYXNzIF9GdW5jdGlvblN0YXRlKG9iamVjdCk6CiAgICAgICAgICAg
ICBib2R5X3N0YXJ0X2xpbmVfbnVtYmVyOiBUaGUgbGluZSBudW1iZXIgb2YgdGhlIHsgb3IgdGhl
IDsgZm9yIGEgcHJvdG95cGUuCiAgICAgICAgICAgICBlbmRpbmdfbGluZV9udW1iZXI6IFRoZSBs
aW5lIG51bWJlciB3aGVyZSB0aGUgZnVuY3Rpb24gZW5kcy4KICAgICAgICAgICAgIGlzX2RlY2xh
cmF0aW9uOiBUcnVlIGlmIHRoaXMgaXMgYSBwcm90b3R5cGUuCisgICAgICAgICAgICBwYXJhbWV0
ZXJfc3RhcnRfcG9zaXRpb246IHBvc2l0aW9uIGluIGVsaWRlZCBvZiB0aGUgJygnIGZvciB0aGUg
cGFyYW1ldGVycy4KKyAgICAgICAgICAgIHBhcmFtZXRlcl9lbmRfcG9zaXRpb246IHBvc2l0aW9u
IGluIGVsaWRlZCBvZiB0aGUgJyknIGZvciB0aGUgcGFyYW1ldGVycy4KKyAgICAgICAgICAgIGNs
ZWFuX2xpbmVzOiBBIENsZWFuc2VkTGluZXMgaW5zdGFuY2UgY29udGFpbmluZyB0aGUgZmlsZS4K
ICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuaW5fYV9mdW5jdGlvbiA9IFRydWUKICAgICAgICAg
c2VsZi5saW5lc19pbl9mdW5jdGlvbiA9IC0xICAjIERvbid0IGNvdW50IHRoZSBvcGVuIGJyYWNl
IGxpbmUuCkBAIC0zNDQsNiArNDc1LDE3IEBAIGNsYXNzIF9GdW5jdGlvblN0YXRlKG9iamVjdCk6
CiAgICAgICAgIHNlbGYuYm9keV9zdGFydF9saW5lX251bWJlciA9IGJvZHlfc3RhcnRfbGluZV9u
dW1iZXIKICAgICAgICAgc2VsZi5lbmRpbmdfbGluZV9udW1iZXIgPSBlbmRpbmdfbGluZV9udW1i
ZXIKICAgICAgICAgc2VsZi5pc19kZWNsYXJhdGlvbiA9IGlzX2RlY2xhcmF0aW9uCisgICAgICAg
IHNlbGYucGFyYW1ldGVyX3N0YXJ0X3Bvc2l0aW9uID0gcGFyYW1ldGVyX3N0YXJ0X3Bvc2l0aW9u
CisgICAgICAgIHNlbGYucGFyYW1ldGVyX2VuZF9wb3NpdGlvbiA9IHBhcmFtZXRlcl9lbmRfcG9z
aXRpb24KKyAgICAgICAgc2VsZi5fY2xlYW5fbGluZXMgPSBjbGVhbl9saW5lcworICAgICAgICBz
ZWxmLl9wYXJhbWV0ZXJfbGlzdCA9IE5vbmUKKworICAgIGRlZiBwYXJhbWV0ZXJfbGlzdChzZWxm
KToKKyAgICAgICAgaWYgbm90IHNlbGYuX3BhcmFtZXRlcl9saXN0OgorICAgICAgICAgICAgIyBT
dG9yZSB0aGUgZmluYWwgcmVzdWx0IGFzIGEgdHVwbGUgc2luY2UgdGhhdCBpcyBpbW11dGFibGUu
CisgICAgICAgICAgICBzZWxmLl9wYXJhbWV0ZXJfbGlzdCA9IHR1cGxlKHBhcmFtZXRlcl9saXN0
KHNlbGYuX2NsZWFuX2xpbmVzLmVsaWRlZCwgc2VsZi5wYXJhbWV0ZXJfc3RhcnRfcG9zaXRpb24s
IHNlbGYucGFyYW1ldGVyX2VuZF9wb3NpdGlvbikpCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Bh
cmFtZXRlcl9saXN0CiAKICAgICBkZWYgY291bnQoc2VsZiwgbGluZV9udW1iZXIpOgogICAgICAg
ICAiIiJDb3VudCBsaW5lIGluIGN1cnJlbnQgZnVuY3Rpb24gYm9keS4iIiIKQEAgLTEyMTMsNyAr
MTM1NSwxMSBAQCBkZWYgZGV0ZWN0X2Z1bmN0aW9ucyhjbGVhbl9saW5lcywgbGluZV9udW1iZXIs
IGZ1bmN0aW9uX3N0YXRlLCBlcnJvcik6CiAgICAgcmF3ID0gY2xlYW5fbGluZXMucmF3X2xpbmVz
CiAgICAgcmF3X2xpbmUgPSByYXdbbGluZV9udW1iZXJdCiAKLSAgICByZWdleHAgPSByJ1xzKihc
dyhcd3w6OnxcKnxcJnxcc3w8fD58LHx+KSopXCgnICAjIGRlY2xzICogJiBzcGFjZTo6bmFtZSgg
Li4uCisgICAgIyBMaW5lcyBlbmRpbmcgd2l0aCBhIFwgaW5kaWNhdGUgYSBtYWNyby4gRG9uJ3Qg
dHJ5IHRvIGNoZWNrIHRoZW0uCisgICAgaWYgcmF3X2xpbmUuZW5kc3dpdGgoJ1xcJyk6CisgICAg
ICAgIHJldHVybgorCisgICAgcmVnZXhwID0gcidccyooXHcoXHd8Ojp8XCp8XCZ8XHN8PHw+fCx8
fnwob3BlcmF0b3JccyooL3wtfD18IXxcKykrKSkqKVwoJyAgIyBkZWNscyAqICYgc3BhY2U6Om5h
bWUoIC4uLgogICAgIG1hdGNoX3Jlc3VsdCA9IG1hdGNoKHJlZ2V4cCwgbGluZSkKICAgICBpZiBu
b3QgbWF0Y2hfcmVzdWx0OgogICAgICAgICByZXR1cm4KQEAgLTEyMzIsNyArMTM3OCw3IEBAIGRl
ZiBkZXRlY3RfZnVuY3Rpb25zKGNsZWFuX2xpbmVzLCBsaW5lX251bWJlciwgZnVuY3Rpb25fc3Rh
dGUsIGVycm9yKToKICAgICAgICAgICAgICMgUmVwbGFjZSB0ZW1wbGF0ZSBjb25zdHJ1Y3RzIHdp
dGggXyBzbyB0aGF0IG5vIHNwYWNlcyByZW1haW4gaW4gdGhlIGZ1bmN0aW9uIG5hbWUsCiAgICAg
ICAgICAgICAjIHdoaWxlIGtlZXBpbmcgdGhlIGNvbHVtbiBudW1iZXJzIG9mIG90aGVyIGNoYXJh
Y3RlcnMgdGhlIHNhbWUgYXMgImxpbmUiLgogICAgICAgICAgICAgbGluZV93aXRoX25vX3RlbXBs
YXRlcyA9IGl0ZXJhdGl2ZWx5X3JlcGxhY2VfbWF0Y2hlc193aXRoX2NoYXIocic8W148Pl0qPics
ICdfJywgbGluZSkKLSAgICAgICAgICAgIG1hdGNoX2Z1bmN0aW9uID0gc2VhcmNoKHInKChcd3w6
fDx8PnwsfH4pKilcKCcsIGxpbmVfd2l0aF9ub190ZW1wbGF0ZXMpCisgICAgICAgICAgICBtYXRj
aF9mdW5jdGlvbiA9IHNlYXJjaChyJygoXHd8Onw8fD58LHx+fChvcGVyYXRvclxzKigvfC18PXwh
fFwrKSspKSopXCgnLCBsaW5lX3dpdGhfbm9fdGVtcGxhdGVzKQogICAgICAgICAgICAgaWYgbm90
IG1hdGNoX2Z1bmN0aW9uOgogICAgICAgICAgICAgICAgIHJldHVybiAgIyBUaGUgJygnIG11c3Qg
aGF2ZSBiZWVuIGluc2lkZSBvZiBhIHRlbXBsYXRlLgogCkBAIC0xMjQ2LDEzICsxMzkyLDIyIEBA
IGRlZiBkZXRlY3RfZnVuY3Rpb25zKGNsZWFuX2xpbmVzLCBsaW5lX251bWJlciwgZnVuY3Rpb25f
c3RhdGUsIGVycm9yKToKICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKz0gcGFyYW1ldGVy
X3JlZ2V4cC5ncm91cCgxKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBmdW5j
dGlvbiArPSAnKCknCisKKyAgICAgICAgICAgIHBhcmFtZXRlcl9zdGFydF9wb3NpdGlvbiA9IFBv
c2l0aW9uKGxpbmVfbnVtYmVyLCBtYXRjaF9mdW5jdGlvbi5lbmQoMSkpCisgICAgICAgICAgICBj
bG9zZV9yZXN1bHQgPSBjbG9zZV9leHByZXNzaW9uKGNsZWFuX2xpbmVzLCBsaW5lX251bWJlciwg
cGFyYW1ldGVyX3N0YXJ0X3Bvc2l0aW9uLmNvbHVtbikKKyAgICAgICAgICAgIGlmIGNsb3NlX3Jl
c3VsdFsxXSA9PSBsZW4oY2xlYW5fbGluZXMuZWxpZGVkKToKKyAgICAgICAgICAgICAgICAjIE5v
IGVuZCB3YXMgZm91bmQuCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBwYXJh
bWV0ZXJfZW5kX3Bvc2l0aW9uID0gUG9zaXRpb24oY2xvc2VfcmVzdWx0WzFdLCBjbG9zZV9yZXN1
bHRbMl0pCisKICAgICAgICAgICAgIGlzX2RlY2xhcmF0aW9uID0gYm9vbChzZWFyY2gocideW157
XSo7Jywgc3RhcnRfbGluZSkpCiAgICAgICAgICAgICBpZiBpc19kZWNsYXJhdGlvbjoKICAgICAg
ICAgICAgICAgICBlbmRpbmdfbGluZV9udW1iZXIgPSBzdGFydF9saW5lX251bWJlcgogICAgICAg
ICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBvcGVuX2JyYWNlX2luZGV4ID0gc3RhcnRfbGlu
ZS5maW5kKCd7JykKICAgICAgICAgICAgICAgICBlbmRpbmdfbGluZV9udW1iZXIgPSBjbG9zZV9l
eHByZXNzaW9uKGNsZWFuX2xpbmVzLCBzdGFydF9saW5lX251bWJlciwgb3Blbl9icmFjZV9pbmRl
eClbMV0KLSAgICAgICAgICAgIGZ1bmN0aW9uX3N0YXRlLmJlZ2luKGZ1bmN0aW9uLCBzdGFydF9s
aW5lX251bWJlciwgZW5kaW5nX2xpbmVfbnVtYmVyLCBpc19kZWNsYXJhdGlvbikKKyAgICAgICAg
ICAgIGZ1bmN0aW9uX3N0YXRlLmJlZ2luKGZ1bmN0aW9uLCBzdGFydF9saW5lX251bWJlciwgZW5k
aW5nX2xpbmVfbnVtYmVyLCBpc19kZWNsYXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmFtZXRlcl9zdGFydF9wb3NpdGlvbiwgcGFyYW1ldGVyX2VuZF9wb3NpdGlv
biwgY2xlYW5fbGluZXMpCiAgICAgICAgICAgICByZXR1cm4KIAogICAgICMgTm8gYm9keSBmb3Ig
dGhlIGZ1bmN0aW9uIChvciBldmlkZW5jZSBvZiBhIG5vbi1mdW5jdGlvbikgd2FzIGZvdW5kLgpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy9jcHBfdW5p
dHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcF91bml0
dGVzdC5weQppbmRleCA3MGRmMWVhNWVjY2UxODI3ODliZDBkNjBjOTQ0OWY5OWZmMDkxYTQ2Li40
Zjg0NjkzZGYwYjk0NmU4Nzk1MDZmYjQ5YWE5OTEyM2UxNTUyNmNhIDEwMDY0NAotLS0gYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcF91bml0dGVzdC5weQorKysgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcF91bml0dGVzdC5weQpAQCAt
MSw3ICsxLDcgQEAKICMhL3Vzci9iaW4vcHl0aG9uCiAjIC0qLSBjb2Rpbmc6IHV0Zi04OyAtKi0K
ICMKLSMgQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogIyBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4KICMgQ29weXJpZ2h0
IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMgQ29weXJpZ2h0IChD
KSAyMDEwIENocmlzIEplcmRvbmVrIChjamVyZG9uZWtAd2Via2l0Lm9yZykKQEAgLTExOSw2ICsx
MTksOTMgQEAgY2xhc3MgQ3BwRnVuY3Rpb25zVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAg
ICAgIHNlbGYuYXNzZXJ0RmFsc2UoY3BwX3N0eWxlLl9GaWxlU3RhdGUoY2xlYW5fbGluZXMsICdo
JykuaXNfY19vcl9vYmplY3RpdmVfYygpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoY3BwX3N0
eWxlLl9GaWxlU3RhdGUoY2xlYW5fb2JqY19saW5lcywgJ2gnKS5pc19jX29yX29iamVjdGl2ZV9j
KCkpCiAKKyAgICBkZWYgdGVzdF9wYXJhbWV0ZXIoc2VsZik6CisgICAgICAgICMgVGVzdCB0eXBl
LgorICAgICAgICBwYXJhbWV0ZXIgPSBjcHBfc3R5bGUuUGFyYW1ldGVyKCdFeGNlcHRpb25Db2Rl
JywgMTMsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBhcmFtZXRlci50eXBlLCAnRXhj
ZXB0aW9uQ29kZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBhcmFtZXRlci5uYW1lLCAn
JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocGFyYW1ldGVyLnJvdywgMSkKKworICAgICAg
ICAjIFRlc3QgdHlwZSBhbmQgbmFtZS4KKyAgICAgICAgcGFyYW1ldGVyID0gY3BwX3N0eWxlLlBh
cmFtZXRlcignUGFzc1JlZlB0cjxNeUNsYXNzPiBwYXJlbnQnLCAxOSwgMSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbHMocGFyYW1ldGVyLnR5cGUsICdQYXNzUmVmUHRyPE15Q2xhc3M+JykKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocGFyYW1ldGVyLm5hbWUsICdwYXJlbnQnKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFscyhwYXJhbWV0ZXIucm93LCAxKQorCisgICAgICAgICMgVGVzdCB0
eXBlLCBubyBuYW1lLCB3aXRoIGRlZmF1bHQgdmFsdWUuCisgICAgICAgIHBhcmFtZXRlciA9IGNw
cF9zdHlsZS5QYXJhbWV0ZXIoJ015Q2xhc3MgPSAwJywgNywgMCkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbHMocGFyYW1ldGVyLnR5cGUsICdNeUNsYXNzJykKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbHMocGFyYW1ldGVyLm5hbWUsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhwYXJh
bWV0ZXIucm93LCAwKQorCisgICAgICAgICMgVGVzdCB0eXBlLCBuYW1lLCBhbmQgZGVmYXVsdCB2
YWx1ZS4KKyAgICAgICAgcGFyYW1ldGVyID0gY3BwX3N0eWxlLlBhcmFtZXRlcignTXlDbGFzcyBh
ID0gMCcsIDcsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBhcmFtZXRlci50eXBlLCAn
TXlDbGFzcycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBhcmFtZXRlci5uYW1lLCAnYScp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBhcmFtZXRlci5yb3csIDApCisKKyAgICBkZWYg
dGVzdF9zaW5nbGVfbGluZV92aWV3KHNlbGYpOgorICAgICAgICBzdGFydF9wb3NpdGlvbiA9IGNw
cF9zdHlsZS5Qb3NpdGlvbihyb3c9MSwgY29sdW1uPTEpCisgICAgICAgIGVuZF9wb3NpdGlvbiA9
IGNwcF9zdHlsZS5Qb3NpdGlvbihyb3c9MywgY29sdW1uPTEpCisgICAgICAgIHNpbmdsZV9saW5l
X3ZpZXcgPSBjcHBfc3R5bGUuU2luZ2xlTGluZVZpZXcoWycwJywgJ2FiY2RlJywgJ2ZnaCcsICdp
J10sIHN0YXJ0X3Bvc2l0aW9uLCBlbmRfcG9zaXRpb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWxzKHNpbmdsZV9saW5lX3ZpZXcuc2luZ2xlX2xpbmUsICdiY2RlIGZnaCBpJykKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbHMoc2luZ2xlX2xpbmVfdmlldy5jb252ZXJ0X2NvbHVtbl90b19yb3co
MCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNpbmdsZV9saW5lX3ZpZXcuY29udmVy
dF9jb2x1bW5fdG9fcm93KDQpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzaW5nbGVf
bGluZV92aWV3LmNvbnZlcnRfY29sdW1uX3RvX3Jvdyg1KSwgMikKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbHMoc2luZ2xlX2xpbmVfdmlldy5jb252ZXJ0X2NvbHVtbl90b19yb3coOCksIDIpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNpbmdsZV9saW5lX3ZpZXcuY29udmVydF9jb2x1bW5f
dG9fcm93KDkpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzaW5nbGVfbGluZV92aWV3
LmNvbnZlcnRfY29sdW1uX3RvX3JvdygxMDApLCAzKQorCisgICAgICAgIHN0YXJ0X3Bvc2l0aW9u
ID0gY3BwX3N0eWxlLlBvc2l0aW9uKHJvdz0wLCBjb2x1bW49MykKKyAgICAgICAgZW5kX3Bvc2l0
aW9uID0gY3BwX3N0eWxlLlBvc2l0aW9uKHJvdz0wLCBjb2x1bW49NCkKKyAgICAgICAgc2luZ2xl
X2xpbmVfdmlldyA9IGNwcF9zdHlsZS5TaW5nbGVMaW5lVmlldyhbJ2FiY2RlZiddLCBzdGFydF9w
b3NpdGlvbiwgZW5kX3Bvc2l0aW9uKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzaW5nbGVf
bGluZV92aWV3LnNpbmdsZV9saW5lLCAnZCcpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfc2tlbGV0
b25fcGFyYW1ldGVycyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY3BwX3N0eWxl
LmNyZWF0ZV9za2VsZXRvbl9wYXJhbWV0ZXJzKCcnKSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKGNwcF9zdHlsZS5jcmVhdGVfc2tlbGV0b25fcGFyYW1ldGVycygnICcpLCAnICcpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNwcF9zdHlsZS5jcmVhdGVfc2tlbGV0b25fcGFyYW1l
dGVycygnbG9uZycpLCAnbG9uZywnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhjcHBfc3R5
bGUuY3JlYXRlX3NrZWxldG9uX3BhcmFtZXRlcnMoJ2NvbnN0IHVuc2lnbmVkIGxvbmcgaW50Jyks
ICcgICAgICAgICAgICAgICAgICAgIGludCwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhj
cHBfc3R5bGUuY3JlYXRlX3NrZWxldG9uX3BhcmFtZXRlcnMoJ2xvbmcgaW50KicpLCAnICAgICBp
bnQgLCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNwcF9zdHlsZS5jcmVhdGVfc2tlbGV0
b25fcGFyYW1ldGVycygnUGFzc1JlZlB0cjxGb28+IGEnKSwgJ1Bhc3NSZWZQdHIgICAgICBhLCcp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGNwcF9zdHlsZS5jcmVhdGVfc2tlbGV0b25fcGFy
YW1ldGVycygKKyAgICAgICAgICAgICAgICAnQ29tcGxleFRlbXBsYXRlPE5lc3RlZFRlbXBsYXRl
MTxNeUNsYXNzMSwgTXlDbGFzczI+LCBOZXN0ZWRUZW1wbGF0ZTE8TXlDbGFzczEsIE15Q2xhc3My
PiA+IHBhcmFtLCBpbnQgc2Vjb25kJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICdDb21w
bGV4VGVtcGxhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW0sIGludCBzZWNvbmQsJykKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbHMoY3BwX3N0eWxlLmNyZWF0ZV9za2VsZXRvbl9wYXJhbWV0ZXJz
KCdpbnQgPSAwLCBOYW1lc3BhY2U6OlR5cGUmIGEnKSwgJ2ludCAgICAsICAgICAgICAgICAgVHlw
ZSAgYSwnKQorICAgICAgICAjIENyZWF0ZSBza2VsZXRvbiBwYXJhbWV0ZXJzIGlzIGEgYml0IHRv
byBhZ2dyZXNzaXZlIHdpdGggZnVuY3Rpb24gdmFyaWFibGVzLCBidXQKKyAgICAgICAgIyBpdCBh
bGxvd3MgZm9yIHBhcnNpbmcgb3RoZXIgcGFyYW1ldGVycyBhbmQgZGVjbGFyYXRpb25zIGxpa2Ug
dGhpcyBhcmUgcmFyZS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY3BwX3N0eWxlLmNyZWF0
ZV9za2VsZXRvbl9wYXJhbWV0ZXJzKCd2b2lkICgqZm4pKGludCBhLCBpbnQgYiksIE5hbWVzcGFj
ZTo6VHlwZSYgYScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAndm9pZCAgICAgICAgICAg
ICAgICAgICAgLCAgICAgICAgICAgIFR5cGUgIGEsJykKKworICAgICAgICAjIFRoaXMgZG9lc24n
dCBsb29rIGxpa2UgZnVuY3Rpb25zIGRlY2xhcmF0aW9ucyBidXQgdGhlIHNpbXBsaWZpY2F0aW9u
cyBoZWxwIHRvIGVsaW1pbmF0ZSBmYWxzZSBwb3NpdGl2ZXMuCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKGNwcF9zdHlsZS5jcmVhdGVfc2tlbGV0b25fcGFyYW1ldGVycygnYntkfScpLCAnYiAg
ICwnKQorCisgICAgZGVmIHRlc3RfZmluZF9wYXJhbWV0ZXJfbmFtZV9pbmRleChzZWxmKToKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY3BwX3N0eWxlLmZpbmRfcGFyYW1ldGVyX25hbWVfaW5k
ZXgoJyBpbnQgYSAnKSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY3BwX3N0eWxlLmZp
bmRfcGFyYW1ldGVyX25hbWVfaW5kZXgoJyBQYXNzUmVmUHRyICAgICAnKSwgMTYpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWxzKGNwcF9zdHlsZS5maW5kX3BhcmFtZXRlcl9uYW1lX2luZGV4KCdk
b3VibGUnKSwgNikKKworICAgIGRlZiB0ZXN0X3BhcmFtZXRlcl9saXN0KHNlbGYpOgorICAgICAg
ICBlbGlkZWRfbGluZXMgPSBbJ2ludCBibGFoKFBhc3NSZWZQdHI8TXlDbGFzcz4gcGFyYW1OYW1l
LCcsCisgICAgICAgICAgICAgICAgICAgICAgICAnY29uc3QgT3RoZXIxQ2xhc3MmIGZvbywnLAor
ICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbnN0IENvbXBsZXhUZW1wbGF0ZTxDbGFzczEsIE5l
c3RlZFRlbXBsYXRlPFAxLCBQMj4gPiogY29uc3QgKiBwYXJhbSA9IG5ldyBDb21wbGV4VGVtcGxh
dGU8Q2xhc3MxLCBOZXN0ZWRUZW1wbGF0ZTxQMSwgUDI+ID4oMzQsIDQyKSwnLAorICAgICAgICAg
ICAgICAgICAgICAgICAgJ2ludCogbXlDb3VudCA9IDApOyddCisgICAgICAgIHN0YXJ0X3Bvc2l0
aW9uID0gY3BwX3N0eWxlLlBvc2l0aW9uKHJvdz0wLCBjb2x1bW49OCkKKyAgICAgICAgZW5kX3Bv
c2l0aW9uID0gY3BwX3N0eWxlLlBvc2l0aW9uKHJvdz0zLCBjb2x1bW49MTYpCisKKyAgICAgICAg
ZXhwZWN0ZWRfcGFyYW1ldGVycyA9ICh7J3R5cGUnOiAnUGFzc1JlZlB0cjxNeUNsYXNzPicsICdu
YW1lJzogJ3BhcmFtTmFtZScsICdyb3cnOiAwfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7J3R5cGUnOiAnY29uc3QgT3RoZXIxQ2xhc3MmJywgJ25hbWUnOiAnZm9vJywgJ3Jvdyc6
IDF9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsndHlwZSc6ICdjb25zdCBDb21w
bGV4VGVtcGxhdGU8Q2xhc3MxLCBOZXN0ZWRUZW1wbGF0ZTxQMSwgUDI+ID4qIGNvbnN0IConLCAn
bmFtZSc6ICdwYXJhbScsICdyb3cnOiAyfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7J3R5cGUnOiAnaW50KicsICduYW1lJzogJ215Q291bnQnLCAncm93JzogM30pCisgICAgICAg
IGluZGV4ID0gMAorICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNwcF9zdHlsZS5wYXJhbWV0ZXJf
bGlzdChlbGlkZWRfbGluZXMsIHN0YXJ0X3Bvc2l0aW9uLCBlbmRfcG9zaXRpb24pOgorICAgICAg
ICAgICAgZXhwZWN0ZWRfcGFyYW1ldGVyID0gZXhwZWN0ZWRfcGFyYW1ldGVyc1tpbmRleF0KKyAg
ICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBhcmFtZXRlci50eXBlLCBleHBlY3RlZF9wYXJh
bWV0ZXJbJ3R5cGUnXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBhcmFtZXRlci5u
YW1lLCBleHBlY3RlZF9wYXJhbWV0ZXJbJ25hbWUnXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKHBhcmFtZXRlci5yb3csIGV4cGVjdGVkX3BhcmFtZXRlclsncm93J10pCisgICAgICAg
ICAgICBpbmRleCArPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGluZGV4LCBsZW4oZXhw
ZWN0ZWRfcGFyYW1ldGVycykpCisKIAogY2xhc3MgQ3BwU3R5bGVUZXN0QmFzZSh1bml0dGVzdC5U
ZXN0Q2FzZSk6CiAgICAgIiIiUHJvdmlkZXMgc29tZSB1c2VmdWwgaGVscGVyIGZ1bmN0aW9ucyBm
b3IgY3BwX3N0eWxlIHRlc3RzLgpAQCAtMjUwLDYgKzMzNywxNiBAQCBjbGFzcyBGdW5jdGlvbkRl
dGVjdGlvblRlc3QoQ3BwU3R5bGVUZXN0QmFzZSk6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxz
KGZ1bmN0aW9uX3N0YXRlLmJvZHlfc3RhcnRfbGluZV9udW1iZXIsIGZ1bmN0aW9uX2luZm9ybWF0
aW9uWydib2R5X3N0YXJ0X2xpbmVfbnVtYmVyJ10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxz
KGZ1bmN0aW9uX3N0YXRlLmVuZGluZ19saW5lX251bWJlciwgZnVuY3Rpb25faW5mb3JtYXRpb25b
J2VuZGluZ19saW5lX251bWJlciddKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhmdW5jdGlv
bl9zdGF0ZS5pc19kZWNsYXJhdGlvbiwgZnVuY3Rpb25faW5mb3JtYXRpb25bJ2lzX2RlY2xhcmF0
aW9uJ10pCisgICAgICAgIGV4cGVjdGVkX3BhcmFtZXRlcnMgPSBmdW5jdGlvbl9pbmZvcm1hdGlv
bi5nZXQoJ3BhcmFtZXRlcl9saXN0JykKKyAgICAgICAgaWYgZXhwZWN0ZWRfcGFyYW1ldGVyczoK
KyAgICAgICAgICAgIGFjdHVhbF9wYXJhbWV0ZXJzID0gZnVuY3Rpb25fc3RhdGUucGFyYW1ldGVy
X2xpc3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGFjdHVhbF9wYXJhbWV0
ZXJzKSwgbGVuKGV4cGVjdGVkX3BhcmFtZXRlcnMpKQorICAgICAgICAgICAgZm9yIGluZGV4IGlu
IHJhbmdlKGxlbihleHBlY3RlZF9wYXJhbWV0ZXJzKSk6CisgICAgICAgICAgICAgICAgYWN0dWFs
X3BhcmFtZXRlciA9IGFjdHVhbF9wYXJhbWV0ZXJzW2luZGV4XQorICAgICAgICAgICAgICAgIGV4
cGVjdGVkX3BhcmFtZXRlciA9IGV4cGVjdGVkX3BhcmFtZXRlcnNbaW5kZXhdCisgICAgICAgICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoYWN0dWFsX3BhcmFtZXRlci50eXBlLCBleHBlY3RlZF9w
YXJhbWV0ZXJbJ3R5cGUnXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhhY3R1
YWxfcGFyYW1ldGVyLm5hbWUsIGV4cGVjdGVkX3BhcmFtZXRlclsnbmFtZSddKQorICAgICAgICAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGFjdHVhbF9wYXJhbWV0ZXIucm93LCBleHBlY3RlZF9w
YXJhbWV0ZXJbJ3JvdyddKQogCiAgICAgZGVmIHRlc3RfYmFzaWNfZnVuY3Rpb25fZGV0ZWN0aW9u
KHNlbGYpOgogICAgICAgICBzZWxmLnBlcmZvcm1fZnVuY3Rpb25fZGV0ZWN0aW9uKApAQCAtMjY4
LDYgKzM2NSwzNyBAQCBjbGFzcyBGdW5jdGlvbkRldGVjdGlvblRlc3QoQ3BwU3R5bGVUZXN0QmFz
ZSk6CiAgICAgICAgICAgICAgJ2VuZGluZ19saW5lX251bWJlcic6IDAsCiAgICAgICAgICAgICAg
J2lzX2RlY2xhcmF0aW9uJzogVHJ1ZX0pCiAKKyAgICAgICAgc2VsZi5wZXJmb3JtX2Z1bmN0aW9u
X2RldGVjdGlvbigKKyAgICAgICAgICAgIFsnQ2hlY2tlZEludDxUPiBvcGVyYXRvciAvKGNvbnN0
IENoZWNrZWRJbnQ8VD4gJmxocywgY29uc3QgQ2hlY2tlZEludDxUPiAmcmhzKTsnXSwKKyAgICAg
ICAgICAgIHsnbmFtZSc6ICdvcGVyYXRvciAvJywKKyAgICAgICAgICAgICAnYm9keV9zdGFydF9s
aW5lX251bWJlcic6IDAsCisgICAgICAgICAgICAgJ2VuZGluZ19saW5lX251bWJlcic6IDAsCisg
ICAgICAgICAgICAgJ2lzX2RlY2xhcmF0aW9uJzogVHJ1ZX0pCisKKyAgICAgICAgc2VsZi5wZXJm
b3JtX2Z1bmN0aW9uX2RldGVjdGlvbigKKyAgICAgICAgICAgIFsnQ2hlY2tlZEludDxUPiBvcGVy
YXRvciAtKGNvbnN0IENoZWNrZWRJbnQ8VD4gJmxocywgY29uc3QgQ2hlY2tlZEludDxUPiAmcmhz
KTsnXSwKKyAgICAgICAgICAgIHsnbmFtZSc6ICdvcGVyYXRvciAtJywKKyAgICAgICAgICAgICAn
Ym9keV9zdGFydF9saW5lX251bWJlcic6IDAsCisgICAgICAgICAgICAgJ2VuZGluZ19saW5lX251
bWJlcic6IDAsCisgICAgICAgICAgICAnaXNfZGVjbGFyYXRpb24nOiBUcnVlfSkKKworICAgICAg
ICBzZWxmLnBlcmZvcm1fZnVuY3Rpb25fZGV0ZWN0aW9uKAorICAgICAgICAgICAgWydDaGVja2Vk
SW50PFQ+IG9wZXJhdG9yICE9KGNvbnN0IENoZWNrZWRJbnQ8VD4gJmxocywgY29uc3QgQ2hlY2tl
ZEludDxUPiAmcmhzKTsnXSwKKyAgICAgICAgICAgIHsnbmFtZSc6ICdvcGVyYXRvciAhPScsCisg
ICAgICAgICAgICAgJ2JvZHlfc3RhcnRfbGluZV9udW1iZXInOiAwLAorICAgICAgICAgICAgICdl
bmRpbmdfbGluZV9udW1iZXInOiAwLAorICAgICAgICAgICAgICdpc19kZWNsYXJhdGlvbic6IFRy
dWV9KQorCisgICAgICAgIHNlbGYucGVyZm9ybV9mdW5jdGlvbl9kZXRlY3Rpb24oCisgICAgICAg
ICAgICBbJ0NoZWNrZWRJbnQ8VD4gb3BlcmF0b3IgKyhjb25zdCBDaGVja2VkSW50PFQ+ICZsaHMs
IGNvbnN0IENoZWNrZWRJbnQ8VD4gJnJocyk7J10sCisgICAgICAgICAgICB7J25hbWUnOiAnb3Bl
cmF0b3IgKycsCisgICAgICAgICAgICAgJ2JvZHlfc3RhcnRfbGluZV9udW1iZXInOiAwLAorICAg
ICAgICAgICAgICdlbmRpbmdfbGluZV9udW1iZXInOiAwLAorICAgICAgICAgICAgICdpc19kZWNs
YXJhdGlvbic6IFRydWV9KQorCisgICAgZGVmIHRlc3RfaWdub3JlX21hY3JvcyhzZWxmKToKKyAg
ICAgICAgc2VsZi5wZXJmb3JtX2Z1bmN0aW9uX2RldGVjdGlvbihbJ3ZvaWQgYUZ1bmN0aW9uTmFt
ZShpbnQpOyBcXCddLCBOb25lKQorCiAgICAgZGVmIHRlc3Rfbm9uX2Z1bmN0aW9ucyhzZWxmKToK
ICAgICAgICAgIyBUaGlzIGNhc2UgZXhwb3NlZCBhbiBlcnJvciBiZWNhdXNlIHRoZSBvcGVuIGJy
YWNlIHdhcyBpbiBxdW90ZXMuCiAgICAgICAgIHNlbGYucGVyZm9ybV9mdW5jdGlvbl9kZXRlY3Rp
b24oCkBAIC0yODQsNiArNDEyLDcwIEBAIGNsYXNzIEZ1bmN0aW9uRGV0ZWN0aW9uVGVzdChDcHBT
dHlsZVRlc3RCYXNlKToKICAgICAgICAgIyBTaW1wbGUgdGVzdCBjYXNlIHdpdGggc29tZXRoaW5n
IHRoYXQgaXMgbm90IGEgZnVuY3Rpb24uCiAgICAgICAgIHNlbGYucGVyZm9ybV9mdW5jdGlvbl9k
ZXRlY3Rpb24oWydjbGFzcyBTdHVmZjsnXSwgTm9uZSkKIAorICAgIGRlZiB0ZXN0X3BhcmFtZXRl
cl9saXN0KHNlbGYpOgorICAgICAgICAjIEEgZnVuY3Rpb24gd2l0aCBubyBhcmd1bWVudHMuCisg
ICAgICAgIGZ1bmN0aW9uX3N0YXRlID0gc2VsZi5wZXJmb3JtX2Z1bmN0aW9uX2RldGVjdGlvbigK
KyAgICAgICAgICAgIFsndm9pZCBmdW5jdGlvbk5hbWUoKTsnXSwKKyAgICAgICAgICAgIHsnbmFt
ZSc6ICdmdW5jdGlvbk5hbWUnLAorICAgICAgICAgICAgICdib2R5X3N0YXJ0X2xpbmVfbnVtYmVy
JzogMCwKKyAgICAgICAgICAgICAnZW5kaW5nX2xpbmVfbnVtYmVyJzogMCwKKyAgICAgICAgICAg
ICAnaXNfZGVjbGFyYXRpb24nOiBUcnVlLAorICAgICAgICAgICAgICdwYXJhbWV0ZXJfbGlzdCc6
ICgpfSkKKworICAgICAgICAjIEEgZnVuY3Rpb24gd2l0aCBvbmUgYXJndW1lbnQuCisgICAgICAg
IGZ1bmN0aW9uX3N0YXRlID0gc2VsZi5wZXJmb3JtX2Z1bmN0aW9uX2RldGVjdGlvbigKKyAgICAg
ICAgICAgIFsndm9pZCBmdW5jdGlvbk5hbWUoaW50KTsnXSwKKyAgICAgICAgICAgIHsnbmFtZSc6
ICdmdW5jdGlvbk5hbWUnLAorICAgICAgICAgICAgICdib2R5X3N0YXJ0X2xpbmVfbnVtYmVyJzog
MCwKKyAgICAgICAgICAgICAnZW5kaW5nX2xpbmVfbnVtYmVyJzogMCwKKyAgICAgICAgICAgICAn
aXNfZGVjbGFyYXRpb24nOiBUcnVlLAorICAgICAgICAgICAgICdwYXJhbWV0ZXJfbGlzdCc6Cisg
ICAgICAgICAgICAgICAgICh7J3R5cGUnOiAnaW50JywgJ25hbWUnOiAnJywgJ3Jvdyc6IDB9LCl9
KQorCisgICAgICAgICMgQSBmdW5jdGlvbiB3aXRoIHVuc2lnbmVkIGFuZCBzaG9ydCBhcmd1bWVu
dHMKKyAgICAgICAgZnVuY3Rpb25fc3RhdGUgPSBzZWxmLnBlcmZvcm1fZnVuY3Rpb25fZGV0ZWN0
aW9uKAorICAgICAgICAgICAgWyd2b2lkIGZ1bmN0aW9uTmFtZSh1bnNpZ25lZCBhLCBzaG9ydCBi
LCBsb25nIGMsIGxvbmcgbG9uZyBzaG9ydCB1bnNpZ25lZCBpbnQpOyddLAorICAgICAgICAgICAg
eyduYW1lJzogJ2Z1bmN0aW9uTmFtZScsCisgICAgICAgICAgICAgJ2JvZHlfc3RhcnRfbGluZV9u
dW1iZXInOiAwLAorICAgICAgICAgICAgICdlbmRpbmdfbGluZV9udW1iZXInOiAwLAorICAgICAg
ICAgICAgICdpc19kZWNsYXJhdGlvbic6IFRydWUsCisgICAgICAgICAgICAgJ3BhcmFtZXRlcl9s
aXN0JzoKKyAgICAgICAgICAgICAgICAgKHsndHlwZSc6ICd1bnNpZ25lZCcsICduYW1lJzogJ2En
LCAncm93JzogMH0sCisgICAgICAgICAgICAgICAgICB7J3R5cGUnOiAnc2hvcnQnLCAnbmFtZSc6
ICdiJywgJ3Jvdyc6IDB9LAorICAgICAgICAgICAgICAgICAgeyd0eXBlJzogJ2xvbmcnLCAnbmFt
ZSc6ICdjJywgJ3Jvdyc6IDB9LAorICAgICAgICAgICAgICAgICAgeyd0eXBlJzogJ2xvbmcgbG9u
ZyBzaG9ydCB1bnNpZ25lZCBpbnQnLCAnbmFtZSc6ICcnLCAncm93JzogMH0pfSkKKworICAgICAg
ICAjIFNvbWUgcGFyYW1ldGVyIHR5cGUgd2l0aCBtb2RpZmllcnMgYW5kIG5vIHBhcmFtZXRlciBu
YW1lcy4KKyAgICAgICAgZnVuY3Rpb25fc3RhdGUgPSBzZWxmLnBlcmZvcm1fZnVuY3Rpb25fZGV0
ZWN0aW9uKAorICAgICAgICAgICAgWyd2aXJ0dWFsIHZvaWQgZGV0ZXJtaW5lQVJJQURyb3BFZmZl
Y3RzKFZlY3RvcjxTdHJpbmc+KiYsIGNvbnN0IHVuc2lnbmVkIGxvbmcgaW50KiYsIGNvbnN0IE1l
ZGlhUGxheWVyOjpQcmVsb2FkLCBPdGhlcjxPdGhlcjIsIE90aGVyMzxQMSwgUDI+ID4sIGludCk7
J10sCisgICAgICAgICAgICB7J25hbWUnOiAnZGV0ZXJtaW5lQVJJQURyb3BFZmZlY3RzJywKKyAg
ICAgICAgICAgICAnYm9keV9zdGFydF9saW5lX251bWJlcic6IDAsCisgICAgICAgICAgICAgJ2Vu
ZGluZ19saW5lX251bWJlcic6IDAsCisgICAgICAgICAgICAgJ2lzX2RlY2xhcmF0aW9uJzogVHJ1
ZSwKKyAgICAgICAgICAgICAncGFyYW1ldGVyX2xpc3QnOgorICAgICAgICAgICAgICAgICAoeyd0
eXBlJzogJ1ZlY3RvcjxTdHJpbmc+KiYnLCAnbmFtZSc6ICcnLCAncm93JzogMH0sCisgICAgICAg
ICAgICAgICAgICB7J3R5cGUnOiAnY29uc3QgdW5zaWduZWQgbG9uZyBpbnQqJicsICduYW1lJzog
JycsICdyb3cnOiAwfSwKKyAgICAgICAgICAgICAgICAgIHsndHlwZSc6ICdjb25zdCBNZWRpYVBs
YXllcjo6UHJlbG9hZCcsICduYW1lJzogJycsICdyb3cnOiAwfSwKKyAgICAgICAgICAgICAgICAg
IHsndHlwZSc6ICdPdGhlcjxPdGhlcjIsIE90aGVyMzxQMSwgUDI+ID4nLCAnbmFtZSc6ICcnLCAn
cm93JzogMH0sCisgICAgICAgICAgICAgICAgICB7J3R5cGUnOiAnaW50JywgJ25hbWUnOiAnJywg
J3Jvdyc6IDB9KX0pCisKKyAgICAgICAgIyBUcnkgcGFyc2luZyBhIGZ1bmN0aW9uIHdpdGggYSB2
ZXJ5IGNvbXBsZXggZGVmaW5pdGlvbi4KKyAgICAgICAgZnVuY3Rpb25fc3RhdGUgPSBzZWxmLnBl
cmZvcm1fZnVuY3Rpb25fZGV0ZWN0aW9uKAorICAgICAgICAgICAgWydBbm90aGVyVGVtcGxhdGU8
Q2xhc3MxLCBDbGFzczI+IGFGdW5jdGlvbk5hbWUoUGFzc1JlZlB0cjxNeUNsYXNzPiBwYXJhbU5h
bWUsJywKKyAgICAgICAgICAgICAnY29uc3QgT3RoZXIxQ2xhc3MmIGZvbywnLAorICAgICAgICAg
ICAgICdjb25zdCBDb21wbGV4VGVtcGxhdGU8Q2xhc3MxLCBOZXN0ZWRUZW1wbGF0ZTxQMSwgUDI+
ID4qIGNvbnN0ICogcGFyYW0gPSBuZXcgQ29tcGxleFRlbXBsYXRlPENsYXNzMSwgTmVzdGVkVGVt
cGxhdGU8UDEsIFAyPiA+KDM0LCA0MiksJywKKyAgICAgICAgICAgICAnaW50KiBteUNvdW50ID0g
MCk7J10sCisgICAgICAgICAgICB7J25hbWUnOiAnYUZ1bmN0aW9uTmFtZScsCisgICAgICAgICAg
ICAgJ2JvZHlfc3RhcnRfbGluZV9udW1iZXInOiAzLAorICAgICAgICAgICAgICdlbmRpbmdfbGlu
ZV9udW1iZXInOiAzLAorICAgICAgICAgICAgICdpc19kZWNsYXJhdGlvbic6IFRydWUsCisgICAg
ICAgICAgICAgJ3BhcmFtZXRlcl9saXN0JzoKKyAgICAgICAgICAgICAgICAgKHsndHlwZSc6ICdQ
YXNzUmVmUHRyPE15Q2xhc3M+JywgJ25hbWUnOiAncGFyYW1OYW1lJywgJ3Jvdyc6IDB9LAorICAg
ICAgICAgICAgICAgICAgeyd0eXBlJzogJ2NvbnN0IE90aGVyMUNsYXNzJicsICduYW1lJzogJ2Zv
bycsICdyb3cnOiAxfSwKKyAgICAgICAgICAgICAgICAgIHsndHlwZSc6ICdjb25zdCBDb21wbGV4
VGVtcGxhdGU8Q2xhc3MxLCBOZXN0ZWRUZW1wbGF0ZTxQMSwgUDI+ID4qIGNvbnN0IConLCAnbmFt
ZSc6ICdwYXJhbScsICdyb3cnOiAyfSwKKyAgICAgICAgICAgICAgICAgIHsndHlwZSc6ICdpbnQq
JywgJ25hbWUnOiAnbXlDb3VudCcsICdyb3cnOiAzfSl9KQorCisKIGNsYXNzIENwcFN0eWxlVGVz
dChDcHBTdHlsZVRlc3RCYXNlKToKIAogICAgICMgVGVzdCBnZXQgbGluZSB3aWR0aC4KQEAgLTI1
NDksMTQgKzI3NDEsMTIgQEAgY2xhc3MgQ2hlY2tGb3JGdW5jdGlvbkxlbmd0aHNUZXN0KENwcFN0
eWxlVGVzdEJhc2UpOgogICAgICAgICBlcnJvcl9sZXZlbCA9IDEKICAgICAgICAgZXJyb3JfbGlu
ZXMgPSBzZWxmLnRyaWdnZXJfdGVzdF9saW5lcyhlcnJvcl9sZXZlbCkgKyAxCiAgICAgICAgIHRy
aWdnZXJfbGV2ZWwgPSBzZWxmLnRyaWdnZXJfdGVzdF9saW5lcyhzZWxmLm1pbl9jb25maWRlbmNl
KQorICAgICAgICAjIFNpbmNlIHRoZSBmdW5jdGlvbiBuYW1lIGlzbid0IHZhbGlkLCB0aGUgZnVu
Y3Rpb24gZGV0ZWN0aW9uIGFsZ29yaXRobQorICAgICAgICAjIHdpbGwgc2tpcCBpdCwgc28gbm8g
ZXJyb3IgaXMgcHJvZHVjZWQuCiAgICAgICAgIHNlbGYuYXNzZXJ0X2Z1bmN0aW9uX2xlbmd0aHNf
Y2hlY2soCiAgICAgICAgICAgICAoJ1RFU1RfRignCiAgICAgICAgICAgICAgKyBzZWxmLmZ1bmN0
aW9uX2JvZHkoZXJyb3JfbGluZXMpKSwKLSAgICAgICAgICAgICgnU21hbGwgYW5kIGZvY3VzZWQg
ZnVuY3Rpb25zIGFyZSBwcmVmZXJyZWQ6ICcKLSAgICAgICAgICAgICAnVEVTVF9GIGhhcyAlZCBu
b24tY29tbWVudCBsaW5lcyAnCi0gICAgICAgICAgICAgJyhlcnJvciB0cmlnZ2VyZWQgYnkgZXhj
ZWVkaW5nICVkIGxpbmVzKS4nCi0gICAgICAgICAgICAgJyAgW3JlYWRhYmlsaXR5L2ZuX3NpemVd
IFslZF0nKQotICAgICAgICAgICAgJSAoZXJyb3JfbGluZXMsIHRyaWdnZXJfbGV2ZWwsIGVycm9y
X2xldmVsKSkKKyAgICAgICAgICAgICcnKQogCiAgICAgZGVmIHRlc3RfZnVuY3Rpb25fbGVuZ3Ro
X2NoZWNrX2RlZmluaXRpb25fc2V2ZXJpdHkxX3dpdGhfZW1iZWRkZWRfbm9fbGludHMoc2VsZik6
CiAgICAgICAgIGVycm9yX2xldmVsID0gMQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>