<?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>62251</bug_id>
          
          <creation_ts>2011-06-07 17:35:16 -0700</creation_ts>
          <short_desc>webkitpy: add integration tests for new-run-webkit-httpd, stop calling shut_down_http_server</short_desc>
          <delta_ts>2011-06-22 11:04:23 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>62828</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>62591</dependson>
          <blocked>59993</blocked>
    
    <blocked>62256</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Pranke">dpranke</reporter>
          <assigned_to name="Dirk Pranke">dpranke</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>416961</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-07 17:35:16 -0700</bug_when>
    <thetext>webkitpy: add integration tests for new-run-webkit-httpd, stop calling shut_down_http_server</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416964</commentid>
    <comment_count>1</comment_count>
      <attachid>96340</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-07 17:36:03 -0700</bug_when>
    <thetext>Created attachment 96340
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416984</commentid>
    <comment_count>2</comment_count>
      <attachid>96348</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-07 18:02:01 -0700</bug_when>
    <thetext>Created attachment 96348
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416985</commentid>
    <comment_count>3</comment_count>
      <attachid>96349</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-07 18:04:43 -0700</bug_when>
    <thetext>Created attachment 96349
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417010</commentid>
    <comment_count>4</comment_count>
      <attachid>96353</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-07 19:09:20 -0700</bug_when>
    <thetext>Created attachment 96353
ready for review, I think</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417315</commentid>
    <comment_count>5</comment_count>
      <attachid>96353</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-06-08 10:06:48 -0700</bug_when>
    <thetext>Comment on attachment 96353
ready for review, I think

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

&gt; Tools/Scripts/new-run-webkit-httpd:76
&gt; +            # FIXME: This isn&apos;t ideal, since it could conflict with        
&gt; +            # lighttpd processes not started by this script
&gt; +            port_obj._executive.kill_all(&apos;lighttpd&apos;)
&gt; +            port_obj._executive.kill_all(&apos;httpd&apos;)

What&apos;s the reason for using kill_all rather than the stop method here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417461</commentid>
    <comment_count>6</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-08 13:23:54 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 96353 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=96353&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/new-run-webkit-httpd:76
&gt; &gt; +            # FIXME: This isn&apos;t ideal, since it could conflict with        
&gt; &gt; +            # lighttpd processes not started by this script
&gt; &gt; +            port_obj._executive.kill_all(&apos;lighttpd&apos;)
&gt; &gt; +            port_obj._executive.kill_all(&apos;httpd&apos;)
&gt; 
&gt; What&apos;s the reason for using kill_all rather than the stop method here?

In this context, start() has not been called, and so stop has no pid that it can use to kill. The older version of the code would call kill_all ; I&apos;m just making this explicit since this was the only place that *was* calling kill_all, and it was forcing us to have a stupid hook into the port object.

A better fix would be for the script to be able to fetch the started pid from a pidfile and use that; that will come in a later patch once all of this stuff is cleaned up and consistent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417469</commentid>
    <comment_count>7</comment_count>
      <attachid>96353</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-06-08 13:38:23 -0700</bug_when>
    <thetext>Comment on attachment 96353
ready for review, I think

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

&gt;&gt;&gt; Tools/Scripts/new-run-webkit-httpd:76
&gt;&gt;&gt; +            port_obj._executive.kill_all(&apos;httpd&apos;)
&gt;&gt; 
&gt;&gt; What&apos;s the reason for using kill_all rather than the stop method here?
&gt; 
&gt; In this context, start() has not been called, and so stop has no pid that it can use to kill. The older version of the code would call kill_all ; I&apos;m just making this explicit since this was the only place that *was* calling kill_all, and it was forcing us to have a stupid hook into the port object.
&gt; 
&gt; A better fix would be for the script to be able to fetch the started pid from a pidfile and use that; that will come in a later patch once all of this stuff is cleaned up and consistent.

It looks like on Linux, the binary is called apache2.  Do we need to add that here?  Also, it looks like on Windows you need the .exe or it doesn&apos;t kill the process.  This new code doesn&apos;t seem like it&apos;ll work on all platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417477</commentid>
    <comment_count>8</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-08 13:44:20 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 96353 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=96353&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Tools/Scripts/new-run-webkit-httpd:76
&gt; &gt;&gt;&gt; +            port_obj._executive.kill_all(&apos;httpd&apos;)
&gt; &gt;&gt; 
&gt; &gt;&gt; What&apos;s the reason for using kill_all rather than the stop method here?
&gt; &gt; 
&gt; &gt; In this context, start() has not been called, and so stop has no pid that it can use to kill. The older version of the code would call kill_all ; I&apos;m just making this explicit since this was the only place that *was* calling kill_all, and it was forcing us to have a stupid hook into the port object.
&gt; &gt; 
&gt; &gt; A better fix would be for the script to be able to fetch the started pid from a pidfile and use that; that will come in a later patch once all of this stuff is cleaned up and consistent.
&gt; 
&gt; It looks like on Linux, the binary is called apache2.  Do we need to add that here?  Also, it looks like on Windows you need the .exe or it doesn&apos;t kill the process.  This new code doesn&apos;t seem like it&apos;ll work on all platforms.

OK, I&apos;ll clean that up ... not sure how I missed that :(.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417720</commentid>
    <comment_count>9</comment_count>
      <attachid>96519</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-08 17:54:39 -0700</bug_when>
    <thetext>Created attachment 96519
update w/ review feedback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417721</commentid>
    <comment_count>10</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-08 17:58:00 -0700</bug_when>
    <thetext>Revised patch uploaded.

Note that this whole area of code is so broken and inconsistent that it&apos;s hard to make interim patches actually look (or be) correct. The main reason I&apos;ve broken them up into several bugs is to try and make the reviewing process easier. I&apos;m planning to land them all in rapid succession, because I have much more faith that the end state is correct than I do that interim states are.

Note that this set of patches as a whole is a second attempt at the patch that was approved in bug 59977. There is still one patch remaining that I need to add that will actually clean up stray servers left over from previous runs, and if I land this series without that change, this fix will be no better than 59977 (although the actual code is cleaner in this set of patches, I think).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>418085</commentid>
    <comment_count>11</comment_count>
      <attachid>96519</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-06-09 10:21:34 -0700</bug_when>
    <thetext>Comment on attachment 96519
update w/ review feedback

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

&gt; Tools/Scripts/webkitpy/layout_tests/port/http_server_integrationtest.py:1
&gt; +# Copyright (C) 2010 Google Inc. All rights reserved.

2011

&gt; Tools/Scripts/webkitpy/layout_tests/port/http_server_integrationtest.py:44
&gt; +    HTTP_PORTS = [8000, 8080, 8443]

Nit: Use a tuple instead of a list.

&gt; Tools/Scripts/webkitpy/layout_tests/port/http_server_integrationtest.py:73
&gt; +    def integration_test_http_server__normal(self):
&gt; +        self.assert_servers_are_down(&apos;localhost&apos;, self.HTTP_PORTS)

Are these integration_tests only run when invoking the file directly?  Are they run on the bots?  Is anyone working on the FIXME in port_testcase.py to merge this into test-webkitpy?

&gt; Tools/Scripts/webkitpy/layout_tests/port/port_testcase.py:148
&gt; +    def integration_test_lighttpd_server__normal(self):

We only use lighttpd on Chromium Win.  It looks like we only skip the test on chromium mac.  Is that intended?  Maybe the lighttpd tests should just move into chromium_win_unittest.py.

&gt; Tools/Scripts/webkitpy/layout_tests/port/port_testcase.py:189
&gt; +    def integration_test_apache_server__fails(self):
&gt; +        port = self.make_port(options=mocktool.MockOptions(configuration=&apos;Release&apos;, use_apache=True))

Do the apache tests pass on chromium windows?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>418270</commentid>
    <comment_count>12</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-09 14:09:12 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 96519 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=96519&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/http_server_integrationtest.py:1
&gt; &gt; +# Copyright (C) 2010 Google Inc. All rights reserved.
&gt; 
&gt; 2011

Will do.

&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/http_server_integrationtest.py:44
&gt; &gt; +    HTTP_PORTS = [8000, 8080, 8443]
&gt; 
&gt; Nit: Use a tuple instead of a list.
&gt;

Ok.
 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/http_server_integrationtest.py:73
&gt; &gt; +    def integration_test_http_server__normal(self):
&gt; &gt; +        self.assert_servers_are_down(&apos;localhost&apos;, self.HTTP_PORTS)
&gt; 
&gt; Are these integration_tests only run when invoking the file directly?  Are they run on the bots?  Is anyone working on the FIXME in port_testcase.py to merge this into test-webkitpy?

Yes. No. Not yet. I suspect we need to reach some sort of agreement over what will be safe to run where.

Note that these tests won&apos;t actually pass, anyway, until the other patches land.

&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/port_testcase.py:148
&gt; &gt; +    def integration_test_lighttpd_server__normal(self):
&gt; 
&gt; We only use lighttpd on Chromium Win.  It looks like we only skip the test on chromium mac.  Is that intended?  Maybe the lighttpd tests should just move into chromium_win_unittest.py.

I need to re-run the tests and double check; I thought that the lighttpd tests actually ran successfully on all three platforms, which is why I did it this way. I don&apos;t recall why I stubbed them out here.

&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/port_testcase.py:189
&gt; &gt; +    def integration_test_apache_server__fails(self):
&gt; &gt; +        port = self.make_port(options=mocktool.MockOptions(configuration=&apos;Release&apos;, use_apache=True))
&gt; 
&gt; Do the apache tests pass on chromium windows?

No, which is why they&apos;re stubbed out there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>418279</commentid>
    <comment_count>13</comment_count>
      <attachid>96519</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-06-09 14:16:20 -0700</bug_when>
    <thetext>Comment on attachment 96519
update w/ review feedback

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

&gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/port_testcase.py:148
&gt;&gt;&gt; +    def integration_test_lighttpd_server__normal(self):
&gt;&gt; 
&gt;&gt; We only use lighttpd on Chromium Win.  It looks like we only skip the test on chromium mac.  Is that intended?  Maybe the lighttpd tests should just move into chromium_win_unittest.py.
&gt; 
&gt; I need to re-run the tests and double check; I thought that the lighttpd tests actually ran successfully on all three platforms, which is why I did it this way. I don&apos;t recall why I stubbed them out here.

I see.  It may be that all the linux/mac bots still have lighttpd installed, but we might not want to depend on that.  It&apos;s probably a bit safer to just move the tests into chromium_win_unittest.py.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>418392</commentid>
    <comment_count>14</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-09 16:54:19 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 96519 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=96519&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/port_testcase.py:148
&gt; &gt;&gt;&gt; +    def integration_test_lighttpd_server__normal(self):
&gt; &gt;&gt; 
&gt; &gt;&gt; We only use lighttpd on Chromium Win.  It looks like we only skip the test on chromium mac.  Is that intended?  Maybe the lighttpd tests should just move into chromium_win_unittest.py.
&gt; &gt; 
&gt; &gt; I need to re-run the tests and double check; I thought that the lighttpd tests actually ran successfully on all three platforms, which is why I did it this way. I don&apos;t recall why I stubbed them out here.
&gt; 
&gt; I see.  It may be that all the linux/mac bots still have lighttpd installed, but we might not want to depend on that.  It&apos;s probably a bit safer to just move the tests into chromium_win_unittest.py.

Okay, you confused me, I think, with the earlier comment. The chromium ports all have lighttpd installed into third_party, and these tests pass on all of the ports.

As long as lighttpd can run everywhere, I feel like it makes sense to test it on all the platforms to get the increased coverage.

On the other hand, it seems a little goofy that we have a command line flag (--use-apache) that doesn&apos;t actually work on the one platform it is meant for, and no command line flags to turn off apache and use lighttpd on the others. 

So, I&apos;d suggest that we land this patch as-is (with the nits fixed), and then add a separate patch that yanks the --use-apache flag and changes these test routines to just test whatever http server the port is configured for.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>418729</commentid>
    <comment_count>15</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-06-10 09:29:47 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; Okay, you confused me, I think, with the earlier comment. The chromium ports all have lighttpd installed into third_party, and these tests pass on all of the ports.

lighttpd isn&apos;t installed on Linux.  It used to be pulled in by install-build-deps.sh, but we removed that a long time ago too.  We should probably remove it from mac DEPS as well since it&apos;s not used there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419140</commentid>
    <comment_count>16</comment_count>
      <attachid>96839</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-10 20:38:02 -0700</bug_when>
    <thetext>Created attachment 96839
update w/ more review feedback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419143</commentid>
    <comment_count>17</comment_count>
      <attachid>96842</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-10 20:45:53 -0700</bug_when>
    <thetext>Created attachment 96842
fix naming in http_server_integrationtest.py</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419598</commentid>
    <comment_count>18</comment_count>
      <attachid>96842</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-06-13 09:36:17 -0700</bug_when>
    <thetext>Comment on attachment 96842
fix naming in http_server_integrationtest.py

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

&gt; Tools/Scripts/webkitpy/layout_tests/port/http_server_integrationtest.py:39
&gt; +import port_testcase

Nit: absolute import path?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419757</commentid>
    <comment_count>19</comment_count>
      <attachid>96987</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-13 12:12:03 -0700</bug_when>
    <thetext>Created attachment 96987
upload w/ tony&apos;s last bit of feedback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419765</commentid>
    <comment_count>20</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-13 12:16:07 -0700</bug_when>
    <thetext>Committed r88671: &lt;http://trac.webkit.org/changeset/88671&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420698</commentid>
    <comment_count>21</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-14 13:36:17 -0700</bug_when>
    <thetext>re-opening, I had to roll this out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>425381</commentid>
    <comment_count>22</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-22 11:04:23 -0700</bug_when>
    <thetext>finally fixed in bug 62829.

*** This bug has been marked as a duplicate of bug 62828 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96340</attachid>
            <date>2011-06-07 17:36:03 -0700</date>
            <delta_ts>2011-06-07 18:01:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62251-20110607173602.patch</filename>
            <type>text/plain</type>
            <size>11212</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODgyODgKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA3ZDYwMTQ4ZDA2OWM5MDQ2YjZjOTI4Y2NlNWFkOGRmYWM5
YTM5NGFlLi45MmUzZDIzYzk5MzIyZTZiYjk2OTdiMzAyNTZkNDliMmVhYWJiYTY4IDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTgg
QEAKIDIwMTEtMDYtMDcgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgd2Via2l0cHk6IGFk
ZCBpbnRlZ3JhdGlvbiB0ZXN0cyBmb3IgbmV3LXJ1bi13ZWJraXQtaHR0cGQsIHN0b3AgY2FsbGlu
ZyBzaHV0X2Rvd25faHR0cF9zZXJ2ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTYyMjUxCisKKyAgICAgICAgKiBTY3JpcHRzL25ldy1ydW4td2Via2l0
LWh0dHBkOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYXBh
Y2hlX2h0dHBfc2VydmVyLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvaHR0cF9zZXJ2ZXIucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlcl9pbnRlZ3JhdGlvbnRlc3QucHk6IEFkZGVkLgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Vic29ja2V0X3NlcnZl
ci5weToKKworMjAxMS0wNi0wNyAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNocm9taXVtLm9yZz4K
KwogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KIAogICAgICAgICB3ZWJraXRweTog
YWRkIGEgcG9wZW4oKSBjYWxsIHRvIGV4ZWN1dGl2ZQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy9uZXctcnVuLXdlYmtpdC1odHRwZCBiL1Rvb2xzL1NjcmlwdHMvbmV3LXJ1bi13ZWJraXQtaHR0
cGQKaW5kZXggNDEyMjk5M2M0NjY0Y2ZmNzc0MDVhNmQzYTM5ZDljOTFlYTVjYmQxNC4uZTU5ZmM3
ODY4ZTRjZTk3ODA0Yjk1NDQ2MWVlODM5ODQ5ZDE0MTUxMiAxMDA3NTUKLS0tIGEvVG9vbHMvU2Ny
aXB0cy9uZXctcnVuLXdlYmtpdC1odHRwZAorKysgYi9Ub29scy9TY3JpcHRzL25ldy1ydW4td2Vi
a2l0LWh0dHBkCkBAIC03MCw3ICs3MCwxMCBAQCBkZWYgcnVuKG9wdGlvbnMpOgogICAgICAgICBp
ZiBvcHRpb25zLnNlcnZlciA9PSAnc3RhcnQnOgogICAgICAgICAgICAgaHR0cGQuc3RhcnQoKQog
ICAgICAgICBlbHNlOgotICAgICAgICAgICAgaHR0cGQuc3RvcChmb3JjZT1UcnVlKQorICAgICAg
ICAgICAgIyBGSVhNRTogVGhpcyBpc24ndCBpZGVhbCwgc2luY2UgaXQgY291bGQgY29uZmxpY3Qg
d2l0aCAgICAgICAgCisgICAgICAgICAgICAjIGxpZ2h0dHBkIHByb2Nlc3NlcyBub3Qgc3RhcnRl
ZCBieSB0aGlzIHNjcmlwdAorICAgICAgICAgICAgcG9ydF9vYmouX2V4ZWN1dGl2ZS5raWxsX2Fs
bCgnbGlnaHR0cGQnKQorICAgICAgICAgICAgcG9ydF9vYmouX2V4ZWN1dGl2ZS5raWxsX2FsbCgn
aHR0cGQnKQogCiAKIGRlZiBtYWluKCk6CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2FwYWNoZV9odHRwX3NlcnZlci5weSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYXBhY2hlX2h0dHBfc2VydmVyLnB5CmluZGV4
IDA1YTIzMzgyNDUwZGVjZDgwYzQwMzQ1OTY0N2I1OGYxMjE1NDcwYjEuLjJjYzRhNWU4ZTllOGFh
NjRhYmM3NTVhMWNkMDI1ZTkyMmU1NTA3OTcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYXBhY2hlX2h0dHBfc2VydmVyLnB5CisrKyBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYXBhY2hlX2h0dHBfc2VydmVyLnB5
CkBAIC0yMjcsNyArMjI3LDkgQEAgY2xhc3MgTGF5b3V0VGVzdEFwYWNoZUh0dHBkKGh0dHBfc2Vy
dmVyX2Jhc2UuSHR0cFNlcnZlckJhc2UpOgogICAgICAgICAiIiJTdG9wcyB0aGUgYXBhY2hlIGh0
dHAgc2VydmVyLiIiIgogICAgICAgICBfbG9nLmRlYnVnKCJTaHV0dGluZyBkb3duIGFueSBydW5u
aW5nIGh0dHAgc2VydmVycyIpCiAgICAgICAgIGh0dHBkX3BpZCA9IE5vbmUKLSAgICAgICAgaWYg
b3MucGF0aC5leGlzdHMoc2VsZi5fcGlkX2ZpbGUpOgorICAgICAgICBpZiBzZWxmLl9odHRwZF9w
cm9jOgorICAgICAgICAgICAgaHR0cGRfcGlkID0gc2VsZi5faHR0cGRfcHJvYy5waWQKKyAgICAg
ICAgZWxpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLl9waWRfZmlsZSk6CiAgICAgICAgICAgICBodHRw
ZF9waWQgPSBpbnQob3BlbihzZWxmLl9waWRfZmlsZSkucmVhZGxpbmUoKSkKLSAgICAgICAgIyBG
SVhNRTogV2Ugc2hvdWxkbid0IGJlIGNhbGxpbmcgYSBwcm90ZWN0ZWQgbWV0aG9kIG9mIF9wb3J0
X29iaiEKLSAgICAgICAgc2VsZi5fcG9ydF9vYmouX3NodXRfZG93bl9odHRwX3NlcnZlcihodHRw
ZF9waWQpCisgICAgICAgIGlmIGh0dHBkX3BpZDoKKyAgICAgICAgICAgIHNlbGYuX3BvcnRfb2Jq
Ll9leGVjdXRpdmUua2lsbF9wcm9jZXNzKGh0dHBkX3BpZCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXIucHkgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVyLnB5CmluZGV4IGU1
MjVlZTBlNDkxMmZlMDk1MzhmN2NkZmRmM2ExYjYzNDgxMjQzMmQuLjE2YTg1Nzc1MzUxMWYxMGIy
MjAwN2QzOGFhN2UzNzY1YWY4NDBkYjkgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlci5weQpAQCAtMjI2LDE0ICsyMjYs
MTQgQEAgY2xhc3MgTGlnaHR0cGQoaHR0cF9zZXJ2ZXJfYmFzZS5IdHRwU2VydmVyQmFzZSk6CiAg
ICAgIyBUT0RPKGRlYW5tKTogRmluZCBhIG5pY2VyIHdheSB0byBzaHV0ZG93biBjbGVhbmx5LiAg
T3VyIGxvZyBmaWxlcyBhcmUKICAgICAjIHByb2JhYmx5IG5vdCBiZWluZyBmbHVzaGVkLCBldGMu
Li4gd2h5IGRvZXNuJ3Qgb3VyIHB5dGhvbiBoYXZlIG9zLmtpbGwgPwogCi0gICAgZGVmIHN0b3Ao
c2VsZiwgZm9yY2U9RmFsc2UpOgorICAgIGRlZiBzdG9wKHNlbGYpOgogICAgICAgICBpZiBub3Qg
Zm9yY2UgYW5kIG5vdCBzZWxmLmlzX3J1bm5pbmcoKToKICAgICAgICAgICAgIHJldHVybgogCiAg
ICAgICAgIGh0dHBkX3BpZCA9IE5vbmUKICAgICAgICAgaWYgc2VsZi5fcHJvY2VzczoKICAgICAg
ICAgICAgIGh0dHBkX3BpZCA9IHNlbGYuX3Byb2Nlc3MucGlkCi0gICAgICAgIHNlbGYuX3BvcnRf
b2JqLl9zaHV0X2Rvd25faHR0cF9zZXJ2ZXIoaHR0cGRfcGlkKQorICAgICAgICBzZWxmLl9wb3J0
X29iai5fZXhlY3V0aXZlLmtpbGxfcHJvY2VzcyhodHRwZF9waWQpCiAKICAgICAgICAgaWYgc2Vs
Zi5fcHJvY2VzczoKICAgICAgICAgICAgICMgd2FpdCgpIGlzIG5vdCB0aHJlYWRzYWZlIGFuZCBj
YW4gdGhyb3cgT1NFcnJvciBkdWUgdG86CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVyX2ludGVncmF0aW9udGVzdC5weSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXJfaW50ZWdy
YXRpb250ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRmZDE3YmExM2E1YjM4Y2E4ZjliNzEzYzJkOTA4ZDVm
YWQ5MDczOTIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVyX2ludGVncmF0aW9udGVzdC5weQpAQCAtMCwwICsxLDEy
OCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRp
b24uCisjICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisj
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
IyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIkludGVncmF0aW9uIHRlc3RpbmcgZm9yIHRoZSBuZXct
cnVuLXdlYmtpdC1odHRwZCBzY3JpcHQiIiIKKworaW1wb3J0IGVycm5vCitpbXBvcnQgb3MKK2lt
cG9ydCBzb2NrZXQKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCitpbXBvcnQgdGVtcGZp
bGUKK2ltcG9ydCB1bml0dGVzdAorCitpbXBvcnQgcG9ydF90ZXN0Y2FzZQorCisKK2NsYXNzIExp
Z2h0dHBkVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHRoYXQgYWxs
IFBvcnQgaW1wbGVtZW50YXRpb25zIG11c3QgcGFzcy4iIiIKKyAgICBIVFRQX1BPUlRTID0gWzgw
MDAsIDgwODAsIDg0NDNdCisKKyAgICBkZWYgYXNzZXJ0X3NlcnZlcnNfYXJlX2Rvd24oc2VsZiwg
aG9zdCwgcG9ydHMpOgorICAgICAgICBmb3IgcG9ydCBpbiBwb3J0czoKKyAgICAgICAgICAgIHRy
eToKKyAgICAgICAgICAgICAgICBzID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgICAgICAgICAg
cy5jb25uZWN0KChob3N0LCBwb3J0KSkKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoKQorICAg
ICAgICAgICAgZXhjZXB0IElPRXJyb3IsIGU6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRU
cnVlKGUuZXJybm8gaW4gKGVycm5vLkVDT05OUkVGVVNFRCwgZXJybm8uRUNPTk5SRVNFVCkpCisg
ICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHMuY2xvc2UoKQorCisgICAgZGVm
IGFzc2VydF9zZXJ2ZXJzX2FyZV91cChzZWxmLCBob3N0LCBwb3J0cyk6CisgICAgICAgIGZvciBw
b3J0IGluIHBvcnRzOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHMgPSBzb2Nr
ZXQuc29ja2V0KCkKKyAgICAgICAgICAgICAgICBzLmNvbm5lY3QoKGhvc3QsIHBvcnQpKQorICAg
ICAgICAgICAgZXhjZXB0IElPRXJyb3IsIGU6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdm
YWlsZWQgdG8gY29ubmVjdCB0byAlczolZCcgJSAoaG9zdCwgcG9ydCkpCisgICAgICAgICAgICBm
aW5hbGx5OgorICAgICAgICAgICAgICAgIHMuY2xvc2UoKQorCisgICAgZGVmIHJ1bl9zY3JpcHQo
c2VsZiwgYXJncyk6CisgICAgICAgIHNjcmlwdF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0
aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRo
KF9fZmlsZV9fKSkpKSkKKyAgICAgICAgc2NyaXB0X3BhdGggPSBvcy5wYXRoLmpvaW4oc2NyaXB0
X2RpciwgJ25ldy1ydW4td2Via2l0LWh0dHBkJykKKyAgICAgICAgcmV0dXJuIHN1YnByb2Nlc3Mu
Y2FsbChbc3lzLmV4ZWN1dGFibGUsIHNjcmlwdF9wYXRoXSArIGFyZ3MsIHN0ZG91dD1zdWJwcm9j
ZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisKKyAgICBkZWYgaW50ZWdyYXRpb25f
dGVzdF9odHRwX3NlcnZlcl9fbm9ybWFsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydF9zZXJ2
ZXJzX2FyZV9kb3duKCdsb2NhbGhvc3QnLCBzZWxmLkhUVFBfUE9SVFMpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWxzKHNlbGYucnVuX3NjcmlwdChbJy0tc2VydmVyJywgJ3N0YXJ0J10pLCAwKQor
ICAgICAgICBzZWxmLmFzc2VydF9zZXJ2ZXJzX2FyZV91cCgnbG9jYWxob3N0Jywgc2VsZi5IVFRQ
X1BPUlRTKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLnJ1bl9zY3JpcHQoWyctLXNl
cnZlcicsICdzdG9wJ10pLCAwKQorICAgICAgICBzZWxmLmFzc2VydF9zZXJ2ZXJzX2FyZV9kb3du
KCdsb2NhbGhvc3QnLCBzZWxmLkhUVFBfUE9SVFMpCisKKyAgICBkZWYgaW50ZWdyYXRpb25fdGVz
dF9odHRwX3NlcnZlcl9fZmFpbHMoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGlmIGEgcG9y
dCBpc24ndCBhdmFpbGFibGUsIHRoZSBjYWxsIGZhaWxzLgorICAgICAgICBpbXBvcnQgcGRiCisg
ICAgICAgIHBkYi5zZXRfdHJhY2UoKQorICAgICAgICBmb3IgcG9ydF9udW1iZXIgaW4gc2VsZi5I
VFRQX1BPUlRTOgorICAgICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICAgICAg
dHJ5OgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcy5iaW5kKCgn
bG9jYWxob3N0JywgcG9ydF9udW1iZXIpKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQu
ZXJyb3IsIGU6CisgICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gaW4gKGVycm5vLkVBRERS
SU5VU0UsIGVycm5vLkVBTFJFQURZKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFp
bCgnY291bGQgbm90IGJpbmQgdG8gcG9ydCAlZDogJXMnICUgKHBvcnRfbnVtYmVyLCBzdHIoZSkp
KQorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKHNlbGYucnVuX3NjcmlwdChbJy0tc2VydmVyJywgJ3N0YXJ0J10pLCAxKQorICAgICAg
ICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzZWxmLnJ1bl9zY3JpcHQoWyctLXNlcnZl
cicsICdzdG9wJ10pCisgICAgICAgICAgICAgICAgcy5jbG9zZSgpCisKKyAgICAgICAgIyBUZXN0
IHRoYXQgY2FsbGluZyBzdGFydCgpIHR3aWNlIGZhaWxzLgorICAgICAgICB0cnk6CisgICAgICAg
ICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLnJ1bl9zY3JpcHQoWyctLXNlcnZlcicsICdzdGFy
dCddKSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYucnVuX3NjcmlwdChb
Jy0tc2VydmVyJywgJ3N0YXJ0J10pLCAxKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAg
c2VsZi5ydW5fc2NyaXB0KFsnLS1zZXJ2ZXInLCAnc3RvcCddKQorCisgICAgICAgICMgVGVzdCB0
aGF0IGNhbGxpbmcgc3RvcCgpIHR3aWNlIGlzIGhhcm1sZXNzLgorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFscyhzZWxmLnJ1bl9zY3JpcHQoWyctLXNlcnZlcicsICdzdG9wJ10pLCAwKQorCisgICAg
ZGVmIG1heWJlX21ha2VfZGlyKHNlbGYsICpjb21wcyk6CisgICAgICAgIHRyeToKKyAgICAgICAg
ICAgIG9zLm1ha2VkaXJzKG9zLnBhdGguam9pbigqY29tcHMpKQorICAgICAgICBleGNlcHQgT1NF
cnJvciwgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUVYSVNUOgorICAgICAg
ICAgICAgICAgIHJhaXNlCisKKyAgICBkZWYgaW50ZWdyYXRpb25fdGVzdF9odHRwX3NlcnZlcl9w
b3J0X2FuZF9yb290KHNlbGYpOgorICAgICAgICB0bXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHBy
ZWZpeD0nd2Via2l0cHl0ZXN0JykKKyAgICAgICAgc2VsZi5tYXliZV9tYWtlX2Rpcih0bXBkaXIs
ICdodHRwJywgJ3Rlc3RzJykKKyAgICAgICAgc2VsZi5tYXliZV9tYWtlX2Rpcih0bXBkaXIsICdm
YXN0JywgJ2pzJywgJ3Jlc291cmNlcycpCisgICAgICAgIHNlbGYubWF5YmVfbWFrZV9kaXIodG1w
ZGlyLCAnbWVkaWEnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0X3NlcnZlcnNfYXJlX2Rvd24oJ2xv
Y2FsaG9zdCcsIFsxODAwMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYucnVuX3Nj
cmlwdChbJy0tc2VydmVyJywgJ3N0YXJ0JywgJy0tcG9ydD0xODAwMCcsICctLXJvb3QnLCB0bXBk
aXJdKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRfc2VydmVyc19hcmVfdXAoJ2xvY2FsaG9zdCcs
IFsxODAwMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYucnVuX3NjcmlwdChbJy0t
c2VydmVyJywgJ3N0b3AnXSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0X3NlcnZlcnNfYXJlX2Rv
d24oJ2xvY2FsaG9zdCcsIFsxODAwMF0pCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoK
KyAgICBwb3J0X3Rlc3RjYXNlLm1haW4oKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJzb2NrZXRfc2VydmVyLnB5IGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJzb2NrZXRfc2VydmVyLnB5CmluZGV4IGE1
OWNiMWZhZGI4Yzg3NzY3NWQwMjExNDMxMzFiNjgzNjE5ZTBlMmUuLmUzOGI2MjkzZjhkYTJmNzAy
YWIyZWY1YjQwNTliNmY5NmM3Y2JkNDMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Vic29ja2V0X3NlcnZlci5weQorKysgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYnNvY2tldF9zZXJ2ZXIucHkKQEAgLTIw
OSw5ICsyMDksNyBAQCBjbGFzcyBQeVdlYlNvY2tldChodHRwX3NlcnZlci5MaWdodHRwZCk6CiAg
ICAgICAgIHVybCA9IHVybCArICc6Ly8xMjcuMC4wLjE6JWQvJyAlIHNlbGYuX3BvcnQKICAgICAg
ICAgaWYgbm90IHVybF9pc19hbGl2ZSh1cmwpOgogICAgICAgICAgICAgaWYgc2VsZi5fcHJvY2Vz
cy5yZXR1cm5jb2RlID09IE5vbmU6Ci0gICAgICAgICAgICAgICAgIyBGSVhNRTogV2Ugc2hvdWxk
IHVzZSBhIG5vbi1zdGF0aWMgRXhlY3V0aXZlIGZvciBlYXNpZXIKLSAgICAgICAgICAgICAgICAj
IHRlc3RpbmcuCi0gICAgICAgICAgICAgICAgRXhlY3V0aXZlKCkua2lsbF9wcm9jZXNzKHNlbGYu
X3Byb2Nlc3MucGlkKQorICAgICAgICAgICAgICAgIHNlbGYuX3BvcnRfb2JqLl9leGVjdXRpdmUu
a2lsbF9wcm9jZXNzKHNlbGYuX3Byb2Nlc3MucGlkKQogICAgICAgICAgICAgd2l0aCBjb2RlY3Mu
b3BlbihvdXRwdXRfbG9nLCAiciIsICJ1dGYtOCIpIGFzIGZwOgogICAgICAgICAgICAgICAgIGZv
ciBsaW5lIGluIGZwOgogICAgICAgICAgICAgICAgICAgICBfbG9nLmVycm9yKGxpbmUpCkBAIC0y
MjcsOCArMjI1LDggQEAgY2xhc3MgUHlXZWJTb2NrZXQoaHR0cF9zZXJ2ZXIuTGlnaHR0cGQpOgog
ICAgICAgICAgICAgd2l0aCBjb2RlY3Mub3BlbihzZWxmLl9waWRmaWxlLCAidyIsICJhc2NpaSIp
IGFzIGZpbGU6CiAgICAgICAgICAgICAgICAgZmlsZS53cml0ZSgiJWQiICUgc2VsZi5fcHJvY2Vz
cy5waWQpCiAKLSAgICBkZWYgc3RvcChzZWxmLCBmb3JjZT1GYWxzZSk6Ci0gICAgICAgIGlmIG5v
dCBmb3JjZSBhbmQgbm90IHNlbGYuaXNfcnVubmluZygpOgorICAgIGRlZiBzdG9wKHNlbGYpOgor
ICAgICAgICBpZiBub3Qgc2VsZi5pc19ydW5uaW5nKCk6CiAgICAgICAgICAgICByZXR1cm4KIAog
ICAgICAgICBwaWQgPSBOb25lCkBAIC0yNDMsOCArMjQxLDcgQEAgY2xhc3MgUHlXZWJTb2NrZXQo
aHR0cF9zZXJ2ZXIuTGlnaHR0cGQpOgogICAgICAgICAgICAgICAgICdGYWlsZWQgdG8gZmluZCAl
cyBzZXJ2ZXIgcGlkLicgJSBzZWxmLl9zZXJ2ZXJfbmFtZSkKIAogICAgICAgICBfbG9nLmRlYnVn
KCdTaHV0dGluZyBkb3duICVzIHNlcnZlciAlZC4nICUgKHNlbGYuX3NlcnZlcl9uYW1lLCBwaWQp
KQotICAgICAgICAjIEZJWE1FOiBXZSBzaG91bGQgdXNlIGEgbm9uLXN0YXRpYyBFeGVjdXRpdmUg
Zm9yIGVhc2llciB0ZXN0aW5nLgotICAgICAgICBFeGVjdXRpdmUoKS5raWxsX3Byb2Nlc3MocGlk
KQorICAgICAgICBzZWxmLl9wb3J0X29iai5fZXhlY3V0aXZlLmtpbGxfcHJvY2VzcyhwaWQpCiAK
ICAgICAgICAgaWYgc2VsZi5fcHJvY2VzczoKICAgICAgICAgICAgICMgd2FpdCgpIGlzIG5vdCB0
aHJlYWRzYWZlIGFuZCBjYW4gdGhyb3cgT1NFcnJvciBkdWUgdG86Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96348</attachid>
            <date>2011-06-07 18:02:01 -0700</date>
            <delta_ts>2011-06-07 18:04:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62251-20110607180159.patch</filename>
            <type>text/plain</type>
            <size>15458</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODgyODgKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA3ZDYwMTQ4ZDA2OWM5MDQ2YjZjOTI4Y2NlNWFkOGRmYWM5
YTM5NGFlLi45MmUzZDIzYzk5MzIyZTZiYjk2OTdiMzAyNTZkNDliMmVhYWJiYTY4IDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTgg
QEAKIDIwMTEtMDYtMDcgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgd2Via2l0cHk6IGFk
ZCBpbnRlZ3JhdGlvbiB0ZXN0cyBmb3IgbmV3LXJ1bi13ZWJraXQtaHR0cGQsIHN0b3AgY2FsbGlu
ZyBzaHV0X2Rvd25faHR0cF9zZXJ2ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTYyMjUxCisKKyAgICAgICAgKiBTY3JpcHRzL25ldy1ydW4td2Via2l0
LWh0dHBkOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYXBh
Y2hlX2h0dHBfc2VydmVyLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvaHR0cF9zZXJ2ZXIucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlcl9pbnRlZ3JhdGlvbnRlc3QucHk6IEFkZGVkLgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Vic29ja2V0X3NlcnZl
ci5weToKKworMjAxMS0wNi0wNyAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNocm9taXVtLm9yZz4K
KwogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KIAogICAgICAgICB3ZWJraXRweTog
YWRkIGEgcG9wZW4oKSBjYWxsIHRvIGV4ZWN1dGl2ZQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy9uZXctcnVuLXdlYmtpdC1odHRwZCBiL1Rvb2xzL1NjcmlwdHMvbmV3LXJ1bi13ZWJraXQtaHR0
cGQKaW5kZXggNDEyMjk5M2M0NjY0Y2ZmNzc0MDVhNmQzYTM5ZDljOTFlYTVjYmQxNC4uZTU5ZmM3
ODY4ZTRjZTk3ODA0Yjk1NDQ2MWVlODM5ODQ5ZDE0MTUxMiAxMDA3NTUKLS0tIGEvVG9vbHMvU2Ny
aXB0cy9uZXctcnVuLXdlYmtpdC1odHRwZAorKysgYi9Ub29scy9TY3JpcHRzL25ldy1ydW4td2Vi
a2l0LWh0dHBkCkBAIC03MCw3ICs3MCwxMCBAQCBkZWYgcnVuKG9wdGlvbnMpOgogICAgICAgICBp
ZiBvcHRpb25zLnNlcnZlciA9PSAnc3RhcnQnOgogICAgICAgICAgICAgaHR0cGQuc3RhcnQoKQog
ICAgICAgICBlbHNlOgotICAgICAgICAgICAgaHR0cGQuc3RvcChmb3JjZT1UcnVlKQorICAgICAg
ICAgICAgIyBGSVhNRTogVGhpcyBpc24ndCBpZGVhbCwgc2luY2UgaXQgY291bGQgY29uZmxpY3Qg
d2l0aCAgICAgICAgCisgICAgICAgICAgICAjIGxpZ2h0dHBkIHByb2Nlc3NlcyBub3Qgc3RhcnRl
ZCBieSB0aGlzIHNjcmlwdAorICAgICAgICAgICAgcG9ydF9vYmouX2V4ZWN1dGl2ZS5raWxsX2Fs
bCgnbGlnaHR0cGQnKQorICAgICAgICAgICAgcG9ydF9vYmouX2V4ZWN1dGl2ZS5raWxsX2FsbCgn
aHR0cGQnKQogCiAKIGRlZiBtYWluKCk6CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2FwYWNoZV9odHRwX3NlcnZlci5weSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYXBhY2hlX2h0dHBfc2VydmVyLnB5CmluZGV4
IDA1YTIzMzgyNDUwZGVjZDgwYzQwMzQ1OTY0N2I1OGYxMjE1NDcwYjEuLjJjYzRhNWU4ZTllOGFh
NjRhYmM3NTVhMWNkMDI1ZTkyMmU1NTA3OTcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYXBhY2hlX2h0dHBfc2VydmVyLnB5CisrKyBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYXBhY2hlX2h0dHBfc2VydmVyLnB5
CkBAIC0yMjcsNyArMjI3LDkgQEAgY2xhc3MgTGF5b3V0VGVzdEFwYWNoZUh0dHBkKGh0dHBfc2Vy
dmVyX2Jhc2UuSHR0cFNlcnZlckJhc2UpOgogICAgICAgICAiIiJTdG9wcyB0aGUgYXBhY2hlIGh0
dHAgc2VydmVyLiIiIgogICAgICAgICBfbG9nLmRlYnVnKCJTaHV0dGluZyBkb3duIGFueSBydW5u
aW5nIGh0dHAgc2VydmVycyIpCiAgICAgICAgIGh0dHBkX3BpZCA9IE5vbmUKLSAgICAgICAgaWYg
b3MucGF0aC5leGlzdHMoc2VsZi5fcGlkX2ZpbGUpOgorICAgICAgICBpZiBzZWxmLl9odHRwZF9w
cm9jOgorICAgICAgICAgICAgaHR0cGRfcGlkID0gc2VsZi5faHR0cGRfcHJvYy5waWQKKyAgICAg
ICAgZWxpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLl9waWRfZmlsZSk6CiAgICAgICAgICAgICBodHRw
ZF9waWQgPSBpbnQob3BlbihzZWxmLl9waWRfZmlsZSkucmVhZGxpbmUoKSkKLSAgICAgICAgIyBG
SVhNRTogV2Ugc2hvdWxkbid0IGJlIGNhbGxpbmcgYSBwcm90ZWN0ZWQgbWV0aG9kIG9mIF9wb3J0
X29iaiEKLSAgICAgICAgc2VsZi5fcG9ydF9vYmouX3NodXRfZG93bl9odHRwX3NlcnZlcihodHRw
ZF9waWQpCisgICAgICAgIGlmIGh0dHBkX3BpZDoKKyAgICAgICAgICAgIHNlbGYuX3BvcnRfb2Jq
Ll9leGVjdXRpdmUua2lsbF9wcm9jZXNzKGh0dHBkX3BpZCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fd2luX3VuaXR0ZXN0LnB5
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV93aW5f
dW5pdHRlc3QucHkKaW5kZXggMTkzYzNlODM5ZWYyYTI5YTFjOTk0YWM2Njk3ZjhmNDFlYTA0N2Ey
OS4uN2RlNDg5ZWU0OWI0MmVlOGI1ZGJkMmQ0OWY1Mjk4MDJhNGIxZDA2ZCAxMDA2NDQKLS0tIGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV93aW5fdW5p
dHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9j
aHJvbWl1bV93aW5fdW5pdHRlc3QucHkKQEAgLTEzMCw2ICsxMzAsMTIgQEAgY2xhc3MgQ2hyb21p
dW1XaW5UZXN0KHBvcnRfdGVzdGNhc2UuUG9ydFRlc3RDYXNlKToKICAgICAgICAgcG9ydCA9IGNo
cm9taXVtX3dpbi5DaHJvbWl1bVdpblBvcnQocG9ydF9uYW1lPSdjaHJvbWl1bS13aW4td2luNycp
CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBvcnQuYmFzZWxpbmVfcGF0aCgpLCBwb3J0Ll93
ZWJraXRfYmFzZWxpbmVfcGF0aCgnY2hyb21pdW0td2luJykpCiAKKyAgICBkZWYgaW50ZWdyYXRp
b25fdGVzdF9hcGFjaGVfc2VydmVyX19mYWlscyhzZWxmKToKKyAgICAgICAgcGFzcworCisgICAg
ZGVmIGludGVncmF0aW9uX3Rlc3RfYXBhY2hlX3NlcnZlcl9fbm9ybWFsKHNlbGYpOgorICAgICAg
ICBwYXNzCisKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgpkaWZmIC0tZ2l0IGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlci5weSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXIucHkKaW5k
ZXggZTUyNWVlMGU0OTEyZmUwOTUzOGY3Y2RmZGYzYTFiNjM0ODEyNDMyZC4uMTZhODU3NzUzNTEx
ZjEwYjIyMDA3ZDM4YWE3ZTM3NjVhZjg0MGRiOSAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlci5weQorKysgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVyLnB5CkBAIC0yMjYsMTQg
KzIyNiwxNCBAQCBjbGFzcyBMaWdodHRwZChodHRwX3NlcnZlcl9iYXNlLkh0dHBTZXJ2ZXJCYXNl
KToKICAgICAjIFRPRE8oZGVhbm0pOiBGaW5kIGEgbmljZXIgd2F5IHRvIHNodXRkb3duIGNsZWFu
bHkuICBPdXIgbG9nIGZpbGVzIGFyZQogICAgICMgcHJvYmFibHkgbm90IGJlaW5nIGZsdXNoZWQs
IGV0Yy4uLiB3aHkgZG9lc24ndCBvdXIgcHl0aG9uIGhhdmUgb3Mua2lsbCA/CiAKLSAgICBkZWYg
c3RvcChzZWxmLCBmb3JjZT1GYWxzZSk6CisgICAgZGVmIHN0b3Aoc2VsZik6CiAgICAgICAgIGlm
IG5vdCBmb3JjZSBhbmQgbm90IHNlbGYuaXNfcnVubmluZygpOgogICAgICAgICAgICAgcmV0dXJu
CiAKICAgICAgICAgaHR0cGRfcGlkID0gTm9uZQogICAgICAgICBpZiBzZWxmLl9wcm9jZXNzOgog
ICAgICAgICAgICAgaHR0cGRfcGlkID0gc2VsZi5fcHJvY2Vzcy5waWQKLSAgICAgICAgc2VsZi5f
cG9ydF9vYmouX3NodXRfZG93bl9odHRwX3NlcnZlcihodHRwZF9waWQpCisgICAgICAgIHNlbGYu
X3BvcnRfb2JqLl9leGVjdXRpdmUua2lsbF9wcm9jZXNzKGh0dHBkX3BpZCkKIAogICAgICAgICBp
ZiBzZWxmLl9wcm9jZXNzOgogICAgICAgICAgICAgIyB3YWl0KCkgaXMgbm90IHRocmVhZHNhZmUg
YW5kIGNhbiB0aHJvdyBPU0Vycm9yIGR1ZSB0bzoKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXJfaW50ZWdyYXRpb250ZXN0LnB5
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlcl9p
bnRlZ3JhdGlvbnRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGZkMTdiYTEzYTViMzhjYThmOWI3MTNjMmQ5
MDhkNWZhZDkwNzM5MgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXJfaW50ZWdyYXRpb250ZXN0LnB5CkBAIC0wLDAg
KzEsMTI4IEBACisjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3Ry
aWJ1dGlvbi4KKyMgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiSW50ZWdyYXRpb24gdGVzdGluZyBmb3IgdGhl
IG5ldy1ydW4td2Via2l0LWh0dHBkIHNjcmlwdCIiIgorCitpbXBvcnQgZXJybm8KK2ltcG9ydCBv
cworaW1wb3J0IHNvY2tldAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0
ZW1wZmlsZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBwb3J0X3Rlc3RjYXNlCisKKworY2xh
c3MgTGlnaHR0cGRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgdGhh
dCBhbGwgUG9ydCBpbXBsZW1lbnRhdGlvbnMgbXVzdCBwYXNzLiIiIgorICAgIEhUVFBfUE9SVFMg
PSBbODAwMCwgODA4MCwgODQ0M10KKworICAgIGRlZiBhc3NlcnRfc2VydmVyc19hcmVfZG93bihz
ZWxmLCBob3N0LCBwb3J0cyk6CisgICAgICAgIGZvciBwb3J0IGluIHBvcnRzOgorICAgICAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgICAg
ICAgICBzLmNvbm5lY3QoKGhvc3QsIHBvcnQpKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgp
CisgICAgICAgICAgICBleGNlcHQgSU9FcnJvciwgZToKKyAgICAgICAgICAgICAgICBzZWxmLmFz
c2VydFRydWUoZS5lcnJubyBpbiAoZXJybm8uRUNPTk5SRUZVU0VELCBlcnJuby5FQ09OTlJFU0VU
KSkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgcy5jbG9zZSgpCisKKyAg
ICBkZWYgYXNzZXJ0X3NlcnZlcnNfYXJlX3VwKHNlbGYsIGhvc3QsIHBvcnRzKToKKyAgICAgICAg
Zm9yIHBvcnQgaW4gcG9ydHM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcyA9
IHNvY2tldC5zb2NrZXQoKQorICAgICAgICAgICAgICAgIHMuY29ubmVjdCgoaG9zdCwgcG9ydCkp
CisgICAgICAgICAgICBleGNlcHQgSU9FcnJvciwgZToKKyAgICAgICAgICAgICAgICBzZWxmLmZh
aWwoJ2ZhaWxlZCB0byBjb25uZWN0IHRvICVzOiVkJyAlIChob3N0LCBwb3J0KSkKKyAgICAgICAg
ICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgcy5jbG9zZSgpCisKKyAgICBkZWYgcnVuX3Nj
cmlwdChzZWxmLCBhcmdzKToKKyAgICAgICAgc2NyaXB0X2RpciA9IG9zLnBhdGguZGlybmFtZShv
cy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFi
c3BhdGgoX19maWxlX18pKSkpKQorICAgICAgICBzY3JpcHRfcGF0aCA9IG9zLnBhdGguam9pbihz
Y3JpcHRfZGlyLCAnbmV3LXJ1bi13ZWJraXQtaHR0cGQnKQorICAgICAgICByZXR1cm4gc3VicHJv
Y2Vzcy5jYWxsKFtzeXMuZXhlY3V0YWJsZSwgc2NyaXB0X3BhdGhdICsgYXJncywgc3Rkb3V0PXN1
YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKworICAgIGRlZiBpbnRlZ3Jh
dGlvbl90ZXN0X2h0dHBfc2VydmVyX19ub3JtYWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0
X3NlcnZlcnNfYXJlX2Rvd24oJ2xvY2FsaG9zdCcsIHNlbGYuSFRUUF9QT1JUUykKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5ydW5fc2NyaXB0KFsnLS1zZXJ2ZXInLCAnc3RhcnQnXSks
IDApCisgICAgICAgIHNlbGYuYXNzZXJ0X3NlcnZlcnNfYXJlX3VwKCdsb2NhbGhvc3QnLCBzZWxm
LkhUVFBfUE9SVFMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYucnVuX3NjcmlwdChb
Jy0tc2VydmVyJywgJ3N0b3AnXSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0X3NlcnZlcnNfYXJl
X2Rvd24oJ2xvY2FsaG9zdCcsIHNlbGYuSFRUUF9QT1JUUykKKworICAgIGRlZiBpbnRlZ3JhdGlv
bl90ZXN0X2h0dHBfc2VydmVyX19mYWlscyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgaWYg
YSBwb3J0IGlzbid0IGF2YWlsYWJsZSwgdGhlIGNhbGwgZmFpbHMuCisgICAgICAgIGltcG9ydCBw
ZGIKKyAgICAgICAgcGRiLnNldF90cmFjZSgpCisgICAgICAgIGZvciBwb3J0X251bWJlciBpbiBz
ZWxmLkhUVFBfUE9SVFM6CisgICAgICAgICAgICBzID0gc29ja2V0LnNvY2tldCgpCisgICAgICAg
ICAgICB0cnk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzLmJp
bmQoKCdsb2NhbGhvc3QnLCBwb3J0X251bWJlcikpCisgICAgICAgICAgICAgICAgZXhjZXB0IHNv
Y2tldC5lcnJvciwgZToKKyAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyBpbiAoZXJybm8u
RUFERFJJTlVTRSwgZXJybm8uRUFMUkVBRFkpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5mYWlsKCdjb3VsZCBub3QgYmluZCB0byBwb3J0ICVkOiAlcycgJSAocG9ydF9udW1iZXIsIHN0
cihlKSkpCisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbHMoc2VsZi5ydW5fc2NyaXB0KFsnLS1zZXJ2ZXInLCAnc3RhcnQnXSksIDEpCisg
ICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHNlbGYucnVuX3NjcmlwdChbJy0t
c2VydmVyJywgJ3N0b3AnXSkKKyAgICAgICAgICAgICAgICBzLmNsb3NlKCkKKworICAgICAgICAj
IFRlc3QgdGhhdCBjYWxsaW5nIHN0YXJ0KCkgdHdpY2UgZmFpbHMuCisgICAgICAgIHRyeToKKyAg
ICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYucnVuX3NjcmlwdChbJy0tc2VydmVyJywg
J3N0YXJ0J10pLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5ydW5fc2Ny
aXB0KFsnLS1zZXJ2ZXInLCAnc3RhcnQnXSksIDEpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAg
ICAgICBzZWxmLnJ1bl9zY3JpcHQoWyctLXNlcnZlcicsICdzdG9wJ10pCisKKyAgICAgICAgIyBU
ZXN0IHRoYXQgY2FsbGluZyBzdG9wKCkgdHdpY2UgaXMgaGFybWxlc3MuCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWxzKHNlbGYucnVuX3NjcmlwdChbJy0tc2VydmVyJywgJ3N0b3AnXSksIDApCisK
KyAgICBkZWYgbWF5YmVfbWFrZV9kaXIoc2VsZiwgKmNvbXBzKToKKyAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgb3MubWFrZWRpcnMob3MucGF0aC5qb2luKCpjb21wcykpCisgICAgICAgIGV4Y2Vw
dCBPU0Vycm9yLCBlOgorICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FRVhJU1Q6Cisg
ICAgICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiBpbnRlZ3JhdGlvbl90ZXN0X2h0dHBfc2Vy
dmVyX3BvcnRfYW5kX3Jvb3Qoc2VsZik6CisgICAgICAgIHRtcGRpciA9IHRlbXBmaWxlLm1rZHRl
bXAocHJlZml4PSd3ZWJraXRweXRlc3QnKQorICAgICAgICBzZWxmLm1heWJlX21ha2VfZGlyKHRt
cGRpciwgJ2h0dHAnLCAndGVzdHMnKQorICAgICAgICBzZWxmLm1heWJlX21ha2VfZGlyKHRtcGRp
ciwgJ2Zhc3QnLCAnanMnLCAncmVzb3VyY2VzJykKKyAgICAgICAgc2VsZi5tYXliZV9tYWtlX2Rp
cih0bXBkaXIsICdtZWRpYScpCisKKyAgICAgICAgc2VsZi5hc3NlcnRfc2VydmVyc19hcmVfZG93
bignbG9jYWxob3N0JywgWzE4MDAwXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5y
dW5fc2NyaXB0KFsnLS1zZXJ2ZXInLCAnc3RhcnQnLCAnLS1wb3J0PTE4MDAwJywgJy0tcm9vdCcs
IHRtcGRpcl0pLCAwKQorICAgICAgICBzZWxmLmFzc2VydF9zZXJ2ZXJzX2FyZV91cCgnbG9jYWxo
b3N0JywgWzE4MDAwXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5ydW5fc2NyaXB0
KFsnLS1zZXJ2ZXInLCAnc3RvcCddKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRfc2VydmVyc19h
cmVfZG93bignbG9jYWxob3N0JywgWzE4MDAwXSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWlu
X18nOgorICAgIHBvcnRfdGVzdGNhc2UubWFpbigpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21hY191bml0dGVzdC5weSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbWFjX3VuaXR0ZXN0LnB5CmluZGV4IGFlNTQ3
ZjJiOTZiODVmMTRhNmVmZDA2YWFjMWU5MTZiZWE2NzQ1Y2MuLjQyOWRhNGE5ZGIxYWIwZmY0Zjdi
Zjk1OTQyNjJhMDk0OWYwZjgxZDQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvbWFjX3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbWFjX3VuaXR0ZXN0LnB5CkBAIC0xMjksNiArMTI5LDEy
IEBAIHN2Zy9iYXRpay90ZXh0L3NtYWxsRm9udHMuc3ZnCiAKICAgICAgICAgc2VsZi5hc3NlcnRS
YWlzZXMoQXNzZXJ0aW9uRXJyb3IsIHNlbGYuYXNzZXJ0X25hbWUsIE5vbmUsICcxMC4zLjEnLCAn
c2hvdWxkLXJhaXNlLWFzc2VydGlvbi1zby10aGlzLXZhbHVlLWRvZXMtbm90LW1hdHRlcicpCiAK
KyAgICBkZWYgaW50ZWdyYXRpb25fdGVzdF9saWdodHRwZF9zZXJ2ZXJfX2ZhaWxzKHNlbGYpOgor
ICAgICAgICBwYXNzCisKKyAgICBkZWYgaW50ZWdyYXRpb25fdGVzdF9saWdodHRwZF9zZXJ2ZXJf
X25vcm1hbChzZWxmKToKKyAgICAgICAgcGFzcworCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5f
Xyc6CiAgICAgcG9ydF90ZXN0Y2FzZS5tYWluKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvcG9ydF90ZXN0Y2FzZS5weSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvcG9ydF90ZXN0Y2FzZS5weQppbmRleCBmNjE3
MzdkM2E2MTk0NDgzZTJiNTllMTE3MGU5ZGEyMWQzNmZiMmI4Li4wMjc3ZGVmMjM4MmExNTZhY2I5
OGI3MGVkNmQxZWZkNWNjYjQ0ZjllIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L3BvcnRfdGVzdGNhc2UucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9wb3J0X3Rlc3RjYXNlLnB5CkBAIC00OCw3ICs0OCw2
IEBAIG1vY2tfb3B0aW9ucyA9IG1vY2t0b29sLk1vY2tPcHRpb25zKGNvbmZpZ3VyYXRpb249J1Jl
bGVhc2UnKQogCiBjbGFzcyBQb3J0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICIi
IlRlc3RzIHRoYXQgYWxsIFBvcnQgaW1wbGVtZW50YXRpb25zIG11c3QgcGFzcy4iIiIKLQogICAg
IEhUVFBfUE9SVFMgPSBbODAwMCwgODA4MCwgODQ0M10KICAgICBXRUJTT0NLRVRfUE9SVFMgPSBb
ODg4MF0KIApAQCAtMTMzLDIyICsxMzIsMjYgQEAgY2xhc3MgUG9ydFRlc3RDYXNlKHVuaXR0ZXN0
LlRlc3RDYXNlKToKICAgICAgICAgcG9ydC5zdGFydF9oZWxwZXIoKQogICAgICAgICBwb3J0LnN0
b3BfaGVscGVyKCkKIAotICAgIGRlZiBpbnRlZ3JhdGlvbl90ZXN0X2h0dHBfc2VydmVyX19ub3Jt
YWwoc2VsZik6Ci0gICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydCgpCi0gICAgICAgIGlmIG5v
dCBwb3J0OgotICAgICAgICAgICAgcmV0dXJuCi0KKyAgICBkZWYgZG9fdGVzdF9odHRwX3NlcnZl
cl9fbm9ybWFsKHNlbGYsIHBvcnQpOgogICAgICAgICBzZWxmLmFzc2VydF9zZXJ2ZXJzX2FyZV9k
b3duKCdsb2NhbGhvc3QnLCBzZWxmLkhUVFBfUE9SVFMpCiAgICAgICAgIHBvcnQuc3RhcnRfaHR0
cF9zZXJ2ZXIoKQogICAgICAgICBzZWxmLmFzc2VydF9zZXJ2ZXJzX2FyZV91cCgnbG9jYWxob3N0
Jywgc2VsZi5IVFRQX1BPUlRTKQogICAgICAgICBwb3J0LnN0b3BfaHR0cF9zZXJ2ZXIoKQogICAg
ICAgICBzZWxmLmFzc2VydF9zZXJ2ZXJzX2FyZV9kb3duKCdsb2NhbGhvc3QnLCBzZWxmLkhUVFBf
UE9SVFMpCiAKLSAgICBkZWYgaW50ZWdyYXRpb25fdGVzdF9odHRwX3NlcnZlcl9fZmFpbHMoc2Vs
Zik6Ci0gICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydCgpCisgICAgZGVmIGludGVncmF0aW9u
X3Rlc3RfYXBhY2hlX3NlcnZlcl9fbm9ybWFsKHNlbGYpOgorICAgICAgICBwb3J0ID0gc2VsZi5t
YWtlX3BvcnQob3B0aW9ucz1tb2NrdG9vbC5Nb2NrT3B0aW9ucyhjb25maWd1cmF0aW9uPSdSZWxl
YXNlJywgdXNlX2FwYWNoZT1UcnVlKSkKICAgICAgICAgaWYgbm90IHBvcnQ6CiAgICAgICAgICAg
ICByZXR1cm4KKyAgICAgICAgc2VsZi5kb190ZXN0X2h0dHBfc2VydmVyX19ub3JtYWwocG9ydCkK
IAorICAgIGRlZiBpbnRlZ3JhdGlvbl90ZXN0X2xpZ2h0dHBkX3NlcnZlcl9fbm9ybWFsKHNlbGYp
OgorICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQob3B0aW9ucz1tb2NrdG9vbC5Nb2NrT3B0
aW9ucyhjb25maWd1cmF0aW9uPSdSZWxlYXNlJywgdXNlX2FwYWNoZT1GYWxzZSkpCisgICAgICAg
IGlmIG5vdCBwb3J0OgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuZG9fdGVzdF9o
dHRwX3NlcnZlcl9fbm9ybWFsKHBvcnQpCisKKyAgICBkZWYgZG9fdGVzdF9odHRwX3NlcnZlcl9f
ZmFpbHMoc2VsZiwgcG9ydCk6CiAgICAgICAgICMgVGVzdCB0aGF0IGlmIGEgcG9ydCBpc24ndCBh
dmFpbGFibGUsIHRoZSBjYWxsIGZhaWxzLgogICAgICAgICBmb3IgcG9ydF9udW1iZXIgaW4gc2Vs
Zi5IVFRQX1BPUlRTOgogICAgICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoKQpAQCAtMTgyLDYg
KzE4NSwxOCBAQCBjbGFzcyBQb3J0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAg
ICAjIFRlc3QgdGhhdCBjYWxsaW5nIHN0b3AoKSB0d2ljZSBpcyBoYXJtbGVzcy4KICAgICAgICAg
cG9ydC5zdG9wX2h0dHBfc2VydmVyKCkKIAorICAgIGRlZiBpbnRlZ3JhdGlvbl90ZXN0X2FwYWNo
ZV9zZXJ2ZXJfX2ZhaWxzKHNlbGYpOgorICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQob3B0
aW9ucz1tb2NrdG9vbC5Nb2NrT3B0aW9ucyhjb25maWd1cmF0aW9uPSdSZWxlYXNlJywgdXNlX2Fw
YWNoZT1UcnVlKSkKKyAgICAgICAgaWYgbm90IHBvcnQ6CisgICAgICAgICAgICByZXR1cm4KKyAg
ICAgICAgc2VsZi5kb190ZXN0X2h0dHBfc2VydmVyX19mYWlscyhwb3J0KQorCisgICAgZGVmIGlu
dGVncmF0aW9uX3Rlc3RfbGlnaHR0cGRfc2VydmVyX19mYWlscyhzZWxmKToKKyAgICAgICAgcG9y
dCA9IHNlbGYubWFrZV9wb3J0KG9wdGlvbnM9bW9ja3Rvb2wuTW9ja09wdGlvbnMoY29uZmlndXJh
dGlvbj0nUmVsZWFzZScsIHVzZV9hcGFjaGU9RmFsc2UpKQorICAgICAgICBpZiBub3QgcG9ydDoK
KyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLmRvX3Rlc3RfaHR0cF9zZXJ2ZXJfX2Zh
aWxzKHBvcnQpCisKICAgICBkZWYgaW50ZWdyYXRpb25fdGVzdF9pbWFnZV9kaWZmKHNlbGYpOgog
ICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQogICAgICAgICBpZiBub3QgcG9ydDoKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Vic29j
a2V0X3NlcnZlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
d2Vic29ja2V0X3NlcnZlci5weQppbmRleCBhNTljYjFmYWRiOGM4Nzc2NzVkMDIxMTQzMTMxYjY4
MzYxOWUwZTJlLi5lMzhiNjI5M2Y4ZGEyZjcwMmFiMmVmNWI0MDU5YjZmOTZjN2NiZDQzIDEwMDY0
NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYnNvY2tl
dF9zZXJ2ZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9y
dC93ZWJzb2NrZXRfc2VydmVyLnB5CkBAIC0yMDksOSArMjA5LDcgQEAgY2xhc3MgUHlXZWJTb2Nr
ZXQoaHR0cF9zZXJ2ZXIuTGlnaHR0cGQpOgogICAgICAgICB1cmwgPSB1cmwgKyAnOi8vMTI3LjAu
MC4xOiVkLycgJSBzZWxmLl9wb3J0CiAgICAgICAgIGlmIG5vdCB1cmxfaXNfYWxpdmUodXJsKToK
ICAgICAgICAgICAgIGlmIHNlbGYuX3Byb2Nlc3MucmV0dXJuY29kZSA9PSBOb25lOgotICAgICAg
ICAgICAgICAgICMgRklYTUU6IFdlIHNob3VsZCB1c2UgYSBub24tc3RhdGljIEV4ZWN1dGl2ZSBm
b3IgZWFzaWVyCi0gICAgICAgICAgICAgICAgIyB0ZXN0aW5nLgotICAgICAgICAgICAgICAgIEV4
ZWN1dGl2ZSgpLmtpbGxfcHJvY2VzcyhzZWxmLl9wcm9jZXNzLnBpZCkKKyAgICAgICAgICAgICAg
ICBzZWxmLl9wb3J0X29iai5fZXhlY3V0aXZlLmtpbGxfcHJvY2VzcyhzZWxmLl9wcm9jZXNzLnBp
ZCkKICAgICAgICAgICAgIHdpdGggY29kZWNzLm9wZW4ob3V0cHV0X2xvZywgInIiLCAidXRmLTgi
KSBhcyBmcDoKICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmcDoKICAgICAgICAgICAgICAg
ICAgICAgX2xvZy5lcnJvcihsaW5lKQpAQCAtMjI3LDggKzIyNSw4IEBAIGNsYXNzIFB5V2ViU29j
a2V0KGh0dHBfc2VydmVyLkxpZ2h0dHBkKToKICAgICAgICAgICAgIHdpdGggY29kZWNzLm9wZW4o
c2VsZi5fcGlkZmlsZSwgInciLCAiYXNjaWkiKSBhcyBmaWxlOgogICAgICAgICAgICAgICAgIGZp
bGUud3JpdGUoIiVkIiAlIHNlbGYuX3Byb2Nlc3MucGlkKQogCi0gICAgZGVmIHN0b3Aoc2VsZiwg
Zm9yY2U9RmFsc2UpOgotICAgICAgICBpZiBub3QgZm9yY2UgYW5kIG5vdCBzZWxmLmlzX3J1bm5p
bmcoKToKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuaXNfcnVubmlu
ZygpOgogICAgICAgICAgICAgcmV0dXJuCiAKICAgICAgICAgcGlkID0gTm9uZQpAQCAtMjQzLDgg
KzI0MSw3IEBAIGNsYXNzIFB5V2ViU29ja2V0KGh0dHBfc2VydmVyLkxpZ2h0dHBkKToKICAgICAg
ICAgICAgICAgICAnRmFpbGVkIHRvIGZpbmQgJXMgc2VydmVyIHBpZC4nICUgc2VsZi5fc2VydmVy
X25hbWUpCiAKICAgICAgICAgX2xvZy5kZWJ1ZygnU2h1dHRpbmcgZG93biAlcyBzZXJ2ZXIgJWQu
JyAlIChzZWxmLl9zZXJ2ZXJfbmFtZSwgcGlkKSkKLSAgICAgICAgIyBGSVhNRTogV2Ugc2hvdWxk
IHVzZSBhIG5vbi1zdGF0aWMgRXhlY3V0aXZlIGZvciBlYXNpZXIgdGVzdGluZy4KLSAgICAgICAg
RXhlY3V0aXZlKCkua2lsbF9wcm9jZXNzKHBpZCkKKyAgICAgICAgc2VsZi5fcG9ydF9vYmouX2V4
ZWN1dGl2ZS5raWxsX3Byb2Nlc3MocGlkKQogCiAgICAgICAgIGlmIHNlbGYuX3Byb2Nlc3M6CiAg
ICAgICAgICAgICAjIHdhaXQoKSBpcyBub3QgdGhyZWFkc2FmZSBhbmQgY2FuIHRocm93IE9TRXJy
b3IgZHVlIHRvOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96349</attachid>
            <date>2011-06-07 18:04:43 -0700</date>
            <delta_ts>2011-06-07 19:09:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62251-20110607180441.patch</filename>
            <type>text/plain</type>
            <size>15413</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODgyODgKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA3ZDYwMTQ4ZDA2OWM5MDQ2YjZjOTI4Y2NlNWFkOGRmYWM5
YTM5NGFlLi45MmUzZDIzYzk5MzIyZTZiYjk2OTdiMzAyNTZkNDliMmVhYWJiYTY4IDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTgg
QEAKIDIwMTEtMDYtMDcgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgd2Via2l0cHk6IGFk
ZCBpbnRlZ3JhdGlvbiB0ZXN0cyBmb3IgbmV3LXJ1bi13ZWJraXQtaHR0cGQsIHN0b3AgY2FsbGlu
ZyBzaHV0X2Rvd25faHR0cF9zZXJ2ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTYyMjUxCisKKyAgICAgICAgKiBTY3JpcHRzL25ldy1ydW4td2Via2l0
LWh0dHBkOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYXBh
Y2hlX2h0dHBfc2VydmVyLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvaHR0cF9zZXJ2ZXIucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlcl9pbnRlZ3JhdGlvbnRlc3QucHk6IEFkZGVkLgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Vic29ja2V0X3NlcnZl
ci5weToKKworMjAxMS0wNi0wNyAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNocm9taXVtLm9yZz4K
KwogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KIAogICAgICAgICB3ZWJraXRweTog
YWRkIGEgcG9wZW4oKSBjYWxsIHRvIGV4ZWN1dGl2ZQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy9uZXctcnVuLXdlYmtpdC1odHRwZCBiL1Rvb2xzL1NjcmlwdHMvbmV3LXJ1bi13ZWJraXQtaHR0
cGQKaW5kZXggNDEyMjk5M2M0NjY0Y2ZmNzc0MDVhNmQzYTM5ZDljOTFlYTVjYmQxNC4uZTU5ZmM3
ODY4ZTRjZTk3ODA0Yjk1NDQ2MWVlODM5ODQ5ZDE0MTUxMiAxMDA3NTUKLS0tIGEvVG9vbHMvU2Ny
aXB0cy9uZXctcnVuLXdlYmtpdC1odHRwZAorKysgYi9Ub29scy9TY3JpcHRzL25ldy1ydW4td2Vi
a2l0LWh0dHBkCkBAIC03MCw3ICs3MCwxMCBAQCBkZWYgcnVuKG9wdGlvbnMpOgogICAgICAgICBp
ZiBvcHRpb25zLnNlcnZlciA9PSAnc3RhcnQnOgogICAgICAgICAgICAgaHR0cGQuc3RhcnQoKQog
ICAgICAgICBlbHNlOgotICAgICAgICAgICAgaHR0cGQuc3RvcChmb3JjZT1UcnVlKQorICAgICAg
ICAgICAgIyBGSVhNRTogVGhpcyBpc24ndCBpZGVhbCwgc2luY2UgaXQgY291bGQgY29uZmxpY3Qg
d2l0aCAgICAgICAgCisgICAgICAgICAgICAjIGxpZ2h0dHBkIHByb2Nlc3NlcyBub3Qgc3RhcnRl
ZCBieSB0aGlzIHNjcmlwdAorICAgICAgICAgICAgcG9ydF9vYmouX2V4ZWN1dGl2ZS5raWxsX2Fs
bCgnbGlnaHR0cGQnKQorICAgICAgICAgICAgcG9ydF9vYmouX2V4ZWN1dGl2ZS5raWxsX2FsbCgn
aHR0cGQnKQogCiAKIGRlZiBtYWluKCk6CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2FwYWNoZV9odHRwX3NlcnZlci5weSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYXBhY2hlX2h0dHBfc2VydmVyLnB5CmluZGV4
IDA1YTIzMzgyNDUwZGVjZDgwYzQwMzQ1OTY0N2I1OGYxMjE1NDcwYjEuLjJjYzRhNWU4ZTllOGFh
NjRhYmM3NTVhMWNkMDI1ZTkyMmU1NTA3OTcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYXBhY2hlX2h0dHBfc2VydmVyLnB5CisrKyBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYXBhY2hlX2h0dHBfc2VydmVyLnB5
CkBAIC0yMjcsNyArMjI3LDkgQEAgY2xhc3MgTGF5b3V0VGVzdEFwYWNoZUh0dHBkKGh0dHBfc2Vy
dmVyX2Jhc2UuSHR0cFNlcnZlckJhc2UpOgogICAgICAgICAiIiJTdG9wcyB0aGUgYXBhY2hlIGh0
dHAgc2VydmVyLiIiIgogICAgICAgICBfbG9nLmRlYnVnKCJTaHV0dGluZyBkb3duIGFueSBydW5u
aW5nIGh0dHAgc2VydmVycyIpCiAgICAgICAgIGh0dHBkX3BpZCA9IE5vbmUKLSAgICAgICAgaWYg
b3MucGF0aC5leGlzdHMoc2VsZi5fcGlkX2ZpbGUpOgorICAgICAgICBpZiBzZWxmLl9odHRwZF9w
cm9jOgorICAgICAgICAgICAgaHR0cGRfcGlkID0gc2VsZi5faHR0cGRfcHJvYy5waWQKKyAgICAg
ICAgZWxpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLl9waWRfZmlsZSk6CiAgICAgICAgICAgICBodHRw
ZF9waWQgPSBpbnQob3BlbihzZWxmLl9waWRfZmlsZSkucmVhZGxpbmUoKSkKLSAgICAgICAgIyBG
SVhNRTogV2Ugc2hvdWxkbid0IGJlIGNhbGxpbmcgYSBwcm90ZWN0ZWQgbWV0aG9kIG9mIF9wb3J0
X29iaiEKLSAgICAgICAgc2VsZi5fcG9ydF9vYmouX3NodXRfZG93bl9odHRwX3NlcnZlcihodHRw
ZF9waWQpCisgICAgICAgIGlmIGh0dHBkX3BpZDoKKyAgICAgICAgICAgIHNlbGYuX3BvcnRfb2Jq
Ll9leGVjdXRpdmUua2lsbF9wcm9jZXNzKGh0dHBkX3BpZCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fd2luX3VuaXR0ZXN0LnB5
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV93aW5f
dW5pdHRlc3QucHkKaW5kZXggMTkzYzNlODM5ZWYyYTI5YTFjOTk0YWM2Njk3ZjhmNDFlYTA0N2Ey
OS4uN2RlNDg5ZWU0OWI0MmVlOGI1ZGJkMmQ0OWY1Mjk4MDJhNGIxZDA2ZCAxMDA2NDQKLS0tIGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV93aW5fdW5p
dHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9j
aHJvbWl1bV93aW5fdW5pdHRlc3QucHkKQEAgLTEzMCw2ICsxMzAsMTIgQEAgY2xhc3MgQ2hyb21p
dW1XaW5UZXN0KHBvcnRfdGVzdGNhc2UuUG9ydFRlc3RDYXNlKToKICAgICAgICAgcG9ydCA9IGNo
cm9taXVtX3dpbi5DaHJvbWl1bVdpblBvcnQocG9ydF9uYW1lPSdjaHJvbWl1bS13aW4td2luNycp
CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHBvcnQuYmFzZWxpbmVfcGF0aCgpLCBwb3J0Ll93
ZWJraXRfYmFzZWxpbmVfcGF0aCgnY2hyb21pdW0td2luJykpCiAKKyAgICBkZWYgaW50ZWdyYXRp
b25fdGVzdF9hcGFjaGVfc2VydmVyX19mYWlscyhzZWxmKToKKyAgICAgICAgcGFzcworCisgICAg
ZGVmIGludGVncmF0aW9uX3Rlc3RfYXBhY2hlX3NlcnZlcl9fbm9ybWFsKHNlbGYpOgorICAgICAg
ICBwYXNzCisKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgpkaWZmIC0tZ2l0IGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlci5weSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXIucHkKaW5k
ZXggZTUyNWVlMGU0OTEyZmUwOTUzOGY3Y2RmZGYzYTFiNjM0ODEyNDMyZC4uMTZhODU3NzUzNTEx
ZjEwYjIyMDA3ZDM4YWE3ZTM3NjVhZjg0MGRiOSAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlci5weQorKysgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVyLnB5CkBAIC0yMjYsMTQg
KzIyNiwxNCBAQCBjbGFzcyBMaWdodHRwZChodHRwX3NlcnZlcl9iYXNlLkh0dHBTZXJ2ZXJCYXNl
KToKICAgICAjIFRPRE8oZGVhbm0pOiBGaW5kIGEgbmljZXIgd2F5IHRvIHNodXRkb3duIGNsZWFu
bHkuICBPdXIgbG9nIGZpbGVzIGFyZQogICAgICMgcHJvYmFibHkgbm90IGJlaW5nIGZsdXNoZWQs
IGV0Yy4uLiB3aHkgZG9lc24ndCBvdXIgcHl0aG9uIGhhdmUgb3Mua2lsbCA/CiAKLSAgICBkZWYg
c3RvcChzZWxmLCBmb3JjZT1GYWxzZSk6CisgICAgZGVmIHN0b3Aoc2VsZik6CiAgICAgICAgIGlm
IG5vdCBmb3JjZSBhbmQgbm90IHNlbGYuaXNfcnVubmluZygpOgogICAgICAgICAgICAgcmV0dXJu
CiAKICAgICAgICAgaHR0cGRfcGlkID0gTm9uZQogICAgICAgICBpZiBzZWxmLl9wcm9jZXNzOgog
ICAgICAgICAgICAgaHR0cGRfcGlkID0gc2VsZi5fcHJvY2Vzcy5waWQKLSAgICAgICAgc2VsZi5f
cG9ydF9vYmouX3NodXRfZG93bl9odHRwX3NlcnZlcihodHRwZF9waWQpCisgICAgICAgIHNlbGYu
X3BvcnRfb2JqLl9leGVjdXRpdmUua2lsbF9wcm9jZXNzKGh0dHBkX3BpZCkKIAogICAgICAgICBp
ZiBzZWxmLl9wcm9jZXNzOgogICAgICAgICAgICAgIyB3YWl0KCkgaXMgbm90IHRocmVhZHNhZmUg
YW5kIGNhbiB0aHJvdyBPU0Vycm9yIGR1ZSB0bzoKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXJfaW50ZWdyYXRpb250ZXN0LnB5
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlcl9p
bnRlZ3JhdGlvbnRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTc3ZWJjZjQ3NWJlNjJkNGNhNGQxY2I0OGFk
NGY1MmVkNWM3NTRiNQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXJfaW50ZWdyYXRpb250ZXN0LnB5CkBAIC0wLDAg
KzEsMTI2IEBACisjIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3Ry
aWJ1dGlvbi4KKyMgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiSW50ZWdyYXRpb24gdGVzdGluZyBmb3IgdGhl
IG5ldy1ydW4td2Via2l0LWh0dHBkIHNjcmlwdCIiIgorCitpbXBvcnQgZXJybm8KK2ltcG9ydCBv
cworaW1wb3J0IHNvY2tldAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0
ZW1wZmlsZQoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBwb3J0X3Rlc3RjYXNlCisKKworY2xh
c3MgTGlnaHR0cGRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgdGhh
dCBhbGwgUG9ydCBpbXBsZW1lbnRhdGlvbnMgbXVzdCBwYXNzLiIiIgorICAgIEhUVFBfUE9SVFMg
PSBbODAwMCwgODA4MCwgODQ0M10KKworICAgIGRlZiBhc3NlcnRfc2VydmVyc19hcmVfZG93bihz
ZWxmLCBob3N0LCBwb3J0cyk6CisgICAgICAgIGZvciBwb3J0IGluIHBvcnRzOgorICAgICAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgICAg
ICAgICBzLmNvbm5lY3QoKGhvc3QsIHBvcnQpKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgp
CisgICAgICAgICAgICBleGNlcHQgSU9FcnJvciwgZToKKyAgICAgICAgICAgICAgICBzZWxmLmFz
c2VydFRydWUoZS5lcnJubyBpbiAoZXJybm8uRUNPTk5SRUZVU0VELCBlcnJuby5FQ09OTlJFU0VU
KSkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgcy5jbG9zZSgpCisKKyAg
ICBkZWYgYXNzZXJ0X3NlcnZlcnNfYXJlX3VwKHNlbGYsIGhvc3QsIHBvcnRzKToKKyAgICAgICAg
Zm9yIHBvcnQgaW4gcG9ydHM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcyA9
IHNvY2tldC5zb2NrZXQoKQorICAgICAgICAgICAgICAgIHMuY29ubmVjdCgoaG9zdCwgcG9ydCkp
CisgICAgICAgICAgICBleGNlcHQgSU9FcnJvciwgZToKKyAgICAgICAgICAgICAgICBzZWxmLmZh
aWwoJ2ZhaWxlZCB0byBjb25uZWN0IHRvICVzOiVkJyAlIChob3N0LCBwb3J0KSkKKyAgICAgICAg
ICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgcy5jbG9zZSgpCisKKyAgICBkZWYgcnVuX3Nj
cmlwdChzZWxmLCBhcmdzKToKKyAgICAgICAgc2NyaXB0X2RpciA9IG9zLnBhdGguZGlybmFtZShv
cy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFi
c3BhdGgoX19maWxlX18pKSkpKQorICAgICAgICBzY3JpcHRfcGF0aCA9IG9zLnBhdGguam9pbihz
Y3JpcHRfZGlyLCAnbmV3LXJ1bi13ZWJraXQtaHR0cGQnKQorICAgICAgICByZXR1cm4gc3VicHJv
Y2Vzcy5jYWxsKFtzeXMuZXhlY3V0YWJsZSwgc2NyaXB0X3BhdGhdICsgYXJncywgc3Rkb3V0PXN1
YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKworICAgIGRlZiBpbnRlZ3Jh
dGlvbl90ZXN0X2h0dHBfc2VydmVyX19ub3JtYWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0
X3NlcnZlcnNfYXJlX2Rvd24oJ2xvY2FsaG9zdCcsIHNlbGYuSFRUUF9QT1JUUykKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5ydW5fc2NyaXB0KFsnLS1zZXJ2ZXInLCAnc3RhcnQnXSks
IDApCisgICAgICAgIHNlbGYuYXNzZXJ0X3NlcnZlcnNfYXJlX3VwKCdsb2NhbGhvc3QnLCBzZWxm
LkhUVFBfUE9SVFMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYucnVuX3NjcmlwdChb
Jy0tc2VydmVyJywgJ3N0b3AnXSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0X3NlcnZlcnNfYXJl
X2Rvd24oJ2xvY2FsaG9zdCcsIHNlbGYuSFRUUF9QT1JUUykKKworICAgIGRlZiBpbnRlZ3JhdGlv
bl90ZXN0X2h0dHBfc2VydmVyX19mYWlscyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgaWYg
YSBwb3J0IGlzbid0IGF2YWlsYWJsZSwgdGhlIGNhbGwgZmFpbHMuCisgICAgICAgIGZvciBwb3J0
X251bWJlciBpbiBzZWxmLkhUVFBfUE9SVFM6CisgICAgICAgICAgICBzID0gc29ja2V0LnNvY2tl
dCgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAg
ICAgICAgICBzLmJpbmQoKCdsb2NhbGhvc3QnLCBwb3J0X251bWJlcikpCisgICAgICAgICAgICAg
ICAgZXhjZXB0IHNvY2tldC5lcnJvciwgZToKKyAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJu
byBpbiAoZXJybm8uRUFERFJJTlVTRSwgZXJybm8uRUFMUkVBRFkpOgorICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZi5mYWlsKCdjb3VsZCBub3QgYmluZCB0byBwb3J0ICVkOiAlcycgJSAocG9y
dF9udW1iZXIsIHN0cihlKSkpCisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5ydW5fc2NyaXB0KFsnLS1zZXJ2ZXInLCAnc3Rh
cnQnXSksIDEpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHNlbGYucnVu
X3NjcmlwdChbJy0tc2VydmVyJywgJ3N0b3AnXSkKKyAgICAgICAgICAgICAgICBzLmNsb3NlKCkK
KworICAgICAgICAjIFRlc3QgdGhhdCBjYWxsaW5nIHN0YXJ0KCkgdHdpY2UgZmFpbHMuCisgICAg
ICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYucnVuX3NjcmlwdChb
Jy0tc2VydmVyJywgJ3N0YXJ0J10pLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMo
c2VsZi5ydW5fc2NyaXB0KFsnLS1zZXJ2ZXInLCAnc3RhcnQnXSksIDEpCisgICAgICAgIGZpbmFs
bHk6CisgICAgICAgICAgICBzZWxmLnJ1bl9zY3JpcHQoWyctLXNlcnZlcicsICdzdG9wJ10pCisK
KyAgICAgICAgIyBUZXN0IHRoYXQgY2FsbGluZyBzdG9wKCkgdHdpY2UgaXMgaGFybWxlc3MuCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYucnVuX3NjcmlwdChbJy0tc2VydmVyJywgJ3N0
b3AnXSksIDApCisKKyAgICBkZWYgbWF5YmVfbWFrZV9kaXIoc2VsZiwgKmNvbXBzKToKKyAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgb3MubWFrZWRpcnMob3MucGF0aC5qb2luKCpjb21wcykpCisg
ICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBlOgorICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJu
by5FRVhJU1Q6CisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiBpbnRlZ3JhdGlvbl90
ZXN0X2h0dHBfc2VydmVyX3BvcnRfYW5kX3Jvb3Qoc2VsZik6CisgICAgICAgIHRtcGRpciA9IHRl
bXBmaWxlLm1rZHRlbXAocHJlZml4PSd3ZWJraXRweXRlc3QnKQorICAgICAgICBzZWxmLm1heWJl
X21ha2VfZGlyKHRtcGRpciwgJ2h0dHAnLCAndGVzdHMnKQorICAgICAgICBzZWxmLm1heWJlX21h
a2VfZGlyKHRtcGRpciwgJ2Zhc3QnLCAnanMnLCAncmVzb3VyY2VzJykKKyAgICAgICAgc2VsZi5t
YXliZV9tYWtlX2Rpcih0bXBkaXIsICdtZWRpYScpCisKKyAgICAgICAgc2VsZi5hc3NlcnRfc2Vy
dmVyc19hcmVfZG93bignbG9jYWxob3N0JywgWzE4MDAwXSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbHMoc2VsZi5ydW5fc2NyaXB0KFsnLS1zZXJ2ZXInLCAnc3RhcnQnLCAnLS1wb3J0PTE4MDAw
JywgJy0tcm9vdCcsIHRtcGRpcl0pLCAwKQorICAgICAgICBzZWxmLmFzc2VydF9zZXJ2ZXJzX2Fy
ZV91cCgnbG9jYWxob3N0JywgWzE4MDAwXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2Vs
Zi5ydW5fc2NyaXB0KFsnLS1zZXJ2ZXInLCAnc3RvcCddKSwgMCkKKyAgICAgICAgc2VsZi5hc3Nl
cnRfc2VydmVyc19hcmVfZG93bignbG9jYWxob3N0JywgWzE4MDAwXSkKKworCitpZiBfX25hbWVf
XyA9PSAnX19tYWluX18nOgorICAgIHBvcnRfdGVzdGNhc2UubWFpbigpCmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21hY191bml0dGVzdC5weSBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbWFjX3VuaXR0ZXN0LnB5
CmluZGV4IGFlNTQ3ZjJiOTZiODVmMTRhNmVmZDA2YWFjMWU5MTZiZWE2NzQ1Y2MuLjQyOWRhNGE5
ZGIxYWIwZmY0ZjdiZjk1OTQyNjJhMDk0OWYwZjgxZDQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbWFjX3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvbWFjX3VuaXR0ZXN0LnB5CkBAIC0x
MjksNiArMTI5LDEyIEBAIHN2Zy9iYXRpay90ZXh0L3NtYWxsRm9udHMuc3ZnCiAKICAgICAgICAg
c2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIHNlbGYuYXNzZXJ0X25hbWUsIE5vbmUs
ICcxMC4zLjEnLCAnc2hvdWxkLXJhaXNlLWFzc2VydGlvbi1zby10aGlzLXZhbHVlLWRvZXMtbm90
LW1hdHRlcicpCiAKKyAgICBkZWYgaW50ZWdyYXRpb25fdGVzdF9saWdodHRwZF9zZXJ2ZXJfX2Zh
aWxzKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgaW50ZWdyYXRpb25fdGVzdF9saWdo
dHRwZF9zZXJ2ZXJfX25vcm1hbChzZWxmKToKKyAgICAgICAgcGFzcworCiAKIGlmIF9fbmFtZV9f
ID09ICdfX21haW5fXyc6CiAgICAgcG9ydF90ZXN0Y2FzZS5tYWluKCkKZGlmZiAtLWdpdCBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvcG9ydF90ZXN0Y2FzZS5weSBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvcG9ydF90ZXN0Y2FzZS5w
eQppbmRleCBmNjE3MzdkM2E2MTk0NDgzZTJiNTllMTE3MGU5ZGEyMWQzNmZiMmI4Li4wMjc3ZGVm
MjM4MmExNTZhY2I5OGI3MGVkNmQxZWZkNWNjYjQ0ZjllIDEwMDc1NQotLS0gYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3BvcnRfdGVzdGNhc2UucHkKKysrIGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9wb3J0X3Rlc3RjYXNlLnB5CkBA
IC00OCw3ICs0OCw2IEBAIG1vY2tfb3B0aW9ucyA9IG1vY2t0b29sLk1vY2tPcHRpb25zKGNvbmZp
Z3VyYXRpb249J1JlbGVhc2UnKQogCiBjbGFzcyBQb3J0VGVzdENhc2UodW5pdHRlc3QuVGVzdENh
c2UpOgogICAgICIiIlRlc3RzIHRoYXQgYWxsIFBvcnQgaW1wbGVtZW50YXRpb25zIG11c3QgcGFz
cy4iIiIKLQogICAgIEhUVFBfUE9SVFMgPSBbODAwMCwgODA4MCwgODQ0M10KICAgICBXRUJTT0NL
RVRfUE9SVFMgPSBbODg4MF0KIApAQCAtMTMzLDIyICsxMzIsMjYgQEAgY2xhc3MgUG9ydFRlc3RD
YXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgcG9ydC5zdGFydF9oZWxwZXIoKQogICAg
ICAgICBwb3J0LnN0b3BfaGVscGVyKCkKIAotICAgIGRlZiBpbnRlZ3JhdGlvbl90ZXN0X2h0dHBf
c2VydmVyX19ub3JtYWwoc2VsZik6Ci0gICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydCgpCi0g
ICAgICAgIGlmIG5vdCBwb3J0OgotICAgICAgICAgICAgcmV0dXJuCi0KKyAgICBkZWYgZG9fdGVz
dF9odHRwX3NlcnZlcl9fbm9ybWFsKHNlbGYsIHBvcnQpOgogICAgICAgICBzZWxmLmFzc2VydF9z
ZXJ2ZXJzX2FyZV9kb3duKCdsb2NhbGhvc3QnLCBzZWxmLkhUVFBfUE9SVFMpCiAgICAgICAgIHBv
cnQuc3RhcnRfaHR0cF9zZXJ2ZXIoKQogICAgICAgICBzZWxmLmFzc2VydF9zZXJ2ZXJzX2FyZV91
cCgnbG9jYWxob3N0Jywgc2VsZi5IVFRQX1BPUlRTKQogICAgICAgICBwb3J0LnN0b3BfaHR0cF9z
ZXJ2ZXIoKQogICAgICAgICBzZWxmLmFzc2VydF9zZXJ2ZXJzX2FyZV9kb3duKCdsb2NhbGhvc3Qn
LCBzZWxmLkhUVFBfUE9SVFMpCiAKLSAgICBkZWYgaW50ZWdyYXRpb25fdGVzdF9odHRwX3NlcnZl
cl9fZmFpbHMoc2VsZik6Ci0gICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydCgpCisgICAgZGVm
IGludGVncmF0aW9uX3Rlc3RfYXBhY2hlX3NlcnZlcl9fbm9ybWFsKHNlbGYpOgorICAgICAgICBw
b3J0ID0gc2VsZi5tYWtlX3BvcnQob3B0aW9ucz1tb2NrdG9vbC5Nb2NrT3B0aW9ucyhjb25maWd1
cmF0aW9uPSdSZWxlYXNlJywgdXNlX2FwYWNoZT1UcnVlKSkKICAgICAgICAgaWYgbm90IHBvcnQ6
CiAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5kb190ZXN0X2h0dHBfc2VydmVyX19u
b3JtYWwocG9ydCkKIAorICAgIGRlZiBpbnRlZ3JhdGlvbl90ZXN0X2xpZ2h0dHBkX3NlcnZlcl9f
bm9ybWFsKHNlbGYpOgorICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQob3B0aW9ucz1tb2Nr
dG9vbC5Nb2NrT3B0aW9ucyhjb25maWd1cmF0aW9uPSdSZWxlYXNlJywgdXNlX2FwYWNoZT1GYWxz
ZSkpCisgICAgICAgIGlmIG5vdCBwb3J0OgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNl
bGYuZG9fdGVzdF9odHRwX3NlcnZlcl9fbm9ybWFsKHBvcnQpCisKKyAgICBkZWYgZG9fdGVzdF9o
dHRwX3NlcnZlcl9fZmFpbHMoc2VsZiwgcG9ydCk6CiAgICAgICAgICMgVGVzdCB0aGF0IGlmIGEg
cG9ydCBpc24ndCBhdmFpbGFibGUsIHRoZSBjYWxsIGZhaWxzLgogICAgICAgICBmb3IgcG9ydF9u
dW1iZXIgaW4gc2VsZi5IVFRQX1BPUlRTOgogICAgICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQo
KQpAQCAtMTgyLDYgKzE4NSwxOCBAQCBjbGFzcyBQb3J0VGVzdENhc2UodW5pdHRlc3QuVGVzdENh
c2UpOgogICAgICAgICAjIFRlc3QgdGhhdCBjYWxsaW5nIHN0b3AoKSB0d2ljZSBpcyBoYXJtbGVz
cy4KICAgICAgICAgcG9ydC5zdG9wX2h0dHBfc2VydmVyKCkKIAorICAgIGRlZiBpbnRlZ3JhdGlv
bl90ZXN0X2FwYWNoZV9zZXJ2ZXJfX2ZhaWxzKHNlbGYpOgorICAgICAgICBwb3J0ID0gc2VsZi5t
YWtlX3BvcnQob3B0aW9ucz1tb2NrdG9vbC5Nb2NrT3B0aW9ucyhjb25maWd1cmF0aW9uPSdSZWxl
YXNlJywgdXNlX2FwYWNoZT1UcnVlKSkKKyAgICAgICAgaWYgbm90IHBvcnQ6CisgICAgICAgICAg
ICByZXR1cm4KKyAgICAgICAgc2VsZi5kb190ZXN0X2h0dHBfc2VydmVyX19mYWlscyhwb3J0KQor
CisgICAgZGVmIGludGVncmF0aW9uX3Rlc3RfbGlnaHR0cGRfc2VydmVyX19mYWlscyhzZWxmKToK
KyAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KG9wdGlvbnM9bW9ja3Rvb2wuTW9ja09wdGlv
bnMoY29uZmlndXJhdGlvbj0nUmVsZWFzZScsIHVzZV9hcGFjaGU9RmFsc2UpKQorICAgICAgICBp
ZiBub3QgcG9ydDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLmRvX3Rlc3RfaHR0
cF9zZXJ2ZXJfX2ZhaWxzKHBvcnQpCisKICAgICBkZWYgaW50ZWdyYXRpb25fdGVzdF9pbWFnZV9k
aWZmKHNlbGYpOgogICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQogICAgICAgICBpZiBu
b3QgcG9ydDoKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvd2Vic29ja2V0X3NlcnZlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvd2Vic29ja2V0X3NlcnZlci5weQppbmRleCBhNTljYjFmYWRiOGM4Nzc2NzVk
MDIxMTQzMTMxYjY4MzYxOWUwZTJlLi5lMzhiNjI5M2Y4ZGEyZjcwMmFiMmVmNWI0MDU5YjZmOTZj
N2NiZDQzIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L3dlYnNvY2tldF9zZXJ2ZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC93ZWJzb2NrZXRfc2VydmVyLnB5CkBAIC0yMDksOSArMjA5LDcgQEAgY2xh
c3MgUHlXZWJTb2NrZXQoaHR0cF9zZXJ2ZXIuTGlnaHR0cGQpOgogICAgICAgICB1cmwgPSB1cmwg
KyAnOi8vMTI3LjAuMC4xOiVkLycgJSBzZWxmLl9wb3J0CiAgICAgICAgIGlmIG5vdCB1cmxfaXNf
YWxpdmUodXJsKToKICAgICAgICAgICAgIGlmIHNlbGYuX3Byb2Nlc3MucmV0dXJuY29kZSA9PSBO
b25lOgotICAgICAgICAgICAgICAgICMgRklYTUU6IFdlIHNob3VsZCB1c2UgYSBub24tc3RhdGlj
IEV4ZWN1dGl2ZSBmb3IgZWFzaWVyCi0gICAgICAgICAgICAgICAgIyB0ZXN0aW5nLgotICAgICAg
ICAgICAgICAgIEV4ZWN1dGl2ZSgpLmtpbGxfcHJvY2VzcyhzZWxmLl9wcm9jZXNzLnBpZCkKKyAg
ICAgICAgICAgICAgICBzZWxmLl9wb3J0X29iai5fZXhlY3V0aXZlLmtpbGxfcHJvY2VzcyhzZWxm
Ll9wcm9jZXNzLnBpZCkKICAgICAgICAgICAgIHdpdGggY29kZWNzLm9wZW4ob3V0cHV0X2xvZywg
InIiLCAidXRmLTgiKSBhcyBmcDoKICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmcDoKICAg
ICAgICAgICAgICAgICAgICAgX2xvZy5lcnJvcihsaW5lKQpAQCAtMjI3LDggKzIyNSw4IEBAIGNs
YXNzIFB5V2ViU29ja2V0KGh0dHBfc2VydmVyLkxpZ2h0dHBkKToKICAgICAgICAgICAgIHdpdGgg
Y29kZWNzLm9wZW4oc2VsZi5fcGlkZmlsZSwgInciLCAiYXNjaWkiKSBhcyBmaWxlOgogICAgICAg
ICAgICAgICAgIGZpbGUud3JpdGUoIiVkIiAlIHNlbGYuX3Byb2Nlc3MucGlkKQogCi0gICAgZGVm
IHN0b3Aoc2VsZiwgZm9yY2U9RmFsc2UpOgotICAgICAgICBpZiBub3QgZm9yY2UgYW5kIG5vdCBz
ZWxmLmlzX3J1bm5pbmcoKToKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgaWYgbm90IHNl
bGYuaXNfcnVubmluZygpOgogICAgICAgICAgICAgcmV0dXJuCiAKICAgICAgICAgcGlkID0gTm9u
ZQpAQCAtMjQzLDggKzI0MSw3IEBAIGNsYXNzIFB5V2ViU29ja2V0KGh0dHBfc2VydmVyLkxpZ2h0
dHBkKToKICAgICAgICAgICAgICAgICAnRmFpbGVkIHRvIGZpbmQgJXMgc2VydmVyIHBpZC4nICUg
c2VsZi5fc2VydmVyX25hbWUpCiAKICAgICAgICAgX2xvZy5kZWJ1ZygnU2h1dHRpbmcgZG93biAl
cyBzZXJ2ZXIgJWQuJyAlIChzZWxmLl9zZXJ2ZXJfbmFtZSwgcGlkKSkKLSAgICAgICAgIyBGSVhN
RTogV2Ugc2hvdWxkIHVzZSBhIG5vbi1zdGF0aWMgRXhlY3V0aXZlIGZvciBlYXNpZXIgdGVzdGlu
Zy4KLSAgICAgICAgRXhlY3V0aXZlKCkua2lsbF9wcm9jZXNzKHBpZCkKKyAgICAgICAgc2VsZi5f
cG9ydF9vYmouX2V4ZWN1dGl2ZS5raWxsX3Byb2Nlc3MocGlkKQogCiAgICAgICAgIGlmIHNlbGYu
X3Byb2Nlc3M6CiAgICAgICAgICAgICAjIHdhaXQoKSBpcyBub3QgdGhyZWFkc2FmZSBhbmQgY2Fu
IHRocm93IE9TRXJyb3IgZHVlIHRvOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96353</attachid>
            <date>2011-06-07 19:09:20 -0700</date>
            <delta_ts>2011-06-08 17:54:35 -0700</delta_ts>
            <desc>ready for review, I think</desc>
            <filename>bug-62251-20110607190919.patch</filename>
            <type>text/plain</type>
            <size>16340</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODgyODgKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA3ZDYwMTQ4ZDA2OWM5MDQ2YjZjOTI4Y2NlNWFkOGRmYWM5
YTM5NGFlLi5hNjE4ZDQ1NzZlY2JlMDJhODhmYmQ4ODQ3NTljMTgzNDA3YmYyNGM4IDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjMg
QEAKIDIwMTEtMDYtMDcgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgd2Via2l0cHk6IGFk
ZCBpbnRlZ3JhdGlvbiB0ZXN0cyBmb3IgbmV3LXJ1bi13ZWJraXQtaHR0cGQsIHN0b3AgY2FsbGlu
ZyBzaHV0X2Rvd25faHR0cF9zZXJ2ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTYyMjUxCisKKyAgICAgICAgc2h1dF9kb3duX2h0dHBfc2VydmVyKCkg
d2FzIGEgdG90YWwgaGFjayB0aGF0IHdhcyBvbmx5IHVzZWQgYnkKKyAgICAgICAgbmV3LXJ1bi13
ZWJraXQtaHR0cGQsIHNvIEkndmUgbW92ZWQgdGhlIGNvZGUgdGhlcmUgYW5kIHN3aXRjaGVkCisg
ICAgICAgIHRvIHVzaW5nIGV4ZWN1dGl2ZS5raWxsX3Byb2Nlc3MoKSBmb3IgdGhlIGNvbW1vbiBj
YXNlLiBUaGUKKyAgICAgICAgbWV0aG9kIGl0c2VsZiB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIHBh
dGNoIG9uIGJ1ZyA1OTk5My4KKworICAgICAgICAqIFNjcmlwdHMvbmV3LXJ1bi13ZWJraXQtaHR0
cGQ6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9hcGFjaGVf
aHR0cF9zZXJ2ZXIucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9odHRwX3NlcnZlci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2h0dHBfc2VydmVyX2ludGVncmF0aW9udGVzdC5weTogQWRkZWQuCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJzb2NrZXRfc2VydmVyLnB5
OgorCisyMDExLTA2LTA3ICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgorCiAg
ICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgogCiAgICAgICAgIHdlYmtpdHB5OiBhZGQg
YSBwb3BlbigpIGNhbGwgdG8gZXhlY3V0aXZlCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL25l
dy1ydW4td2Via2l0LWh0dHBkIGIvVG9vbHMvU2NyaXB0cy9uZXctcnVuLXdlYmtpdC1odHRwZApp
bmRleCA0MTIyOTkzYzQ2NjRjZmY3NzQwNWE2ZDNhMzlkOWM5MWVhNWNiZDE0Li5lNTlmYzc4Njhl
NGNlOTc4MDRiOTU0NDYxZWU4Mzk4NDlkMTQxNTEyIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRz
L25ldy1ydW4td2Via2l0LWh0dHBkCisrKyBiL1Rvb2xzL1NjcmlwdHMvbmV3LXJ1bi13ZWJraXQt
aHR0cGQKQEAgLTcwLDcgKzcwLDEwIEBAIGRlZiBydW4ob3B0aW9ucyk6CiAgICAgICAgIGlmIG9w
dGlvbnMuc2VydmVyID09ICdzdGFydCc6CiAgICAgICAgICAgICBodHRwZC5zdGFydCgpCiAgICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICBodHRwZC5zdG9wKGZvcmNlPVRydWUpCisgICAgICAgICAg
ICAjIEZJWE1FOiBUaGlzIGlzbid0IGlkZWFsLCBzaW5jZSBpdCBjb3VsZCBjb25mbGljdCB3aXRo
ICAgICAgICAKKyAgICAgICAgICAgICMgbGlnaHR0cGQgcHJvY2Vzc2VzIG5vdCBzdGFydGVkIGJ5
IHRoaXMgc2NyaXB0CisgICAgICAgICAgICBwb3J0X29iai5fZXhlY3V0aXZlLmtpbGxfYWxsKCds
aWdodHRwZCcpCisgICAgICAgICAgICBwb3J0X29iai5fZXhlY3V0aXZlLmtpbGxfYWxsKCdodHRw
ZCcpCiAKIAogZGVmIG1haW4oKToKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvYXBhY2hlX2h0dHBfc2VydmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9hcGFjaGVfaHR0cF9zZXJ2ZXIucHkKaW5kZXggMDVh
MjMzODI0NTBkZWNkODBjNDAzNDU5NjQ3YjU4ZjEyMTU0NzBiMS4uOTA5Mjk3OGZmMmRkMDE2Mjc5
YzVjMmRiMzdjMmU0N2UxOGQ1MzhlYyAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9hcGFjaGVfaHR0cF9zZXJ2ZXIucHkKKysrIGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9hcGFjaGVfaHR0cF9zZXJ2ZXIucHkKQEAg
LTIyNyw3ICsyMjcsOSBAQCBjbGFzcyBMYXlvdXRUZXN0QXBhY2hlSHR0cGQoaHR0cF9zZXJ2ZXJf
YmFzZS5IdHRwU2VydmVyQmFzZSk6CiAgICAgICAgICIiIlN0b3BzIHRoZSBhcGFjaGUgaHR0cCBz
ZXJ2ZXIuIiIiCiAgICAgICAgIF9sb2cuZGVidWcoIlNodXR0aW5nIGRvd24gYW55IHJ1bm5pbmcg
aHR0cCBzZXJ2ZXJzIikKICAgICAgICAgaHR0cGRfcGlkID0gTm9uZQotICAgICAgICBpZiBvcy5w
YXRoLmV4aXN0cyhzZWxmLl9waWRfZmlsZSk6CisgICAgICAgIGlmIHNlbGYuX2h0dHBkX3Byb2M6
CisgICAgICAgICAgICBodHRwZF9waWQgPSBzZWxmLl9odHRwZF9wcm9jLnBpZAorICAgICAgICBl
bGlmIG9zLnBhdGguZXhpc3RzKHNlbGYuX3BpZF9maWxlKToKICAgICAgICAgICAgIGh0dHBkX3Bp
ZCA9IGludChvcGVuKHNlbGYuX3BpZF9maWxlKS5yZWFkbGluZSgpKQotICAgICAgICAjIEZJWE1F
OiBXZSBzaG91bGRuJ3QgYmUgY2FsbGluZyBhIHByb3RlY3RlZCBtZXRob2Qgb2YgX3BvcnRfb2Jq
IQotICAgICAgICBzZWxmLl9wb3J0X29iai5fc2h1dF9kb3duX2h0dHBfc2VydmVyKGh0dHBkX3Bp
ZCkKKyAgICAgICAgaWYgaHR0cGRfcGlkOgorICAgICAgICAgICAgc2VsZi5fZXhlY3V0aXZlLmtp
bGxfcHJvY2VzcyhodHRwZF9waWQpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVtX3dpbl91bml0dGVzdC5weSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fd2luX3VuaXR0ZXN0LnB5Cmlu
ZGV4IDE5M2MzZTgzOWVmMmEyOWExYzk5NGFjNjY5N2Y4ZjQxZWEwNDdhMjkuLjdkZTQ4OWVlNDli
NDJlZThiNWRiZDJkNDlmNTI5ODAyYTRiMWQwNmQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fd2luX3VuaXR0ZXN0LnB5CisrKyBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fd2luX3Vu
aXR0ZXN0LnB5CkBAIC0xMzAsNiArMTMwLDEyIEBAIGNsYXNzIENocm9taXVtV2luVGVzdChwb3J0
X3Rlc3RjYXNlLlBvcnRUZXN0Q2FzZSk6CiAgICAgICAgIHBvcnQgPSBjaHJvbWl1bV93aW4uQ2hy
b21pdW1XaW5Qb3J0KHBvcnRfbmFtZT0nY2hyb21pdW0td2luLXdpbjcnKQogICAgICAgICBzZWxm
LmFzc2VydEVxdWFscyhwb3J0LmJhc2VsaW5lX3BhdGgoKSwgcG9ydC5fd2Via2l0X2Jhc2VsaW5l
X3BhdGgoJ2Nocm9taXVtLXdpbicpKQogCisgICAgZGVmIGludGVncmF0aW9uX3Rlc3RfYXBhY2hl
X3NlcnZlcl9fZmFpbHMoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBpbnRlZ3JhdGlv
bl90ZXN0X2FwYWNoZV9zZXJ2ZXJfX25vcm1hbChzZWxmKToKKyAgICAgICAgcGFzcworCiAKIAog
aWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXIucHkgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVyLnB5CmluZGV4IGU1MjVlZTBlNDkx
MmZlMDk1MzhmN2NkZmRmM2ExYjYzNDgxMjQzMmQuLjNhNTRjOTliMjAwODhiMTcwMzEzMjNhMDAx
NjU1Nzc1OTEzZWQyZTEgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlci5weQpAQCAtMjI2LDE0ICsyMjYsMTQgQEAgY2xh
c3MgTGlnaHR0cGQoaHR0cF9zZXJ2ZXJfYmFzZS5IdHRwU2VydmVyQmFzZSk6CiAgICAgIyBUT0RP
KGRlYW5tKTogRmluZCBhIG5pY2VyIHdheSB0byBzaHV0ZG93biBjbGVhbmx5LiAgT3VyIGxvZyBm
aWxlcyBhcmUKICAgICAjIHByb2JhYmx5IG5vdCBiZWluZyBmbHVzaGVkLCBldGMuLi4gd2h5IGRv
ZXNuJ3Qgb3VyIHB5dGhvbiBoYXZlIG9zLmtpbGwgPwogCi0gICAgZGVmIHN0b3Aoc2VsZiwgZm9y
Y2U9RmFsc2UpOgotICAgICAgICBpZiBub3QgZm9yY2UgYW5kIG5vdCBzZWxmLmlzX3J1bm5pbmco
KToKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuaXNfcnVubmluZygp
OgogICAgICAgICAgICAgcmV0dXJuCiAKICAgICAgICAgaHR0cGRfcGlkID0gTm9uZQogICAgICAg
ICBpZiBzZWxmLl9wcm9jZXNzOgogICAgICAgICAgICAgaHR0cGRfcGlkID0gc2VsZi5fcHJvY2Vz
cy5waWQKLSAgICAgICAgc2VsZi5fcG9ydF9vYmouX3NodXRfZG93bl9odHRwX3NlcnZlcihodHRw
ZF9waWQpCisgICAgICAgIHNlbGYuX2V4ZWN1dGl2ZS5raWxsX3Byb2Nlc3MoaHR0cGRfcGlkKQog
CiAgICAgICAgIGlmIHNlbGYuX3Byb2Nlc3M6CiAgICAgICAgICAgICAjIHdhaXQoKSBpcyBub3Qg
dGhyZWFkc2FmZSBhbmQgY2FuIHRocm93IE9TRXJyb3IgZHVlIHRvOgpkaWZmIC0tZ2l0IGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlcl9iYXNlLnB5
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlcl9i
YXNlLnB5CmluZGV4IDJhNDNlODE5NzhiOTJjNmNhNjgxYThhNGMyOGY5OWI4M2I4NzZlYmIuLjhl
M2QyMDY1OGVlYjQyNTVhZTEyOTNiNjllMWYzODBjMzJhYmQ0NTAgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXJfYmFzZS5weQor
KysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVy
X2Jhc2UucHkKQEAgLTQzLDYgKzQzLDcgQEAgY2xhc3MgSHR0cFNlcnZlckJhc2Uob2JqZWN0KToK
IAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0X29iaik6CiAgICAgICAgIHNlbGYuX3BvcnRf
b2JqID0gcG9ydF9vYmoKKyAgICAgICAgc2VsZi5fZXhlY3V0aXZlID0gcG9ydF9vYmouX2V4ZWN1
dGl2ZQogCiAgICAgZGVmIHdhaXRfZm9yX2FjdGlvbihzZWxmLCBhY3Rpb24pOgogICAgICAgICAi
IiJSZXBlYXQgdGhlIGFjdGlvbiBmb3IgMjAgc2Vjb25kcyBvciB1bnRpbCBpdCBzdWNjZWVkcy4g
UmV0dXJucwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9odHRwX3NlcnZlcl9pbnRlZ3JhdGlvbnRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVyX2ludGVncmF0aW9udGVzdC5weQpuZXcg
ZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4xNzdlYmNmNDc1YmU2MmQ0Y2E0ZDFjYjQ4YWQ0ZjUyZWQ1Yzc1NGI1Ci0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRw
X3NlcnZlcl9pbnRlZ3JhdGlvbnRlc3QucHkKQEAgLTAsMCArMSwxMjYgQEAKKyMgQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMg
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisj
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCisiIiJJbnRlZ3JhdGlvbiB0ZXN0aW5nIGZvciB0aGUgbmV3LXJ1bi13ZWJraXQtaHR0cGQg
c2NyaXB0IiIiCisKK2ltcG9ydCBlcnJubworaW1wb3J0IG9zCitpbXBvcnQgc29ja2V0CitpbXBv
cnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdW5pdHRl
c3QKKworaW1wb3J0IHBvcnRfdGVzdGNhc2UKKworCitjbGFzcyBMaWdodHRwZFRlc3RDYXNlKHVu
aXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyB0aGF0IGFsbCBQb3J0IGltcGxlbWVudGF0
aW9ucyBtdXN0IHBhc3MuIiIiCisgICAgSFRUUF9QT1JUUyA9IFs4MDAwLCA4MDgwLCA4NDQzXQor
CisgICAgZGVmIGFzc2VydF9zZXJ2ZXJzX2FyZV9kb3duKHNlbGYsIGhvc3QsIHBvcnRzKToKKyAg
ICAgICAgZm9yIHBvcnQgaW4gcG9ydHM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAg
ICAgcyA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICAgICAgICAgIHMuY29ubmVjdCgoaG9zdCwg
cG9ydCkpCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCkKKyAgICAgICAgICAgIGV4Y2VwdCBJ
T0Vycm9yLCBlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlLmVycm5vIGluIChl
cnJuby5FQ09OTlJFRlVTRUQsIGVycm5vLkVDT05OUkVTRVQpKQorICAgICAgICAgICAgZmluYWxs
eToKKyAgICAgICAgICAgICAgICBzLmNsb3NlKCkKKworICAgIGRlZiBhc3NlcnRfc2VydmVyc19h
cmVfdXAoc2VsZiwgaG9zdCwgcG9ydHMpOgorICAgICAgICBmb3IgcG9ydCBpbiBwb3J0czoKKyAg
ICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzID0gc29ja2V0LnNvY2tldCgpCisgICAg
ICAgICAgICAgICAgcy5jb25uZWN0KChob3N0LCBwb3J0KSkKKyAgICAgICAgICAgIGV4Y2VwdCBJ
T0Vycm9yLCBlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnZmFpbGVkIHRvIGNvbm5lY3Qg
dG8gJXM6JWQnICUgKGhvc3QsIHBvcnQpKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAg
ICAgICAgICBzLmNsb3NlKCkKKworICAgIGRlZiBydW5fc2NyaXB0KHNlbGYsIGFyZ3MpOgorICAg
ICAgICBzY3JpcHRfZGlyID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRo
LmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpKSkpCisg
ICAgICAgIHNjcmlwdF9wYXRoID0gb3MucGF0aC5qb2luKHNjcmlwdF9kaXIsICduZXctcnVuLXdl
YmtpdC1odHRwZCcpCisgICAgICAgIHJldHVybiBzdWJwcm9jZXNzLmNhbGwoW3N5cy5leGVjdXRh
YmxlLCBzY3JpcHRfcGF0aF0gKyBhcmdzLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9
c3VicHJvY2Vzcy5QSVBFKQorCisgICAgZGVmIGludGVncmF0aW9uX3Rlc3RfaHR0cF9zZXJ2ZXJf
X25vcm1hbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRfc2VydmVyc19hcmVfZG93bignbG9j
YWxob3N0Jywgc2VsZi5IVFRQX1BPUlRTKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxm
LnJ1bl9zY3JpcHQoWyctLXNlcnZlcicsICdzdGFydCddKSwgMCkKKyAgICAgICAgc2VsZi5hc3Nl
cnRfc2VydmVyc19hcmVfdXAoJ2xvY2FsaG9zdCcsIHNlbGYuSFRUUF9QT1JUUykKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5ydW5fc2NyaXB0KFsnLS1zZXJ2ZXInLCAnc3RvcCddKSwg
MCkKKyAgICAgICAgc2VsZi5hc3NlcnRfc2VydmVyc19hcmVfZG93bignbG9jYWxob3N0Jywgc2Vs
Zi5IVFRQX1BPUlRTKQorCisgICAgZGVmIGludGVncmF0aW9uX3Rlc3RfaHR0cF9zZXJ2ZXJfX2Zh
aWxzKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBpZiBhIHBvcnQgaXNuJ3QgYXZhaWxhYmxl
LCB0aGUgY2FsbCBmYWlscy4KKyAgICAgICAgZm9yIHBvcnRfbnVtYmVyIGluIHNlbGYuSFRUUF9Q
T1JUUzoKKyAgICAgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgICAgIHRyeToK
KyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHMuYmluZCgoJ2xvY2Fs
aG9zdCcsIHBvcnRfbnVtYmVyKSkKKyAgICAgICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9y
LCBlOgorICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vIGluIChlcnJuby5FQUREUklOVVNF
LCBlcnJuby5FQUxSRUFEWSk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ2Nv
dWxkIG5vdCBiaW5kIHRvIHBvcnQgJWQ6ICVzJyAlIChwb3J0X251bWJlciwgc3RyKGUpKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFs
cyhzZWxmLnJ1bl9zY3JpcHQoWyctLXNlcnZlcicsICdzdGFydCddKSwgMSkKKyAgICAgICAgICAg
IGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc2VsZi5ydW5fc2NyaXB0KFsnLS1zZXJ2ZXInLCAn
c3RvcCddKQorICAgICAgICAgICAgICAgIHMuY2xvc2UoKQorCisgICAgICAgICMgVGVzdCB0aGF0
IGNhbGxpbmcgc3RhcnQoKSB0d2ljZSBmYWlscy4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5ydW5fc2NyaXB0KFsnLS1zZXJ2ZXInLCAnc3RhcnQnXSks
IDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLnJ1bl9zY3JpcHQoWyctLXNl
cnZlcicsICdzdGFydCddKSwgMSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYu
cnVuX3NjcmlwdChbJy0tc2VydmVyJywgJ3N0b3AnXSkKKworICAgICAgICAjIFRlc3QgdGhhdCBj
YWxsaW5nIHN0b3AoKSB0d2ljZSBpcyBoYXJtbGVzcy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bHMoc2VsZi5ydW5fc2NyaXB0KFsnLS1zZXJ2ZXInLCAnc3RvcCddKSwgMCkKKworICAgIGRlZiBt
YXliZV9tYWtlX2RpcihzZWxmLCAqY29tcHMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBv
cy5tYWtlZGlycyhvcy5wYXRoLmpvaW4oKmNvbXBzKSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3Is
IGU6CisgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVFWElTVDoKKyAgICAgICAgICAg
ICAgICByYWlzZQorCisgICAgZGVmIGludGVncmF0aW9uX3Rlc3RfaHR0cF9zZXJ2ZXJfcG9ydF9h
bmRfcm9vdChzZWxmKToKKyAgICAgICAgdG1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9
J3dlYmtpdHB5dGVzdCcpCisgICAgICAgIHNlbGYubWF5YmVfbWFrZV9kaXIodG1wZGlyLCAnaHR0
cCcsICd0ZXN0cycpCisgICAgICAgIHNlbGYubWF5YmVfbWFrZV9kaXIodG1wZGlyLCAnZmFzdCcs
ICdqcycsICdyZXNvdXJjZXMnKQorICAgICAgICBzZWxmLm1heWJlX21ha2VfZGlyKHRtcGRpciwg
J21lZGlhJykKKworICAgICAgICBzZWxmLmFzc2VydF9zZXJ2ZXJzX2FyZV9kb3duKCdsb2NhbGhv
c3QnLCBbMTgwMDBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLnJ1bl9zY3JpcHQo
WyctLXNlcnZlcicsICdzdGFydCcsICctLXBvcnQ9MTgwMDAnLCAnLS1yb290JywgdG1wZGlyXSks
IDApCisgICAgICAgIHNlbGYuYXNzZXJ0X3NlcnZlcnNfYXJlX3VwKCdsb2NhbGhvc3QnLCBbMTgw
MDBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLnJ1bl9zY3JpcHQoWyctLXNlcnZl
cicsICdzdG9wJ10pLCAwKQorICAgICAgICBzZWxmLmFzc2VydF9zZXJ2ZXJzX2FyZV9kb3duKCds
b2NhbGhvc3QnLCBbMTgwMDBdKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAg
cG9ydF90ZXN0Y2FzZS5tYWluKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvbWFjX3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9tYWNfdW5pdHRlc3QucHkKaW5kZXggYWU1NDdmMmI5NmI4NWYx
NGE2ZWZkMDZhYWMxZTkxNmJlYTY3NDVjYy4uNDI5ZGE0YTlkYjFhYjBmZjRmN2JmOTU5NDI2MmEw
OTQ5ZjBmODFkNCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9tYWNfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9tYWNfdW5pdHRlc3QucHkKQEAgLTEyOSw2ICsxMjksMTIgQEAgc3ZnL2Jh
dGlrL3RleHQvc21hbGxGb250cy5zdmcKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3Nl
cnRpb25FcnJvciwgc2VsZi5hc3NlcnRfbmFtZSwgTm9uZSwgJzEwLjMuMScsICdzaG91bGQtcmFp
c2UtYXNzZXJ0aW9uLXNvLXRoaXMtdmFsdWUtZG9lcy1ub3QtbWF0dGVyJykKIAorICAgIGRlZiBp
bnRlZ3JhdGlvbl90ZXN0X2xpZ2h0dHBkX3NlcnZlcl9fZmFpbHMoc2VsZik6CisgICAgICAgIHBh
c3MKKworICAgIGRlZiBpbnRlZ3JhdGlvbl90ZXN0X2xpZ2h0dHBkX3NlcnZlcl9fbm9ybWFsKHNl
bGYpOgorICAgICAgICBwYXNzCisKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICBw
b3J0X3Rlc3RjYXNlLm1haW4oKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9wb3J0X3Rlc3RjYXNlLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9wb3J0X3Rlc3RjYXNlLnB5CmluZGV4IGY2MTczN2QzYTYxOTQ0
ODNlMmI1OWUxMTcwZTlkYTIxZDM2ZmIyYjguLjAyNzdkZWYyMzgyYTE1NmFjYjk4YjcwZWQ2ZDFl
ZmQ1Y2NiNDRmOWUgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvcG9ydF90ZXN0Y2FzZS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L3BvcnRfdGVzdGNhc2UucHkKQEAgLTQ4LDcgKzQ4LDYgQEAgbW9ja19v
cHRpb25zID0gbW9ja3Rvb2wuTW9ja09wdGlvbnMoY29uZmlndXJhdGlvbj0nUmVsZWFzZScpCiAK
IGNsYXNzIFBvcnRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIiIiVGVzdHMgdGhh
dCBhbGwgUG9ydCBpbXBsZW1lbnRhdGlvbnMgbXVzdCBwYXNzLiIiIgotCiAgICAgSFRUUF9QT1JU
UyA9IFs4MDAwLCA4MDgwLCA4NDQzXQogICAgIFdFQlNPQ0tFVF9QT1JUUyA9IFs4ODgwXQogCkBA
IC0xMzMsMjIgKzEzMiwyNiBAQCBjbGFzcyBQb3J0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2Up
OgogICAgICAgICBwb3J0LnN0YXJ0X2hlbHBlcigpCiAgICAgICAgIHBvcnQuc3RvcF9oZWxwZXIo
KQogCi0gICAgZGVmIGludGVncmF0aW9uX3Rlc3RfaHR0cF9zZXJ2ZXJfX25vcm1hbChzZWxmKToK
LSAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKLSAgICAgICAgaWYgbm90IHBvcnQ6Ci0g
ICAgICAgICAgICByZXR1cm4KLQorICAgIGRlZiBkb190ZXN0X2h0dHBfc2VydmVyX19ub3JtYWwo
c2VsZiwgcG9ydCk6CiAgICAgICAgIHNlbGYuYXNzZXJ0X3NlcnZlcnNfYXJlX2Rvd24oJ2xvY2Fs
aG9zdCcsIHNlbGYuSFRUUF9QT1JUUykKICAgICAgICAgcG9ydC5zdGFydF9odHRwX3NlcnZlcigp
CiAgICAgICAgIHNlbGYuYXNzZXJ0X3NlcnZlcnNfYXJlX3VwKCdsb2NhbGhvc3QnLCBzZWxmLkhU
VFBfUE9SVFMpCiAgICAgICAgIHBvcnQuc3RvcF9odHRwX3NlcnZlcigpCiAgICAgICAgIHNlbGYu
YXNzZXJ0X3NlcnZlcnNfYXJlX2Rvd24oJ2xvY2FsaG9zdCcsIHNlbGYuSFRUUF9QT1JUUykKIAot
ICAgIGRlZiBpbnRlZ3JhdGlvbl90ZXN0X2h0dHBfc2VydmVyX19mYWlscyhzZWxmKToKLSAgICAg
ICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKKyAgICBkZWYgaW50ZWdyYXRpb25fdGVzdF9hcGFj
aGVfc2VydmVyX19ub3JtYWwoc2VsZik6CisgICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydChv
cHRpb25zPW1vY2t0b29sLk1vY2tPcHRpb25zKGNvbmZpZ3VyYXRpb249J1JlbGVhc2UnLCB1c2Vf
YXBhY2hlPVRydWUpKQogICAgICAgICBpZiBub3QgcG9ydDoKICAgICAgICAgICAgIHJldHVybgor
ICAgICAgICBzZWxmLmRvX3Rlc3RfaHR0cF9zZXJ2ZXJfX25vcm1hbChwb3J0KQogCisgICAgZGVm
IGludGVncmF0aW9uX3Rlc3RfbGlnaHR0cGRfc2VydmVyX19ub3JtYWwoc2VsZik6CisgICAgICAg
IHBvcnQgPSBzZWxmLm1ha2VfcG9ydChvcHRpb25zPW1vY2t0b29sLk1vY2tPcHRpb25zKGNvbmZp
Z3VyYXRpb249J1JlbGVhc2UnLCB1c2VfYXBhY2hlPUZhbHNlKSkKKyAgICAgICAgaWYgbm90IHBv
cnQ6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5kb190ZXN0X2h0dHBfc2VydmVy
X19ub3JtYWwocG9ydCkKKworICAgIGRlZiBkb190ZXN0X2h0dHBfc2VydmVyX19mYWlscyhzZWxm
LCBwb3J0KToKICAgICAgICAgIyBUZXN0IHRoYXQgaWYgYSBwb3J0IGlzbid0IGF2YWlsYWJsZSwg
dGhlIGNhbGwgZmFpbHMuCiAgICAgICAgIGZvciBwb3J0X251bWJlciBpbiBzZWxmLkhUVFBfUE9S
VFM6CiAgICAgICAgICAgICBzID0gc29ja2V0LnNvY2tldCgpCkBAIC0xODIsNiArMTg1LDE4IEBA
IGNsYXNzIFBvcnRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICMgVGVzdCB0
aGF0IGNhbGxpbmcgc3RvcCgpIHR3aWNlIGlzIGhhcm1sZXNzLgogICAgICAgICBwb3J0LnN0b3Bf
aHR0cF9zZXJ2ZXIoKQogCisgICAgZGVmIGludGVncmF0aW9uX3Rlc3RfYXBhY2hlX3NlcnZlcl9f
ZmFpbHMoc2VsZik6CisgICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydChvcHRpb25zPW1vY2t0
b29sLk1vY2tPcHRpb25zKGNvbmZpZ3VyYXRpb249J1JlbGVhc2UnLCB1c2VfYXBhY2hlPVRydWUp
KQorICAgICAgICBpZiBub3QgcG9ydDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxm
LmRvX3Rlc3RfaHR0cF9zZXJ2ZXJfX2ZhaWxzKHBvcnQpCisKKyAgICBkZWYgaW50ZWdyYXRpb25f
dGVzdF9saWdodHRwZF9zZXJ2ZXJfX2ZhaWxzKHNlbGYpOgorICAgICAgICBwb3J0ID0gc2VsZi5t
YWtlX3BvcnQob3B0aW9ucz1tb2NrdG9vbC5Nb2NrT3B0aW9ucyhjb25maWd1cmF0aW9uPSdSZWxl
YXNlJywgdXNlX2FwYWNoZT1GYWxzZSkpCisgICAgICAgIGlmIG5vdCBwb3J0OgorICAgICAgICAg
ICAgcmV0dXJuCisgICAgICAgIHNlbGYuZG9fdGVzdF9odHRwX3NlcnZlcl9fZmFpbHMocG9ydCkK
KwogICAgIGRlZiBpbnRlZ3JhdGlvbl90ZXN0X2ltYWdlX2RpZmYoc2VsZik6CiAgICAgICAgIHBv
cnQgPSBzZWxmLm1ha2VfcG9ydCgpCiAgICAgICAgIGlmIG5vdCBwb3J0OgpkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJzb2NrZXRfc2VydmVy
LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJzb2NrZXRf
c2VydmVyLnB5CmluZGV4IGE1OWNiMWZhZGI4Yzg3NzY3NWQwMjExNDMxMzFiNjgzNjE5ZTBlMmUu
LmE3ZDZkOWJjMjI1OWUwZTkxZTI1YTUzNjE3Mzc5ZTU3NmI0Mzk3NDkgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Vic29ja2V0X3NlcnZlci5w
eQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYnNvY2tl
dF9zZXJ2ZXIucHkKQEAgLTIwOSw5ICsyMDksNyBAQCBjbGFzcyBQeVdlYlNvY2tldChodHRwX3Nl
cnZlci5MaWdodHRwZCk6CiAgICAgICAgIHVybCA9IHVybCArICc6Ly8xMjcuMC4wLjE6JWQvJyAl
IHNlbGYuX3BvcnQKICAgICAgICAgaWYgbm90IHVybF9pc19hbGl2ZSh1cmwpOgogICAgICAgICAg
ICAgaWYgc2VsZi5fcHJvY2Vzcy5yZXR1cm5jb2RlID09IE5vbmU6Ci0gICAgICAgICAgICAgICAg
IyBGSVhNRTogV2Ugc2hvdWxkIHVzZSBhIG5vbi1zdGF0aWMgRXhlY3V0aXZlIGZvciBlYXNpZXIK
LSAgICAgICAgICAgICAgICAjIHRlc3RpbmcuCi0gICAgICAgICAgICAgICAgRXhlY3V0aXZlKCku
a2lsbF9wcm9jZXNzKHNlbGYuX3Byb2Nlc3MucGlkKQorICAgICAgICAgICAgICAgIHNlbGYuX2V4
ZWN1dGl2ZS5raWxsX3Byb2Nlc3Moc2VsZi5fcHJvY2Vzcy5waWQpCiAgICAgICAgICAgICB3aXRo
IGNvZGVjcy5vcGVuKG91dHB1dF9sb2csICJyIiwgInV0Zi04IikgYXMgZnA6CiAgICAgICAgICAg
ICAgICAgZm9yIGxpbmUgaW4gZnA6CiAgICAgICAgICAgICAgICAgICAgIF9sb2cuZXJyb3IobGlu
ZSkKQEAgLTIyNyw4ICsyMjUsOCBAQCBjbGFzcyBQeVdlYlNvY2tldChodHRwX3NlcnZlci5MaWdo
dHRwZCk6CiAgICAgICAgICAgICB3aXRoIGNvZGVjcy5vcGVuKHNlbGYuX3BpZGZpbGUsICJ3Iiwg
ImFzY2lpIikgYXMgZmlsZToKICAgICAgICAgICAgICAgICBmaWxlLndyaXRlKCIlZCIgJSBzZWxm
Ll9wcm9jZXNzLnBpZCkKIAotICAgIGRlZiBzdG9wKHNlbGYsIGZvcmNlPUZhbHNlKToKLSAgICAg
ICAgaWYgbm90IGZvcmNlIGFuZCBub3Qgc2VsZi5pc19ydW5uaW5nKCk6CisgICAgZGVmIHN0b3Ao
c2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLmlzX3J1bm5pbmcoKToKICAgICAgICAgICAgIHJl
dHVybgogCiAgICAgICAgIHBpZCA9IE5vbmUKQEAgLTI0Myw4ICsyNDEsNyBAQCBjbGFzcyBQeVdl
YlNvY2tldChodHRwX3NlcnZlci5MaWdodHRwZCk6CiAgICAgICAgICAgICAgICAgJ0ZhaWxlZCB0
byBmaW5kICVzIHNlcnZlciBwaWQuJyAlIHNlbGYuX3NlcnZlcl9uYW1lKQogCiAgICAgICAgIF9s
b2cuZGVidWcoJ1NodXR0aW5nIGRvd24gJXMgc2VydmVyICVkLicgJSAoc2VsZi5fc2VydmVyX25h
bWUsIHBpZCkpCi0gICAgICAgICMgRklYTUU6IFdlIHNob3VsZCB1c2UgYSBub24tc3RhdGljIEV4
ZWN1dGl2ZSBmb3IgZWFzaWVyIHRlc3RpbmcuCi0gICAgICAgIEV4ZWN1dGl2ZSgpLmtpbGxfcHJv
Y2VzcyhwaWQpCisgICAgICAgIHNlbGYuX2V4ZWN1dGl2ZS5raWxsX3Byb2Nlc3MocGlkKQogCiAg
ICAgICAgIGlmIHNlbGYuX3Byb2Nlc3M6CiAgICAgICAgICAgICAjIHdhaXQoKSBpcyBub3QgdGhy
ZWFkc2FmZSBhbmQgY2FuIHRocm93IE9TRXJyb3IgZHVlIHRvOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96519</attachid>
            <date>2011-06-08 17:54:39 -0700</date>
            <delta_ts>2011-06-10 20:37:59 -0700</delta_ts>
            <desc>update w/ review feedback</desc>
            <filename>bug-62251-20110608175437.patch</filename>
            <type>text/plain</type>
            <size>16573</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODgyODgKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA3ZDYwMTQ4ZDA2OWM5MDQ2YjZjOTI4Y2NlNWFkOGRmYWM5
YTM5NGFlLi5hNjE4ZDQ1NzZlY2JlMDJhODhmYmQ4ODQ3NTljMTgzNDA3YmYyNGM4IDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjMg
QEAKIDIwMTEtMDYtMDcgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgd2Via2l0cHk6IGFk
ZCBpbnRlZ3JhdGlvbiB0ZXN0cyBmb3IgbmV3LXJ1bi13ZWJraXQtaHR0cGQsIHN0b3AgY2FsbGlu
ZyBzaHV0X2Rvd25faHR0cF9zZXJ2ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTYyMjUxCisKKyAgICAgICAgc2h1dF9kb3duX2h0dHBfc2VydmVyKCkg
d2FzIGEgdG90YWwgaGFjayB0aGF0IHdhcyBvbmx5IHVzZWQgYnkKKyAgICAgICAgbmV3LXJ1bi13
ZWJraXQtaHR0cGQsIHNvIEkndmUgbW92ZWQgdGhlIGNvZGUgdGhlcmUgYW5kIHN3aXRjaGVkCisg
ICAgICAgIHRvIHVzaW5nIGV4ZWN1dGl2ZS5raWxsX3Byb2Nlc3MoKSBmb3IgdGhlIGNvbW1vbiBj
YXNlLiBUaGUKKyAgICAgICAgbWV0aG9kIGl0c2VsZiB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIHBh
dGNoIG9uIGJ1ZyA1OTk5My4KKworICAgICAgICAqIFNjcmlwdHMvbmV3LXJ1bi13ZWJraXQtaHR0
cGQ6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9hcGFjaGVf
aHR0cF9zZXJ2ZXIucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9odHRwX3NlcnZlci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2h0dHBfc2VydmVyX2ludGVncmF0aW9udGVzdC5weTogQWRkZWQuCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJzb2NrZXRfc2VydmVyLnB5
OgorCisyMDExLTA2LTA3ICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgorCiAg
ICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgogCiAgICAgICAgIHdlYmtpdHB5OiBhZGQg
YSBwb3BlbigpIGNhbGwgdG8gZXhlY3V0aXZlCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL25l
dy1ydW4td2Via2l0LWh0dHBkIGIvVG9vbHMvU2NyaXB0cy9uZXctcnVuLXdlYmtpdC1odHRwZApp
bmRleCA0MTIyOTkzYzQ2NjRjZmY3NzQwNWE2ZDNhMzlkOWM5MWVhNWNiZDE0Li5lN2FjNWZlM2U2
ZDBhOTZhYzNiMWVmNGI0YTAzYmNhYmM0YTk0ZjZkIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRz
L25ldy1ydW4td2Via2l0LWh0dHBkCisrKyBiL1Rvb2xzL1NjcmlwdHMvbmV3LXJ1bi13ZWJraXQt
aHR0cGQKQEAgLTcwLDggKzcwLDEyIEBAIGRlZiBydW4ob3B0aW9ucyk6CiAgICAgICAgIGlmIG9w
dGlvbnMuc2VydmVyID09ICdzdGFydCc6CiAgICAgICAgICAgICBodHRwZC5zdGFydCgpCiAgICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICBodHRwZC5zdG9wKGZvcmNlPVRydWUpCi0KKyAgICAgICAg
ICAgICMgRklYTUU6IFdlIHVzZSBfc2h1dF9kb3duX2h0dHBfc2VydmVyKCkgaW5zdGVhZCBvZiBz
dG9wX2h0dHBfc2VydmVyKCkKKyAgICAgICAgICAgICMgYmVjYXVzZSBzdG9wKCkgb25seSB3b3Jr
cyBpZiBzdGFydCgpIHdhcyBjYWxsZWQgcHJldmlvdXNseSBpbiB0aGUKKyAgICAgICAgICAgICMg
c2FtZSBwcm9jZXNzLiBfc2h1dF9kb3duKCkgaXMgdG9vIGNvYXJzZSBhbmQgbWF5IGtpbGwgdW5y
ZWxhdGVkIAorICAgICAgICAgICAgIyB3ZWIgc2VydmVycywgc28gdGhpcyBpcyBhIGhhY2suIFdl
IHNob3VsZCBjaGFuZ2UgdGhlIGludGVyZmFjZSBzbyB3ZQorICAgICAgICAgICAgIyBjYW4gcmVs
eSBvbiBwaWQgZmlsZXMgb3Igc29tZXRoaW5nLgorICAgICAgICAgICAgcG9ydF9vYmouX3NodXRf
ZG93bl9odHRwX3NlcnZlcihOb25lKQogCiBkZWYgbWFpbigpOgogICAgIG9wdGlvbl9wYXJzZXIg
PSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9hcGFjaGVfaHR0cF9zZXJ2ZXIucHkgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2FwYWNoZV9odHRwX3NlcnZlci5weQppbmRl
eCAwNWEyMzM4MjQ1MGRlY2Q4MGM0MDM0NTk2NDdiNThmMTIxNTQ3MGIxLi45MDkyOTc4ZmYyZGQw
MTYyNzljNWMyZGIzN2MyZTQ3ZTE4ZDUzOGVjIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2FwYWNoZV9odHRwX3NlcnZlci5weQorKysgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2FwYWNoZV9odHRwX3NlcnZlci5w
eQpAQCAtMjI3LDcgKzIyNyw5IEBAIGNsYXNzIExheW91dFRlc3RBcGFjaGVIdHRwZChodHRwX3Nl
cnZlcl9iYXNlLkh0dHBTZXJ2ZXJCYXNlKToKICAgICAgICAgIiIiU3RvcHMgdGhlIGFwYWNoZSBo
dHRwIHNlcnZlci4iIiIKICAgICAgICAgX2xvZy5kZWJ1ZygiU2h1dHRpbmcgZG93biBhbnkgcnVu
bmluZyBodHRwIHNlcnZlcnMiKQogICAgICAgICBodHRwZF9waWQgPSBOb25lCi0gICAgICAgIGlm
IG9zLnBhdGguZXhpc3RzKHNlbGYuX3BpZF9maWxlKToKKyAgICAgICAgaWYgc2VsZi5faHR0cGRf
cHJvYzoKKyAgICAgICAgICAgIGh0dHBkX3BpZCA9IHNlbGYuX2h0dHBkX3Byb2MucGlkCisgICAg
ICAgIGVsaWYgb3MucGF0aC5leGlzdHMoc2VsZi5fcGlkX2ZpbGUpOgogICAgICAgICAgICAgaHR0
cGRfcGlkID0gaW50KG9wZW4oc2VsZi5fcGlkX2ZpbGUpLnJlYWRsaW5lKCkpCi0gICAgICAgICMg
RklYTUU6IFdlIHNob3VsZG4ndCBiZSBjYWxsaW5nIGEgcHJvdGVjdGVkIG1ldGhvZCBvZiBfcG9y
dF9vYmohCi0gICAgICAgIHNlbGYuX3BvcnRfb2JqLl9zaHV0X2Rvd25faHR0cF9zZXJ2ZXIoaHR0
cGRfcGlkKQorICAgICAgICBpZiBodHRwZF9waWQ6CisgICAgICAgICAgICBzZWxmLl9leGVjdXRp
dmUua2lsbF9wcm9jZXNzKGh0dHBkX3BpZCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW1fd2luX3VuaXR0ZXN0LnB5IGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV93aW5fdW5pdHRlc3Qu
cHkKaW5kZXggMTkzYzNlODM5ZWYyYTI5YTFjOTk0YWM2Njk3ZjhmNDFlYTA0N2EyOS4uN2RlNDg5
ZWU0OWI0MmVlOGI1ZGJkMmQ0OWY1Mjk4MDJhNGIxZDA2ZCAxMDA2NDQKLS0tIGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV93aW5fdW5pdHRlc3QucHkK
KysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV93
aW5fdW5pdHRlc3QucHkKQEAgLTEzMCw2ICsxMzAsMTIgQEAgY2xhc3MgQ2hyb21pdW1XaW5UZXN0
KHBvcnRfdGVzdGNhc2UuUG9ydFRlc3RDYXNlKToKICAgICAgICAgcG9ydCA9IGNocm9taXVtX3dp
bi5DaHJvbWl1bVdpblBvcnQocG9ydF9uYW1lPSdjaHJvbWl1bS13aW4td2luNycpCiAgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWxzKHBvcnQuYmFzZWxpbmVfcGF0aCgpLCBwb3J0Ll93ZWJraXRfYmFz
ZWxpbmVfcGF0aCgnY2hyb21pdW0td2luJykpCiAKKyAgICBkZWYgaW50ZWdyYXRpb25fdGVzdF9h
cGFjaGVfc2VydmVyX19mYWlscyhzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGludGVn
cmF0aW9uX3Rlc3RfYXBhY2hlX3NlcnZlcl9fbm9ybWFsKHNlbGYpOgorICAgICAgICBwYXNzCisK
IAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlci5weSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXIucHkKaW5kZXggZTUyNWVl
MGU0OTEyZmUwOTUzOGY3Y2RmZGYzYTFiNjM0ODEyNDMyZC4uM2E1NGM5OWIyMDA4OGIxNzAzMTMy
M2EwMDE2NTU3NzU5MTNlZDJlMSAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVyLnB5CkBAIC0yMjYsMTQgKzIyNiwxNCBA
QCBjbGFzcyBMaWdodHRwZChodHRwX3NlcnZlcl9iYXNlLkh0dHBTZXJ2ZXJCYXNlKToKICAgICAj
IFRPRE8oZGVhbm0pOiBGaW5kIGEgbmljZXIgd2F5IHRvIHNodXRkb3duIGNsZWFubHkuICBPdXIg
bG9nIGZpbGVzIGFyZQogICAgICMgcHJvYmFibHkgbm90IGJlaW5nIGZsdXNoZWQsIGV0Yy4uLiB3
aHkgZG9lc24ndCBvdXIgcHl0aG9uIGhhdmUgb3Mua2lsbCA/CiAKLSAgICBkZWYgc3RvcChzZWxm
LCBmb3JjZT1GYWxzZSk6Ci0gICAgICAgIGlmIG5vdCBmb3JjZSBhbmQgbm90IHNlbGYuaXNfcnVu
bmluZygpOgorICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5pc19ydW5u
aW5nKCk6CiAgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICBodHRwZF9waWQgPSBOb25lCiAg
ICAgICAgIGlmIHNlbGYuX3Byb2Nlc3M6CiAgICAgICAgICAgICBodHRwZF9waWQgPSBzZWxmLl9w
cm9jZXNzLnBpZAotICAgICAgICBzZWxmLl9wb3J0X29iai5fc2h1dF9kb3duX2h0dHBfc2VydmVy
KGh0dHBkX3BpZCkKKyAgICAgICAgc2VsZi5fZXhlY3V0aXZlLmtpbGxfcHJvY2VzcyhodHRwZF9w
aWQpCiAKICAgICAgICAgaWYgc2VsZi5fcHJvY2VzczoKICAgICAgICAgICAgICMgd2FpdCgpIGlz
IG5vdCB0aHJlYWRzYWZlIGFuZCBjYW4gdGhyb3cgT1NFcnJvciBkdWUgdG86CmRpZmYgLS1naXQg
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVyX2Jh
c2UucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfc2Vy
dmVyX2Jhc2UucHkKaW5kZXggMmE0M2U4MTk3OGI5MmM2Y2E2ODFhOGE0YzI4Zjk5YjgzYjg3NmVi
Yi4uOGUzZDIwNjU4ZWViNDI1NWFlMTI5M2I2OWUxZjM4MGMzMmFiZDQ1MCAxMDA2NDQKLS0tIGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlcl9iYXNl
LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9z
ZXJ2ZXJfYmFzZS5weQpAQCAtNDMsNiArNDMsNyBAQCBjbGFzcyBIdHRwU2VydmVyQmFzZShvYmpl
Y3QpOgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfb2JqKToKICAgICAgICAgc2VsZi5f
cG9ydF9vYmogPSBwb3J0X29iagorICAgICAgICBzZWxmLl9leGVjdXRpdmUgPSBwb3J0X29iai5f
ZXhlY3V0aXZlCiAKICAgICBkZWYgd2FpdF9mb3JfYWN0aW9uKHNlbGYsIGFjdGlvbik6CiAgICAg
ICAgICIiIlJlcGVhdCB0aGUgYWN0aW9uIGZvciAyMCBzZWNvbmRzIG9yIHVudGlsIGl0IHN1Y2Nl
ZWRzLiBSZXR1cm5zCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2h0dHBfc2VydmVyX2ludGVncmF0aW9udGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXJfaW50ZWdyYXRpb250ZXN0LnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjE3N2ViY2Y0NzViZTYyZDRjYTRkMWNiNDhhZDRmNTJlZDVjNzU0YjUKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2h0dHBfc2VydmVyX2ludGVncmF0aW9udGVzdC5weQpAQCAtMCwwICsxLDEyNiBAQAorIyBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKKyIiIkludGVncmF0aW9uIHRlc3RpbmcgZm9yIHRoZSBuZXctcnVuLXdlYmtpdC1o
dHRwZCBzY3JpcHQiIiIKKworaW1wb3J0IGVycm5vCitpbXBvcnQgb3MKK2ltcG9ydCBzb2NrZXQK
K2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCB1
bml0dGVzdAorCitpbXBvcnQgcG9ydF90ZXN0Y2FzZQorCisKK2NsYXNzIExpZ2h0dHBkVGVzdENh
c2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHRoYXQgYWxsIFBvcnQgaW1wbGVt
ZW50YXRpb25zIG11c3QgcGFzcy4iIiIKKyAgICBIVFRQX1BPUlRTID0gWzgwMDAsIDgwODAsIDg0
NDNdCisKKyAgICBkZWYgYXNzZXJ0X3NlcnZlcnNfYXJlX2Rvd24oc2VsZiwgaG9zdCwgcG9ydHMp
OgorICAgICAgICBmb3IgcG9ydCBpbiBwb3J0czoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAg
ICAgICAgICBzID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgICAgICAgICAgcy5jb25uZWN0KCho
b3N0LCBwb3J0KSkKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoKQorICAgICAgICAgICAgZXhj
ZXB0IElPRXJyb3IsIGU6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGUuZXJybm8g
aW4gKGVycm5vLkVDT05OUkVGVVNFRCwgZXJybm8uRUNPTk5SRVNFVCkpCisgICAgICAgICAgICBm
aW5hbGx5OgorICAgICAgICAgICAgICAgIHMuY2xvc2UoKQorCisgICAgZGVmIGFzc2VydF9zZXJ2
ZXJzX2FyZV91cChzZWxmLCBob3N0LCBwb3J0cyk6CisgICAgICAgIGZvciBwb3J0IGluIHBvcnRz
OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KCkK
KyAgICAgICAgICAgICAgICBzLmNvbm5lY3QoKGhvc3QsIHBvcnQpKQorICAgICAgICAgICAgZXhj
ZXB0IElPRXJyb3IsIGU6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdmYWlsZWQgdG8gY29u
bmVjdCB0byAlczolZCcgJSAoaG9zdCwgcG9ydCkpCisgICAgICAgICAgICBmaW5hbGx5OgorICAg
ICAgICAgICAgICAgIHMuY2xvc2UoKQorCisgICAgZGVmIHJ1bl9zY3JpcHQoc2VsZiwgYXJncyk6
CisgICAgICAgIHNjcmlwdF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9z
LnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkp
KSkKKyAgICAgICAgc2NyaXB0X3BhdGggPSBvcy5wYXRoLmpvaW4oc2NyaXB0X2RpciwgJ25ldy1y
dW4td2Via2l0LWh0dHBkJykKKyAgICAgICAgcmV0dXJuIHN1YnByb2Nlc3MuY2FsbChbc3lzLmV4
ZWN1dGFibGUsIHNjcmlwdF9wYXRoXSArIGFyZ3MsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0
ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisKKyAgICBkZWYgaW50ZWdyYXRpb25fdGVzdF9odHRwX3Nl
cnZlcl9fbm9ybWFsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydF9zZXJ2ZXJzX2FyZV9kb3du
KCdsb2NhbGhvc3QnLCBzZWxmLkhUVFBfUE9SVFMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxz
KHNlbGYucnVuX3NjcmlwdChbJy0tc2VydmVyJywgJ3N0YXJ0J10pLCAwKQorICAgICAgICBzZWxm
LmFzc2VydF9zZXJ2ZXJzX2FyZV91cCgnbG9jYWxob3N0Jywgc2VsZi5IVFRQX1BPUlRTKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLnJ1bl9zY3JpcHQoWyctLXNlcnZlcicsICdzdG9w
J10pLCAwKQorICAgICAgICBzZWxmLmFzc2VydF9zZXJ2ZXJzX2FyZV9kb3duKCdsb2NhbGhvc3Qn
LCBzZWxmLkhUVFBfUE9SVFMpCisKKyAgICBkZWYgaW50ZWdyYXRpb25fdGVzdF9odHRwX3NlcnZl
cl9fZmFpbHMoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGlmIGEgcG9ydCBpc24ndCBhdmFp
bGFibGUsIHRoZSBjYWxsIGZhaWxzLgorICAgICAgICBmb3IgcG9ydF9udW1iZXIgaW4gc2VsZi5I
VFRQX1BPUlRTOgorICAgICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICAgICAg
dHJ5OgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcy5iaW5kKCgn
bG9jYWxob3N0JywgcG9ydF9udW1iZXIpKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQu
ZXJyb3IsIGU6CisgICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gaW4gKGVycm5vLkVBRERS
SU5VU0UsIGVycm5vLkVBTFJFQURZKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFp
bCgnY291bGQgbm90IGJpbmQgdG8gcG9ydCAlZDogJXMnICUgKHBvcnRfbnVtYmVyLCBzdHIoZSkp
KQorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKHNlbGYucnVuX3NjcmlwdChbJy0tc2VydmVyJywgJ3N0YXJ0J10pLCAxKQorICAgICAg
ICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzZWxmLnJ1bl9zY3JpcHQoWyctLXNlcnZl
cicsICdzdG9wJ10pCisgICAgICAgICAgICAgICAgcy5jbG9zZSgpCisKKyAgICAgICAgIyBUZXN0
IHRoYXQgY2FsbGluZyBzdGFydCgpIHR3aWNlIGZhaWxzLgorICAgICAgICB0cnk6CisgICAgICAg
ICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLnJ1bl9zY3JpcHQoWyctLXNlcnZlcicsICdzdGFy
dCddKSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYucnVuX3NjcmlwdChb
Jy0tc2VydmVyJywgJ3N0YXJ0J10pLCAxKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAg
c2VsZi5ydW5fc2NyaXB0KFsnLS1zZXJ2ZXInLCAnc3RvcCddKQorCisgICAgICAgICMgVGVzdCB0
aGF0IGNhbGxpbmcgc3RvcCgpIHR3aWNlIGlzIGhhcm1sZXNzLgorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFscyhzZWxmLnJ1bl9zY3JpcHQoWyctLXNlcnZlcicsICdzdG9wJ10pLCAwKQorCisgICAg
ZGVmIG1heWJlX21ha2VfZGlyKHNlbGYsICpjb21wcyk6CisgICAgICAgIHRyeToKKyAgICAgICAg
ICAgIG9zLm1ha2VkaXJzKG9zLnBhdGguam9pbigqY29tcHMpKQorICAgICAgICBleGNlcHQgT1NF
cnJvciwgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUVYSVNUOgorICAgICAg
ICAgICAgICAgIHJhaXNlCisKKyAgICBkZWYgaW50ZWdyYXRpb25fdGVzdF9odHRwX3NlcnZlcl9w
b3J0X2FuZF9yb290KHNlbGYpOgorICAgICAgICB0bXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHBy
ZWZpeD0nd2Via2l0cHl0ZXN0JykKKyAgICAgICAgc2VsZi5tYXliZV9tYWtlX2Rpcih0bXBkaXIs
ICdodHRwJywgJ3Rlc3RzJykKKyAgICAgICAgc2VsZi5tYXliZV9tYWtlX2Rpcih0bXBkaXIsICdm
YXN0JywgJ2pzJywgJ3Jlc291cmNlcycpCisgICAgICAgIHNlbGYubWF5YmVfbWFrZV9kaXIodG1w
ZGlyLCAnbWVkaWEnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0X3NlcnZlcnNfYXJlX2Rvd24oJ2xv
Y2FsaG9zdCcsIFsxODAwMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYucnVuX3Nj
cmlwdChbJy0tc2VydmVyJywgJ3N0YXJ0JywgJy0tcG9ydD0xODAwMCcsICctLXJvb3QnLCB0bXBk
aXJdKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRfc2VydmVyc19hcmVfdXAoJ2xvY2FsaG9zdCcs
IFsxODAwMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYucnVuX3NjcmlwdChbJy0t
c2VydmVyJywgJ3N0b3AnXSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0X3NlcnZlcnNfYXJlX2Rv
d24oJ2xvY2FsaG9zdCcsIFsxODAwMF0pCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoK
KyAgICBwb3J0X3Rlc3RjYXNlLm1haW4oKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9tYWNfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L21hY191bml0dGVzdC5weQppbmRleCBhZTU0N2YyYjk2
Yjg1ZjE0YTZlZmQwNmFhYzFlOTE2YmVhNjc0NWNjLi40MjlkYTRhOWRiMWFiMGZmNGY3YmY5NTk0
MjYyYTA5NDlmMGY4MWQ0IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L21hY191bml0dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L21hY191bml0dGVzdC5weQpAQCAtMTI5LDYgKzEyOSwxMiBAQCBz
dmcvYmF0aWsvdGV4dC9zbWFsbEZvbnRzLnN2ZwogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2Vz
KEFzc2VydGlvbkVycm9yLCBzZWxmLmFzc2VydF9uYW1lLCBOb25lLCAnMTAuMy4xJywgJ3Nob3Vs
ZC1yYWlzZS1hc3NlcnRpb24tc28tdGhpcy12YWx1ZS1kb2VzLW5vdC1tYXR0ZXInKQogCisgICAg
ZGVmIGludGVncmF0aW9uX3Rlc3RfbGlnaHR0cGRfc2VydmVyX19mYWlscyhzZWxmKToKKyAgICAg
ICAgcGFzcworCisgICAgZGVmIGludGVncmF0aW9uX3Rlc3RfbGlnaHR0cGRfc2VydmVyX19ub3Jt
YWwoc2VsZik6CisgICAgICAgIHBhc3MKKwogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgog
ICAgIHBvcnRfdGVzdGNhc2UubWFpbigpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L3BvcnRfdGVzdGNhc2UucHkgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3BvcnRfdGVzdGNhc2UucHkKaW5kZXggZjYxNzM3ZDNh
NjE5NDQ4M2UyYjU5ZTExNzBlOWRhMjFkMzZmYjJiOC4uMDI3N2RlZjIzODJhMTU2YWNiOThiNzBl
ZDZkMWVmZDVjY2I0NGY5ZSAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9wb3J0X3Rlc3RjYXNlLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvcG9ydF90ZXN0Y2FzZS5weQpAQCAtNDgsNyArNDgsNiBAQCBt
b2NrX29wdGlvbnMgPSBtb2NrdG9vbC5Nb2NrT3B0aW9ucyhjb25maWd1cmF0aW9uPSdSZWxlYXNl
JykKIAogY2xhc3MgUG9ydFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAiIiJUZXN0
cyB0aGF0IGFsbCBQb3J0IGltcGxlbWVudGF0aW9ucyBtdXN0IHBhc3MuIiIiCi0KICAgICBIVFRQ
X1BPUlRTID0gWzgwMDAsIDgwODAsIDg0NDNdCiAgICAgV0VCU09DS0VUX1BPUlRTID0gWzg4ODBd
CiAKQEAgLTEzMywyMiArMTMyLDI2IEBAIGNsYXNzIFBvcnRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0
Q2FzZSk6CiAgICAgICAgIHBvcnQuc3RhcnRfaGVscGVyKCkKICAgICAgICAgcG9ydC5zdG9wX2hl
bHBlcigpCiAKLSAgICBkZWYgaW50ZWdyYXRpb25fdGVzdF9odHRwX3NlcnZlcl9fbm9ybWFsKHNl
bGYpOgotICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQotICAgICAgICBpZiBub3QgcG9y
dDoKLSAgICAgICAgICAgIHJldHVybgotCisgICAgZGVmIGRvX3Rlc3RfaHR0cF9zZXJ2ZXJfX25v
cm1hbChzZWxmLCBwb3J0KToKICAgICAgICAgc2VsZi5hc3NlcnRfc2VydmVyc19hcmVfZG93bign
bG9jYWxob3N0Jywgc2VsZi5IVFRQX1BPUlRTKQogICAgICAgICBwb3J0LnN0YXJ0X2h0dHBfc2Vy
dmVyKCkKICAgICAgICAgc2VsZi5hc3NlcnRfc2VydmVyc19hcmVfdXAoJ2xvY2FsaG9zdCcsIHNl
bGYuSFRUUF9QT1JUUykKICAgICAgICAgcG9ydC5zdG9wX2h0dHBfc2VydmVyKCkKICAgICAgICAg
c2VsZi5hc3NlcnRfc2VydmVyc19hcmVfZG93bignbG9jYWxob3N0Jywgc2VsZi5IVFRQX1BPUlRT
KQogCi0gICAgZGVmIGludGVncmF0aW9uX3Rlc3RfaHR0cF9zZXJ2ZXJfX2ZhaWxzKHNlbGYpOgot
ICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQorICAgIGRlZiBpbnRlZ3JhdGlvbl90ZXN0
X2FwYWNoZV9zZXJ2ZXJfX25vcm1hbChzZWxmKToKKyAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9w
b3J0KG9wdGlvbnM9bW9ja3Rvb2wuTW9ja09wdGlvbnMoY29uZmlndXJhdGlvbj0nUmVsZWFzZScs
IHVzZV9hcGFjaGU9VHJ1ZSkpCiAgICAgICAgIGlmIG5vdCBwb3J0OgogICAgICAgICAgICAgcmV0
dXJuCisgICAgICAgIHNlbGYuZG9fdGVzdF9odHRwX3NlcnZlcl9fbm9ybWFsKHBvcnQpCiAKKyAg
ICBkZWYgaW50ZWdyYXRpb25fdGVzdF9saWdodHRwZF9zZXJ2ZXJfX25vcm1hbChzZWxmKToKKyAg
ICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KG9wdGlvbnM9bW9ja3Rvb2wuTW9ja09wdGlvbnMo
Y29uZmlndXJhdGlvbj0nUmVsZWFzZScsIHVzZV9hcGFjaGU9RmFsc2UpKQorICAgICAgICBpZiBu
b3QgcG9ydDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLmRvX3Rlc3RfaHR0cF9z
ZXJ2ZXJfX25vcm1hbChwb3J0KQorCisgICAgZGVmIGRvX3Rlc3RfaHR0cF9zZXJ2ZXJfX2ZhaWxz
KHNlbGYsIHBvcnQpOgogICAgICAgICAjIFRlc3QgdGhhdCBpZiBhIHBvcnQgaXNuJ3QgYXZhaWxh
YmxlLCB0aGUgY2FsbCBmYWlscy4KICAgICAgICAgZm9yIHBvcnRfbnVtYmVyIGluIHNlbGYuSFRU
UF9QT1JUUzoKICAgICAgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KCkKQEAgLTE4Miw2ICsxODUs
MTggQEAgY2xhc3MgUG9ydFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgIyBU
ZXN0IHRoYXQgY2FsbGluZyBzdG9wKCkgdHdpY2UgaXMgaGFybWxlc3MuCiAgICAgICAgIHBvcnQu
c3RvcF9odHRwX3NlcnZlcigpCiAKKyAgICBkZWYgaW50ZWdyYXRpb25fdGVzdF9hcGFjaGVfc2Vy
dmVyX19mYWlscyhzZWxmKToKKyAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KG9wdGlvbnM9
bW9ja3Rvb2wuTW9ja09wdGlvbnMoY29uZmlndXJhdGlvbj0nUmVsZWFzZScsIHVzZV9hcGFjaGU9
VHJ1ZSkpCisgICAgICAgIGlmIG5vdCBwb3J0OgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAg
IHNlbGYuZG9fdGVzdF9odHRwX3NlcnZlcl9fZmFpbHMocG9ydCkKKworICAgIGRlZiBpbnRlZ3Jh
dGlvbl90ZXN0X2xpZ2h0dHBkX3NlcnZlcl9fZmFpbHMoc2VsZik6CisgICAgICAgIHBvcnQgPSBz
ZWxmLm1ha2VfcG9ydChvcHRpb25zPW1vY2t0b29sLk1vY2tPcHRpb25zKGNvbmZpZ3VyYXRpb249
J1JlbGVhc2UnLCB1c2VfYXBhY2hlPUZhbHNlKSkKKyAgICAgICAgaWYgbm90IHBvcnQ6CisgICAg
ICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5kb190ZXN0X2h0dHBfc2VydmVyX19mYWlscyhw
b3J0KQorCiAgICAgZGVmIGludGVncmF0aW9uX3Rlc3RfaW1hZ2VfZGlmZihzZWxmKToKICAgICAg
ICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKICAgICAgICAgaWYgbm90IHBvcnQ6CmRpZmYgLS1n
aXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYnNvY2tldF9z
ZXJ2ZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYnNv
Y2tldF9zZXJ2ZXIucHkKaW5kZXggYTU5Y2IxZmFkYjhjODc3Njc1ZDAyMTE0MzEzMWI2ODM2MTll
MGUyZS4uYTdkNmQ5YmMyMjU5ZTBlOTFlMjVhNTM2MTczNzllNTc2YjQzOTc0OSAxMDA2NDQKLS0t
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJzb2NrZXRfc2Vy
dmVyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Vi
c29ja2V0X3NlcnZlci5weQpAQCAtMjA5LDkgKzIwOSw3IEBAIGNsYXNzIFB5V2ViU29ja2V0KGh0
dHBfc2VydmVyLkxpZ2h0dHBkKToKICAgICAgICAgdXJsID0gdXJsICsgJzovLzEyNy4wLjAuMTol
ZC8nICUgc2VsZi5fcG9ydAogICAgICAgICBpZiBub3QgdXJsX2lzX2FsaXZlKHVybCk6CiAgICAg
ICAgICAgICBpZiBzZWxmLl9wcm9jZXNzLnJldHVybmNvZGUgPT0gTm9uZToKLSAgICAgICAgICAg
ICAgICAjIEZJWE1FOiBXZSBzaG91bGQgdXNlIGEgbm9uLXN0YXRpYyBFeGVjdXRpdmUgZm9yIGVh
c2llcgotICAgICAgICAgICAgICAgICMgdGVzdGluZy4KLSAgICAgICAgICAgICAgICBFeGVjdXRp
dmUoKS5raWxsX3Byb2Nlc3Moc2VsZi5fcHJvY2Vzcy5waWQpCisgICAgICAgICAgICAgICAgc2Vs
Zi5fZXhlY3V0aXZlLmtpbGxfcHJvY2VzcyhzZWxmLl9wcm9jZXNzLnBpZCkKICAgICAgICAgICAg
IHdpdGggY29kZWNzLm9wZW4ob3V0cHV0X2xvZywgInIiLCAidXRmLTgiKSBhcyBmcDoKICAgICAg
ICAgICAgICAgICBmb3IgbGluZSBpbiBmcDoKICAgICAgICAgICAgICAgICAgICAgX2xvZy5lcnJv
cihsaW5lKQpAQCAtMjI3LDggKzIyNSw4IEBAIGNsYXNzIFB5V2ViU29ja2V0KGh0dHBfc2VydmVy
LkxpZ2h0dHBkKToKICAgICAgICAgICAgIHdpdGggY29kZWNzLm9wZW4oc2VsZi5fcGlkZmlsZSwg
InciLCAiYXNjaWkiKSBhcyBmaWxlOgogICAgICAgICAgICAgICAgIGZpbGUud3JpdGUoIiVkIiAl
IHNlbGYuX3Byb2Nlc3MucGlkKQogCi0gICAgZGVmIHN0b3Aoc2VsZiwgZm9yY2U9RmFsc2UpOgot
ICAgICAgICBpZiBub3QgZm9yY2UgYW5kIG5vdCBzZWxmLmlzX3J1bm5pbmcoKToKKyAgICBkZWYg
c3RvcChzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuaXNfcnVubmluZygpOgogICAgICAgICAg
ICAgcmV0dXJuCiAKICAgICAgICAgcGlkID0gTm9uZQpAQCAtMjQzLDggKzI0MSw3IEBAIGNsYXNz
IFB5V2ViU29ja2V0KGh0dHBfc2VydmVyLkxpZ2h0dHBkKToKICAgICAgICAgICAgICAgICAnRmFp
bGVkIHRvIGZpbmQgJXMgc2VydmVyIHBpZC4nICUgc2VsZi5fc2VydmVyX25hbWUpCiAKICAgICAg
ICAgX2xvZy5kZWJ1ZygnU2h1dHRpbmcgZG93biAlcyBzZXJ2ZXIgJWQuJyAlIChzZWxmLl9zZXJ2
ZXJfbmFtZSwgcGlkKSkKLSAgICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIHVzZSBhIG5vbi1zdGF0
aWMgRXhlY3V0aXZlIGZvciBlYXNpZXIgdGVzdGluZy4KLSAgICAgICAgRXhlY3V0aXZlKCkua2ls
bF9wcm9jZXNzKHBpZCkKKyAgICAgICAgc2VsZi5fZXhlY3V0aXZlLmtpbGxfcHJvY2VzcyhwaWQp
CiAKICAgICAgICAgaWYgc2VsZi5fcHJvY2VzczoKICAgICAgICAgICAgICMgd2FpdCgpIGlzIG5v
dCB0aHJlYWRzYWZlIGFuZCBjYW4gdGhyb3cgT1NFcnJvciBkdWUgdG86Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96839</attachid>
            <date>2011-06-10 20:38:02 -0700</date>
            <delta_ts>2011-06-10 20:45:49 -0700</delta_ts>
            <desc>update w/ more review feedback</desc>
            <filename>bug-62251-20110610203801.patch</filename>
            <type>text/plain</type>
            <size>16325</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODgyODgKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA3ZDYwMTQ4ZDA2OWM5MDQ2YjZjOTI4Y2NlNWFkOGRmYWM5
YTM5NGFlLi5hNjE4ZDQ1NzZlY2JlMDJhODhmYmQ4ODQ3NTljMTgzNDA3YmYyNGM4IDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjMg
QEAKIDIwMTEtMDYtMDcgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgd2Via2l0cHk6IGFk
ZCBpbnRlZ3JhdGlvbiB0ZXN0cyBmb3IgbmV3LXJ1bi13ZWJraXQtaHR0cGQsIHN0b3AgY2FsbGlu
ZyBzaHV0X2Rvd25faHR0cF9zZXJ2ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTYyMjUxCisKKyAgICAgICAgc2h1dF9kb3duX2h0dHBfc2VydmVyKCkg
d2FzIGEgdG90YWwgaGFjayB0aGF0IHdhcyBvbmx5IHVzZWQgYnkKKyAgICAgICAgbmV3LXJ1bi13
ZWJraXQtaHR0cGQsIHNvIEkndmUgbW92ZWQgdGhlIGNvZGUgdGhlcmUgYW5kIHN3aXRjaGVkCisg
ICAgICAgIHRvIHVzaW5nIGV4ZWN1dGl2ZS5raWxsX3Byb2Nlc3MoKSBmb3IgdGhlIGNvbW1vbiBj
YXNlLiBUaGUKKyAgICAgICAgbWV0aG9kIGl0c2VsZiB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIHBh
dGNoIG9uIGJ1ZyA1OTk5My4KKworICAgICAgICAqIFNjcmlwdHMvbmV3LXJ1bi13ZWJraXQtaHR0
cGQ6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9hcGFjaGVf
aHR0cF9zZXJ2ZXIucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9odHRwX3NlcnZlci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2h0dHBfc2VydmVyX2ludGVncmF0aW9udGVzdC5weTogQWRkZWQuCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJzb2NrZXRfc2VydmVyLnB5
OgorCisyMDExLTA2LTA3ICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgorCiAg
ICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgogCiAgICAgICAgIHdlYmtpdHB5OiBhZGQg
YSBwb3BlbigpIGNhbGwgdG8gZXhlY3V0aXZlCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL25l
dy1ydW4td2Via2l0LWh0dHBkIGIvVG9vbHMvU2NyaXB0cy9uZXctcnVuLXdlYmtpdC1odHRwZApp
bmRleCA0MTIyOTkzYzQ2NjRjZmY3NzQwNWE2ZDNhMzlkOWM5MWVhNWNiZDE0Li5lN2FjNWZlM2U2
ZDBhOTZhYzNiMWVmNGI0YTAzYmNhYmM0YTk0ZjZkIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRz
L25ldy1ydW4td2Via2l0LWh0dHBkCisrKyBiL1Rvb2xzL1NjcmlwdHMvbmV3LXJ1bi13ZWJraXQt
aHR0cGQKQEAgLTcwLDggKzcwLDEyIEBAIGRlZiBydW4ob3B0aW9ucyk6CiAgICAgICAgIGlmIG9w
dGlvbnMuc2VydmVyID09ICdzdGFydCc6CiAgICAgICAgICAgICBodHRwZC5zdGFydCgpCiAgICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICBodHRwZC5zdG9wKGZvcmNlPVRydWUpCi0KKyAgICAgICAg
ICAgICMgRklYTUU6IFdlIHVzZSBfc2h1dF9kb3duX2h0dHBfc2VydmVyKCkgaW5zdGVhZCBvZiBz
dG9wX2h0dHBfc2VydmVyKCkKKyAgICAgICAgICAgICMgYmVjYXVzZSBzdG9wKCkgb25seSB3b3Jr
cyBpZiBzdGFydCgpIHdhcyBjYWxsZWQgcHJldmlvdXNseSBpbiB0aGUKKyAgICAgICAgICAgICMg
c2FtZSBwcm9jZXNzLiBfc2h1dF9kb3duKCkgaXMgdG9vIGNvYXJzZSBhbmQgbWF5IGtpbGwgdW5y
ZWxhdGVkIAorICAgICAgICAgICAgIyB3ZWIgc2VydmVycywgc28gdGhpcyBpcyBhIGhhY2suIFdl
IHNob3VsZCBjaGFuZ2UgdGhlIGludGVyZmFjZSBzbyB3ZQorICAgICAgICAgICAgIyBjYW4gcmVs
eSBvbiBwaWQgZmlsZXMgb3Igc29tZXRoaW5nLgorICAgICAgICAgICAgcG9ydF9vYmouX3NodXRf
ZG93bl9odHRwX3NlcnZlcihOb25lKQogCiBkZWYgbWFpbigpOgogICAgIG9wdGlvbl9wYXJzZXIg
PSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9hcGFjaGVfaHR0cF9zZXJ2ZXIucHkgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2FwYWNoZV9odHRwX3NlcnZlci5weQppbmRl
eCAwNWEyMzM4MjQ1MGRlY2Q4MGM0MDM0NTk2NDdiNThmMTIxNTQ3MGIxLi45MDkyOTc4ZmYyZGQw
MTYyNzljNWMyZGIzN2MyZTQ3ZTE4ZDUzOGVjIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2FwYWNoZV9odHRwX3NlcnZlci5weQorKysgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2FwYWNoZV9odHRwX3NlcnZlci5w
eQpAQCAtMjI3LDcgKzIyNyw5IEBAIGNsYXNzIExheW91dFRlc3RBcGFjaGVIdHRwZChodHRwX3Nl
cnZlcl9iYXNlLkh0dHBTZXJ2ZXJCYXNlKToKICAgICAgICAgIiIiU3RvcHMgdGhlIGFwYWNoZSBo
dHRwIHNlcnZlci4iIiIKICAgICAgICAgX2xvZy5kZWJ1ZygiU2h1dHRpbmcgZG93biBhbnkgcnVu
bmluZyBodHRwIHNlcnZlcnMiKQogICAgICAgICBodHRwZF9waWQgPSBOb25lCi0gICAgICAgIGlm
IG9zLnBhdGguZXhpc3RzKHNlbGYuX3BpZF9maWxlKToKKyAgICAgICAgaWYgc2VsZi5faHR0cGRf
cHJvYzoKKyAgICAgICAgICAgIGh0dHBkX3BpZCA9IHNlbGYuX2h0dHBkX3Byb2MucGlkCisgICAg
ICAgIGVsaWYgb3MucGF0aC5leGlzdHMoc2VsZi5fcGlkX2ZpbGUpOgogICAgICAgICAgICAgaHR0
cGRfcGlkID0gaW50KG9wZW4oc2VsZi5fcGlkX2ZpbGUpLnJlYWRsaW5lKCkpCi0gICAgICAgICMg
RklYTUU6IFdlIHNob3VsZG4ndCBiZSBjYWxsaW5nIGEgcHJvdGVjdGVkIG1ldGhvZCBvZiBfcG9y
dF9vYmohCi0gICAgICAgIHNlbGYuX3BvcnRfb2JqLl9zaHV0X2Rvd25faHR0cF9zZXJ2ZXIoaHR0
cGRfcGlkKQorICAgICAgICBpZiBodHRwZF9waWQ6CisgICAgICAgICAgICBzZWxmLl9leGVjdXRp
dmUua2lsbF9wcm9jZXNzKGh0dHBkX3BpZCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXIucHkgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVyLnB5CmluZGV4IGU1MjVlZTBlNDkx
MmZlMDk1MzhmN2NkZmRmM2ExYjYzNDgxMjQzMmQuLjNhNTRjOTliMjAwODhiMTcwMzEzMjNhMDAx
NjU1Nzc1OTEzZWQyZTEgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlci5weQpAQCAtMjI2LDE0ICsyMjYsMTQgQEAgY2xh
c3MgTGlnaHR0cGQoaHR0cF9zZXJ2ZXJfYmFzZS5IdHRwU2VydmVyQmFzZSk6CiAgICAgIyBUT0RP
KGRlYW5tKTogRmluZCBhIG5pY2VyIHdheSB0byBzaHV0ZG93biBjbGVhbmx5LiAgT3VyIGxvZyBm
aWxlcyBhcmUKICAgICAjIHByb2JhYmx5IG5vdCBiZWluZyBmbHVzaGVkLCBldGMuLi4gd2h5IGRv
ZXNuJ3Qgb3VyIHB5dGhvbiBoYXZlIG9zLmtpbGwgPwogCi0gICAgZGVmIHN0b3Aoc2VsZiwgZm9y
Y2U9RmFsc2UpOgotICAgICAgICBpZiBub3QgZm9yY2UgYW5kIG5vdCBzZWxmLmlzX3J1bm5pbmco
KToKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuaXNfcnVubmluZygp
OgogICAgICAgICAgICAgcmV0dXJuCiAKICAgICAgICAgaHR0cGRfcGlkID0gTm9uZQogICAgICAg
ICBpZiBzZWxmLl9wcm9jZXNzOgogICAgICAgICAgICAgaHR0cGRfcGlkID0gc2VsZi5fcHJvY2Vz
cy5waWQKLSAgICAgICAgc2VsZi5fcG9ydF9vYmouX3NodXRfZG93bl9odHRwX3NlcnZlcihodHRw
ZF9waWQpCisgICAgICAgIHNlbGYuX2V4ZWN1dGl2ZS5raWxsX3Byb2Nlc3MoaHR0cGRfcGlkKQog
CiAgICAgICAgIGlmIHNlbGYuX3Byb2Nlc3M6CiAgICAgICAgICAgICAjIHdhaXQoKSBpcyBub3Qg
dGhyZWFkc2FmZSBhbmQgY2FuIHRocm93IE9TRXJyb3IgZHVlIHRvOgpkaWZmIC0tZ2l0IGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlcl9iYXNlLnB5
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlcl9i
YXNlLnB5CmluZGV4IDJhNDNlODE5NzhiOTJjNmNhNjgxYThhNGMyOGY5OWI4M2I4NzZlYmIuLjhl
M2QyMDY1OGVlYjQyNTVhZTEyOTNiNjllMWYzODBjMzJhYmQ0NTAgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXJfYmFzZS5weQor
KysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVy
X2Jhc2UucHkKQEAgLTQzLDYgKzQzLDcgQEAgY2xhc3MgSHR0cFNlcnZlckJhc2Uob2JqZWN0KToK
IAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0X29iaik6CiAgICAgICAgIHNlbGYuX3BvcnRf
b2JqID0gcG9ydF9vYmoKKyAgICAgICAgc2VsZi5fZXhlY3V0aXZlID0gcG9ydF9vYmouX2V4ZWN1
dGl2ZQogCiAgICAgZGVmIHdhaXRfZm9yX2FjdGlvbihzZWxmLCBhY3Rpb24pOgogICAgICAgICAi
IiJSZXBlYXQgdGhlIGFjdGlvbiBmb3IgMjAgc2Vjb25kcyBvciB1bnRpbCBpdCBzdWNjZWVkcy4g
UmV0dXJucwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9odHRwX3NlcnZlcl9pbnRlZ3JhdGlvbnRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVyX2ludGVncmF0aW9udGVzdC5weQpuZXcg
ZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5lMjAyNGZjMTFiYzMzODBkYWNkMTc2OWNmOWRmNjkxNDdhM2U4NTkzCi0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRw
X3NlcnZlcl9pbnRlZ3JhdGlvbnRlc3QucHkKQEAgLTAsMCArMSwxMjYgQEAKKyMgQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMg
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisj
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCisiIiJJbnRlZ3JhdGlvbiB0ZXN0aW5nIGZvciB0aGUgbmV3LXJ1bi13ZWJraXQtaHR0cGQg
c2NyaXB0IiIiCisKK2ltcG9ydCBlcnJubworaW1wb3J0IG9zCitpbXBvcnQgc29ja2V0CitpbXBv
cnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdW5pdHRl
c3QKKworaW1wb3J0IHBvcnRfdGVzdGNhc2UKKworCitjbGFzcyBMaWdodHRwZFRlc3RDYXNlKHVu
aXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyB0aGF0IGFsbCBQb3J0IGltcGxlbWVudGF0
aW9ucyBtdXN0IHBhc3MuIiIiCisgICAgSFRUUF9QT1JUUyA9IFs4MDAwLCA4MDgwLCA4NDQzXQor
CisgICAgZGVmIGFzc2VydF9zZXJ2ZXJzX2FyZV9kb3duKHNlbGYsIGhvc3QsIHBvcnRzKToKKyAg
ICAgICAgZm9yIHBvcnQgaW4gcG9ydHM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAg
ICAgcyA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICAgICAgICAgIHMuY29ubmVjdCgoaG9zdCwg
cG9ydCkpCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCkKKyAgICAgICAgICAgIGV4Y2VwdCBJ
T0Vycm9yLCBlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlLmVycm5vIGluIChl
cnJuby5FQ09OTlJFRlVTRUQsIGVycm5vLkVDT05OUkVTRVQpKQorICAgICAgICAgICAgZmluYWxs
eToKKyAgICAgICAgICAgICAgICBzLmNsb3NlKCkKKworICAgIGRlZiBhc3NlcnRfc2VydmVyc19h
cmVfdXAoc2VsZiwgaG9zdCwgcG9ydHMpOgorICAgICAgICBmb3IgcG9ydCBpbiBwb3J0czoKKyAg
ICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzID0gc29ja2V0LnNvY2tldCgpCisgICAg
ICAgICAgICAgICAgcy5jb25uZWN0KChob3N0LCBwb3J0KSkKKyAgICAgICAgICAgIGV4Y2VwdCBJ
T0Vycm9yLCBlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnZmFpbGVkIHRvIGNvbm5lY3Qg
dG8gJXM6JWQnICUgKGhvc3QsIHBvcnQpKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAg
ICAgICAgICBzLmNsb3NlKCkKKworICAgIGRlZiBydW5fc2NyaXB0KHNlbGYsIGFyZ3MpOgorICAg
ICAgICBzY3JpcHRfZGlyID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRo
LmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykpKSkpCisg
ICAgICAgIHNjcmlwdF9wYXRoID0gb3MucGF0aC5qb2luKHNjcmlwdF9kaXIsICduZXctcnVuLXdl
YmtpdC1odHRwZCcpCisgICAgICAgIHJldHVybiBzdWJwcm9jZXNzLmNhbGwoW3N5cy5leGVjdXRh
YmxlLCBzY3JpcHRfcGF0aF0gKyBhcmdzLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9
c3VicHJvY2Vzcy5QSVBFKQorCisgICAgZGVmIGludGVncmF0aW9uX3Rlc3RfaHR0cF9zZXJ2ZXJf
X25vcm1hbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRfc2VydmVyc19hcmVfZG93bignbG9j
YWxob3N0Jywgc2VsZi5IVFRQX1BPUlRTKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxm
LnJ1bl9zY3JpcHQoWyctLXNlcnZlcicsICdzdGFydCddKSwgMCkKKyAgICAgICAgc2VsZi5hc3Nl
cnRfc2VydmVyc19hcmVfdXAoJ2xvY2FsaG9zdCcsIHNlbGYuSFRUUF9QT1JUUykKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5ydW5fc2NyaXB0KFsnLS1zZXJ2ZXInLCAnc3RvcCddKSwg
MCkKKyAgICAgICAgc2VsZi5hc3NlcnRfc2VydmVyc19hcmVfZG93bignbG9jYWxob3N0Jywgc2Vs
Zi5IVFRQX1BPUlRTKQorCisgICAgZGVmIGludGVncmF0aW9uX3Rlc3RfaHR0cF9zZXJ2ZXJfX2Zh
aWxzKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBpZiBhIHBvcnQgaXNuJ3QgYXZhaWxhYmxl
LCB0aGUgY2FsbCBmYWlscy4KKyAgICAgICAgZm9yIHBvcnRfbnVtYmVyIGluIHNlbGYuSFRUUF9Q
T1JUUzoKKyAgICAgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgICAgIHRyeToK
KyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHMuYmluZCgoJ2xvY2Fs
aG9zdCcsIHBvcnRfbnVtYmVyKSkKKyAgICAgICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9y
LCBlOgorICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vIGluIChlcnJuby5FQUREUklOVVNF
LCBlcnJuby5FQUxSRUFEWSk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ2Nv
dWxkIG5vdCBiaW5kIHRvIHBvcnQgJWQ6ICVzJyAlIChwb3J0X251bWJlciwgc3RyKGUpKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFs
cyhzZWxmLnJ1bl9zY3JpcHQoWyctLXNlcnZlcicsICdzdGFydCddKSwgMSkKKyAgICAgICAgICAg
IGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc2VsZi5ydW5fc2NyaXB0KFsnLS1zZXJ2ZXInLCAn
c3RvcCddKQorICAgICAgICAgICAgICAgIHMuY2xvc2UoKQorCisgICAgICAgICMgVGVzdCB0aGF0
IGNhbGxpbmcgc3RhcnQoKSB0d2ljZSBmYWlscy4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5ydW5fc2NyaXB0KFsnLS1zZXJ2ZXInLCAnc3RhcnQnXSks
IDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLnJ1bl9zY3JpcHQoWyctLXNl
cnZlcicsICdzdGFydCddKSwgMSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYu
cnVuX3NjcmlwdChbJy0tc2VydmVyJywgJ3N0b3AnXSkKKworICAgICAgICAjIFRlc3QgdGhhdCBj
YWxsaW5nIHN0b3AoKSB0d2ljZSBpcyBoYXJtbGVzcy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bHMoc2VsZi5ydW5fc2NyaXB0KFsnLS1zZXJ2ZXInLCAnc3RvcCddKSwgMCkKKworICAgIGRlZiBt
YXliZV9tYWtlX2RpcihzZWxmLCAqY29tcHMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBv
cy5tYWtlZGlycyhvcy5wYXRoLmpvaW4oKmNvbXBzKSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3Is
IGU6CisgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVFWElTVDoKKyAgICAgICAgICAg
ICAgICByYWlzZQorCisgICAgZGVmIGludGVncmF0aW9uX3Rlc3RfaHR0cF9zZXJ2ZXJfcG9ydF9h
bmRfcm9vdChzZWxmKToKKyAgICAgICAgdG1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9
J3dlYmtpdHB5dGVzdCcpCisgICAgICAgIHNlbGYubWF5YmVfbWFrZV9kaXIodG1wZGlyLCAnaHR0
cCcsICd0ZXN0cycpCisgICAgICAgIHNlbGYubWF5YmVfbWFrZV9kaXIodG1wZGlyLCAnZmFzdCcs
ICdqcycsICdyZXNvdXJjZXMnKQorICAgICAgICBzZWxmLm1heWJlX21ha2VfZGlyKHRtcGRpciwg
J21lZGlhJykKKworICAgICAgICBzZWxmLmFzc2VydF9zZXJ2ZXJzX2FyZV9kb3duKCdsb2NhbGhv
c3QnLCBbMTgwMDBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLnJ1bl9zY3JpcHQo
WyctLXNlcnZlcicsICdzdGFydCcsICctLXBvcnQ9MTgwMDAnLCAnLS1yb290JywgdG1wZGlyXSks
IDApCisgICAgICAgIHNlbGYuYXNzZXJ0X3NlcnZlcnNfYXJlX3VwKCdsb2NhbGhvc3QnLCBbMTgw
MDBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLnJ1bl9zY3JpcHQoWyctLXNlcnZl
cicsICdzdG9wJ10pLCAwKQorICAgICAgICBzZWxmLmFzc2VydF9zZXJ2ZXJzX2FyZV9kb3duKCds
b2NhbGhvc3QnLCBbMTgwMDBdKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAg
cG9ydF90ZXN0Y2FzZS5tYWluKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvcG9ydF90ZXN0Y2FzZS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvcG9ydF90ZXN0Y2FzZS5weQppbmRleCBmNjE3MzdkM2E2MTk0
NDgzZTJiNTllMTE3MGU5ZGEyMWQzNmZiMmI4Li4zMzI0MGNkNzdlNzE5YTA2ZjRlYWRkZWMxMzI4
MzlkZTE1ZGI4ODAzIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L3BvcnRfdGVzdGNhc2UucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9wb3J0X3Rlc3RjYXNlLnB5CkBAIC00OCw5ICs0OCw4IEBAIG1vY2tf
b3B0aW9ucyA9IG1vY2t0b29sLk1vY2tPcHRpb25zKGNvbmZpZ3VyYXRpb249J1JlbGVhc2UnKQog
CiBjbGFzcyBQb3J0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICIiIlRlc3RzIHRo
YXQgYWxsIFBvcnQgaW1wbGVtZW50YXRpb25zIG11c3QgcGFzcy4iIiIKLQotICAgIEhUVFBfUE9S
VFMgPSBbODAwMCwgODA4MCwgODQ0M10KLSAgICBXRUJTT0NLRVRfUE9SVFMgPSBbODg4MF0KKyAg
ICBIVFRQX1BPUlRTID0gKDgwMDAsIDgwODAsIDg0NDMpCisgICAgV0VCU09DS0VUX1BPUlRTID0g
KDg4ODAsKQogCiAgICAgZGVmIHBvcnRfbWFrZXIoc2VsZiwgcGxhdGZvcm0pOgogICAgICAgICAi
IiJPdmVycmlkZSB0byByZXR1cm4gdGhlIGNsYXNzIG9iamVjdCBvZiB0aGUgcG9ydCB0byBiZSB0
ZXN0ZWQsCkBAIC05MiwyMyArOTEsMjMgQEAgY2xhc3MgUG9ydFRlc3RDYXNlKHVuaXR0ZXN0LlRl
c3RDYXNlKToKICAgICBkZWYgYXNzZXJ0X3NlcnZlcnNfYXJlX2Rvd24oc2VsZiwgaG9zdCwgcG9y
dHMpOgogICAgICAgICBmb3IgcG9ydCBpbiBwb3J0czoKICAgICAgICAgICAgIHRyeToKLSAgICAg
ICAgICAgICAgICBzID0gc29ja2V0LnNvY2tldCgpCi0gICAgICAgICAgICAgICAgcy5jb25uZWN0
KChob3N0LCBwb3J0KSkKKyAgICAgICAgICAgICAgICB0ZXN0X3NvY2tldCA9IHNvY2tldC5zb2Nr
ZXQoKQorICAgICAgICAgICAgICAgIHRlc3Rfc29ja2V0LmNvbm5lY3QoKGhvc3QsIHBvcnQpKQog
ICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgpCiAgICAgICAgICAgICBleGNlcHQgSU9FcnJvciwg
ZToKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZS5lcnJubyBpbiAoZXJybm8uRUNP
Tk5SRUZVU0VELCBlcnJuby5FQ09OTlJFU0VUKSkKICAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAg
ICAgICAgICAgICAgcy5jbG9zZSgpCisgICAgICAgICAgICAgICAgdGVzdF9zb2NrZXQuY2xvc2Uo
KQogCiAgICAgZGVmIGFzc2VydF9zZXJ2ZXJzX2FyZV91cChzZWxmLCBob3N0LCBwb3J0cyk6CiAg
ICAgICAgIGZvciBwb3J0IGluIHBvcnRzOgogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAg
ICAgIHMgPSBzb2NrZXQuc29ja2V0KCkKLSAgICAgICAgICAgICAgICBzLmNvbm5lY3QoKGhvc3Qs
IHBvcnQpKQorICAgICAgICAgICAgICAgIHRlc3Rfc29ja2V0ID0gc29ja2V0LnNvY2tldCgpCisg
ICAgICAgICAgICAgICAgdGVzdF9zb2NrZXQuY29ubmVjdCgoaG9zdCwgcG9ydCkpCiAgICAgICAg
ICAgICBleGNlcHQgSU9FcnJvciwgZToKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ2ZhaWxl
ZCB0byBjb25uZWN0IHRvICVzOiVkJyAlIChob3N0LCBwb3J0KSkKICAgICAgICAgICAgIGZpbmFs
bHk6Ci0gICAgICAgICAgICAgICAgcy5jbG9zZSgpCisgICAgICAgICAgICAgICAgdGVzdF9zb2Nr
ZXQuY2xvc2UoKQogCiAgICAgZGVmIGludGVncmF0aW9uX3Rlc3RfaHR0cF9sb2NrKHNlbGYpOgog
ICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQpAQCAtMTM3LDcgKzEzNiw2IEBAIGNsYXNz
IFBvcnRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHBvcnQgPSBzZWxmLm1h
a2VfcG9ydCgpCiAgICAgICAgIGlmIG5vdCBwb3J0OgogICAgICAgICAgICAgcmV0dXJuCi0KICAg
ICAgICAgc2VsZi5hc3NlcnRfc2VydmVyc19hcmVfZG93bignbG9jYWxob3N0Jywgc2VsZi5IVFRQ
X1BPUlRTKQogICAgICAgICBwb3J0LnN0YXJ0X2h0dHBfc2VydmVyKCkKICAgICAgICAgc2VsZi5h
c3NlcnRfc2VydmVyc19hcmVfdXAoJ2xvY2FsaG9zdCcsIHNlbGYuSFRUUF9QT1JUUykKQEAgLTE0
OCwxMyArMTQ2LDEyIEBAIGNsYXNzIFBvcnRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAg
ICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydCgpCiAgICAgICAgIGlmIG5vdCBwb3J0OgogICAg
ICAgICAgICAgcmV0dXJuCi0KICAgICAgICAgIyBUZXN0IHRoYXQgaWYgYSBwb3J0IGlzbid0IGF2
YWlsYWJsZSwgdGhlIGNhbGwgZmFpbHMuCiAgICAgICAgIGZvciBwb3J0X251bWJlciBpbiBzZWxm
LkhUVFBfUE9SVFM6Ci0gICAgICAgICAgICBzID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgICAg
ICB0ZXN0X3NvY2tldCA9IHNvY2tldC5zb2NrZXQoKQogICAgICAgICAgICAgdHJ5OgogICAgICAg
ICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgcy5iaW5kKCgnbG9jYWxob3N0Jywg
cG9ydF9udW1iZXIpKQorICAgICAgICAgICAgICAgICAgICB0ZXN0X3NvY2tldC5iaW5kKCgnbG9j
YWxob3N0JywgcG9ydF9udW1iZXIpKQogICAgICAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJy
b3IsIGU6CiAgICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gaW4gKGVycm5vLkVBRERSSU5V
U0UsIGVycm5vLkVBTFJFQURZKToKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgn
Y291bGQgbm90IGJpbmQgdG8gcG9ydCAlZCcgJSBwb3J0X251bWJlcikKQEAgLTE2Niw3ICsxNjMs
NyBAQCBjbGFzcyBQb3J0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAgICAg
ICAgICAgICBwYXNzCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIHBvcnQu
c3RvcF9odHRwX3NlcnZlcigpCi0gICAgICAgICAgICAgICAgcy5jbG9zZSgpCisgICAgICAgICAg
ICAgICAgdGVzdF9zb2NrZXQuY2xvc2UoKQogCiAgICAgICAgICMgVGVzdCB0aGF0IGNhbGxpbmcg
c3RhcnQoKSB0d2ljZSBmYWlscy4KICAgICAgICAgdHJ5OgpAQCAtMjYwLDkgKzI1Nyw5IEBAIGNs
YXNzIFBvcnRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICAgICAgIyBUZXN0IHRo
YXQgc3RhcnQoKSBmYWlscyBpZiBhIHBvcnQgaXNuJ3QgYXZhaWxhYmxlLgogICAgICAgICBmb3Ig
cG9ydF9udW1iZXIgaW4gc2VsZi5XRUJTT0NLRVRfUE9SVFM6Ci0gICAgICAgICAgICBzID0gc29j
a2V0LnNvY2tldCgpCisgICAgICAgICAgICB0ZXN0X3NvY2tldCA9IHNvY2tldC5zb2NrZXQoKQog
ICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHMuYmluZCgoJ2xvY2FsaG9zdCcsIHBv
cnRfbnVtYmVyKSkKKyAgICAgICAgICAgICAgICB0ZXN0X3NvY2tldC5iaW5kKCgnbG9jYWxob3N0
JywgcG9ydF9udW1iZXIpKQogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAg
ICAgcG9ydC5zdGFydF93ZWJzb2NrZXRfc2VydmVyKCkKICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5mYWlsKCdzaG91bGQgbm90IGhhdmUgYmVlbiBhYmxlIHRvIHN0YXJ0IHRoZSBzZXJ2ZXIgd2hp
bGUgYm91bmQgdG8gJWQnICUgcG9ydF9udW1iZXIpCkBAIC0yNzAsNyArMjY3LDcgQEAgY2xhc3Mg
UG9ydFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgICAgICAgICAgICAgcGFz
cwogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBwb3J0LnN0b3Bfd2Vic29j
a2V0X3NlcnZlcigpCi0gICAgICAgICAgICAgICAgcy5jbG9zZSgpCisgICAgICAgICAgICAgICAg
dGVzdF9zb2NrZXQuY2xvc2UoKQogCiAgICAgICAgICMgVGVzdCB0aGF0IGNhbGxpbmcgc3RhcnQo
KSB0d2ljZSBmYWlscy4KICAgICAgICAgdHJ5OgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJzb2NrZXRfc2VydmVyLnB5IGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJzb2NrZXRfc2VydmVyLnB5CmluZGV4
IGE1OWNiMWZhZGI4Yzg3NzY3NWQwMjExNDMxMzFiNjgzNjE5ZTBlMmUuLmE3ZDZkOWJjMjI1OWUw
ZTkxZTI1YTUzNjE3Mzc5ZTU3NmI0Mzk3NDkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Vic29ja2V0X3NlcnZlci5weQorKysgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYnNvY2tldF9zZXJ2ZXIucHkKQEAg
LTIwOSw5ICsyMDksNyBAQCBjbGFzcyBQeVdlYlNvY2tldChodHRwX3NlcnZlci5MaWdodHRwZCk6
CiAgICAgICAgIHVybCA9IHVybCArICc6Ly8xMjcuMC4wLjE6JWQvJyAlIHNlbGYuX3BvcnQKICAg
ICAgICAgaWYgbm90IHVybF9pc19hbGl2ZSh1cmwpOgogICAgICAgICAgICAgaWYgc2VsZi5fcHJv
Y2Vzcy5yZXR1cm5jb2RlID09IE5vbmU6Ci0gICAgICAgICAgICAgICAgIyBGSVhNRTogV2Ugc2hv
dWxkIHVzZSBhIG5vbi1zdGF0aWMgRXhlY3V0aXZlIGZvciBlYXNpZXIKLSAgICAgICAgICAgICAg
ICAjIHRlc3RpbmcuCi0gICAgICAgICAgICAgICAgRXhlY3V0aXZlKCkua2lsbF9wcm9jZXNzKHNl
bGYuX3Byb2Nlc3MucGlkKQorICAgICAgICAgICAgICAgIHNlbGYuX2V4ZWN1dGl2ZS5raWxsX3By
b2Nlc3Moc2VsZi5fcHJvY2Vzcy5waWQpCiAgICAgICAgICAgICB3aXRoIGNvZGVjcy5vcGVuKG91
dHB1dF9sb2csICJyIiwgInV0Zi04IikgYXMgZnA6CiAgICAgICAgICAgICAgICAgZm9yIGxpbmUg
aW4gZnA6CiAgICAgICAgICAgICAgICAgICAgIF9sb2cuZXJyb3IobGluZSkKQEAgLTIyNyw4ICsy
MjUsOCBAQCBjbGFzcyBQeVdlYlNvY2tldChodHRwX3NlcnZlci5MaWdodHRwZCk6CiAgICAgICAg
ICAgICB3aXRoIGNvZGVjcy5vcGVuKHNlbGYuX3BpZGZpbGUsICJ3IiwgImFzY2lpIikgYXMgZmls
ZToKICAgICAgICAgICAgICAgICBmaWxlLndyaXRlKCIlZCIgJSBzZWxmLl9wcm9jZXNzLnBpZCkK
IAotICAgIGRlZiBzdG9wKHNlbGYsIGZvcmNlPUZhbHNlKToKLSAgICAgICAgaWYgbm90IGZvcmNl
IGFuZCBub3Qgc2VsZi5pc19ydW5uaW5nKCk6CisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAg
IGlmIG5vdCBzZWxmLmlzX3J1bm5pbmcoKToKICAgICAgICAgICAgIHJldHVybgogCiAgICAgICAg
IHBpZCA9IE5vbmUKQEAgLTI0Myw4ICsyNDEsNyBAQCBjbGFzcyBQeVdlYlNvY2tldChodHRwX3Nl
cnZlci5MaWdodHRwZCk6CiAgICAgICAgICAgICAgICAgJ0ZhaWxlZCB0byBmaW5kICVzIHNlcnZl
ciBwaWQuJyAlIHNlbGYuX3NlcnZlcl9uYW1lKQogCiAgICAgICAgIF9sb2cuZGVidWcoJ1NodXR0
aW5nIGRvd24gJXMgc2VydmVyICVkLicgJSAoc2VsZi5fc2VydmVyX25hbWUsIHBpZCkpCi0gICAg
ICAgICMgRklYTUU6IFdlIHNob3VsZCB1c2UgYSBub24tc3RhdGljIEV4ZWN1dGl2ZSBmb3IgZWFz
aWVyIHRlc3RpbmcuCi0gICAgICAgIEV4ZWN1dGl2ZSgpLmtpbGxfcHJvY2VzcyhwaWQpCisgICAg
ICAgIHNlbGYuX2V4ZWN1dGl2ZS5raWxsX3Byb2Nlc3MocGlkKQogCiAgICAgICAgIGlmIHNlbGYu
X3Byb2Nlc3M6CiAgICAgICAgICAgICAjIHdhaXQoKSBpcyBub3QgdGhyZWFkc2FmZSBhbmQgY2Fu
IHRocm93IE9TRXJyb3IgZHVlIHRvOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96842</attachid>
            <date>2011-06-10 20:45:53 -0700</date>
            <delta_ts>2011-06-13 12:11:59 -0700</delta_ts>
            <desc>fix naming in http_server_integrationtest.py</desc>
            <filename>bug-62251-20110610204552.patch</filename>
            <type>text/plain</type>
            <size>16416</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODgyODgKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA3ZDYwMTQ4ZDA2OWM5MDQ2YjZjOTI4Y2NlNWFkOGRmYWM5
YTM5NGFlLi5hNjE4ZDQ1NzZlY2JlMDJhODhmYmQ4ODQ3NTljMTgzNDA3YmYyNGM4IDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjMg
QEAKIDIwMTEtMDYtMDcgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgd2Via2l0cHk6IGFk
ZCBpbnRlZ3JhdGlvbiB0ZXN0cyBmb3IgbmV3LXJ1bi13ZWJraXQtaHR0cGQsIHN0b3AgY2FsbGlu
ZyBzaHV0X2Rvd25faHR0cF9zZXJ2ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTYyMjUxCisKKyAgICAgICAgc2h1dF9kb3duX2h0dHBfc2VydmVyKCkg
d2FzIGEgdG90YWwgaGFjayB0aGF0IHdhcyBvbmx5IHVzZWQgYnkKKyAgICAgICAgbmV3LXJ1bi13
ZWJraXQtaHR0cGQsIHNvIEkndmUgbW92ZWQgdGhlIGNvZGUgdGhlcmUgYW5kIHN3aXRjaGVkCisg
ICAgICAgIHRvIHVzaW5nIGV4ZWN1dGl2ZS5raWxsX3Byb2Nlc3MoKSBmb3IgdGhlIGNvbW1vbiBj
YXNlLiBUaGUKKyAgICAgICAgbWV0aG9kIGl0c2VsZiB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIHBh
dGNoIG9uIGJ1ZyA1OTk5My4KKworICAgICAgICAqIFNjcmlwdHMvbmV3LXJ1bi13ZWJraXQtaHR0
cGQ6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9hcGFjaGVf
aHR0cF9zZXJ2ZXIucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9odHRwX3NlcnZlci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2h0dHBfc2VydmVyX2ludGVncmF0aW9udGVzdC5weTogQWRkZWQuCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJzb2NrZXRfc2VydmVyLnB5
OgorCisyMDExLTA2LTA3ICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgorCiAg
ICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgogCiAgICAgICAgIHdlYmtpdHB5OiBhZGQg
YSBwb3BlbigpIGNhbGwgdG8gZXhlY3V0aXZlCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL25l
dy1ydW4td2Via2l0LWh0dHBkIGIvVG9vbHMvU2NyaXB0cy9uZXctcnVuLXdlYmtpdC1odHRwZApp
bmRleCA0MTIyOTkzYzQ2NjRjZmY3NzQwNWE2ZDNhMzlkOWM5MWVhNWNiZDE0Li5lN2FjNWZlM2U2
ZDBhOTZhYzNiMWVmNGI0YTAzYmNhYmM0YTk0ZjZkIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRz
L25ldy1ydW4td2Via2l0LWh0dHBkCisrKyBiL1Rvb2xzL1NjcmlwdHMvbmV3LXJ1bi13ZWJraXQt
aHR0cGQKQEAgLTcwLDggKzcwLDEyIEBAIGRlZiBydW4ob3B0aW9ucyk6CiAgICAgICAgIGlmIG9w
dGlvbnMuc2VydmVyID09ICdzdGFydCc6CiAgICAgICAgICAgICBodHRwZC5zdGFydCgpCiAgICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICBodHRwZC5zdG9wKGZvcmNlPVRydWUpCi0KKyAgICAgICAg
ICAgICMgRklYTUU6IFdlIHVzZSBfc2h1dF9kb3duX2h0dHBfc2VydmVyKCkgaW5zdGVhZCBvZiBz
dG9wX2h0dHBfc2VydmVyKCkKKyAgICAgICAgICAgICMgYmVjYXVzZSBzdG9wKCkgb25seSB3b3Jr
cyBpZiBzdGFydCgpIHdhcyBjYWxsZWQgcHJldmlvdXNseSBpbiB0aGUKKyAgICAgICAgICAgICMg
c2FtZSBwcm9jZXNzLiBfc2h1dF9kb3duKCkgaXMgdG9vIGNvYXJzZSBhbmQgbWF5IGtpbGwgdW5y
ZWxhdGVkIAorICAgICAgICAgICAgIyB3ZWIgc2VydmVycywgc28gdGhpcyBpcyBhIGhhY2suIFdl
IHNob3VsZCBjaGFuZ2UgdGhlIGludGVyZmFjZSBzbyB3ZQorICAgICAgICAgICAgIyBjYW4gcmVs
eSBvbiBwaWQgZmlsZXMgb3Igc29tZXRoaW5nLgorICAgICAgICAgICAgcG9ydF9vYmouX3NodXRf
ZG93bl9odHRwX3NlcnZlcihOb25lKQogCiBkZWYgbWFpbigpOgogICAgIG9wdGlvbl9wYXJzZXIg
PSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9hcGFjaGVfaHR0cF9zZXJ2ZXIucHkgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2FwYWNoZV9odHRwX3NlcnZlci5weQppbmRl
eCAwNWEyMzM4MjQ1MGRlY2Q4MGM0MDM0NTk2NDdiNThmMTIxNTQ3MGIxLi45MDkyOTc4ZmYyZGQw
MTYyNzljNWMyZGIzN2MyZTQ3ZTE4ZDUzOGVjIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2FwYWNoZV9odHRwX3NlcnZlci5weQorKysgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2FwYWNoZV9odHRwX3NlcnZlci5w
eQpAQCAtMjI3LDcgKzIyNyw5IEBAIGNsYXNzIExheW91dFRlc3RBcGFjaGVIdHRwZChodHRwX3Nl
cnZlcl9iYXNlLkh0dHBTZXJ2ZXJCYXNlKToKICAgICAgICAgIiIiU3RvcHMgdGhlIGFwYWNoZSBo
dHRwIHNlcnZlci4iIiIKICAgICAgICAgX2xvZy5kZWJ1ZygiU2h1dHRpbmcgZG93biBhbnkgcnVu
bmluZyBodHRwIHNlcnZlcnMiKQogICAgICAgICBodHRwZF9waWQgPSBOb25lCi0gICAgICAgIGlm
IG9zLnBhdGguZXhpc3RzKHNlbGYuX3BpZF9maWxlKToKKyAgICAgICAgaWYgc2VsZi5faHR0cGRf
cHJvYzoKKyAgICAgICAgICAgIGh0dHBkX3BpZCA9IHNlbGYuX2h0dHBkX3Byb2MucGlkCisgICAg
ICAgIGVsaWYgb3MucGF0aC5leGlzdHMoc2VsZi5fcGlkX2ZpbGUpOgogICAgICAgICAgICAgaHR0
cGRfcGlkID0gaW50KG9wZW4oc2VsZi5fcGlkX2ZpbGUpLnJlYWRsaW5lKCkpCi0gICAgICAgICMg
RklYTUU6IFdlIHNob3VsZG4ndCBiZSBjYWxsaW5nIGEgcHJvdGVjdGVkIG1ldGhvZCBvZiBfcG9y
dF9vYmohCi0gICAgICAgIHNlbGYuX3BvcnRfb2JqLl9zaHV0X2Rvd25faHR0cF9zZXJ2ZXIoaHR0
cGRfcGlkKQorICAgICAgICBpZiBodHRwZF9waWQ6CisgICAgICAgICAgICBzZWxmLl9leGVjdXRp
dmUua2lsbF9wcm9jZXNzKGh0dHBkX3BpZCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXIucHkgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVyLnB5CmluZGV4IGU1MjVlZTBlNDkx
MmZlMDk1MzhmN2NkZmRmM2ExYjYzNDgxMjQzMmQuLjNhNTRjOTliMjAwODhiMTcwMzEzMjNhMDAx
NjU1Nzc1OTEzZWQyZTEgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlci5weQpAQCAtMjI2LDE0ICsyMjYsMTQgQEAgY2xh
c3MgTGlnaHR0cGQoaHR0cF9zZXJ2ZXJfYmFzZS5IdHRwU2VydmVyQmFzZSk6CiAgICAgIyBUT0RP
KGRlYW5tKTogRmluZCBhIG5pY2VyIHdheSB0byBzaHV0ZG93biBjbGVhbmx5LiAgT3VyIGxvZyBm
aWxlcyBhcmUKICAgICAjIHByb2JhYmx5IG5vdCBiZWluZyBmbHVzaGVkLCBldGMuLi4gd2h5IGRv
ZXNuJ3Qgb3VyIHB5dGhvbiBoYXZlIG9zLmtpbGwgPwogCi0gICAgZGVmIHN0b3Aoc2VsZiwgZm9y
Y2U9RmFsc2UpOgotICAgICAgICBpZiBub3QgZm9yY2UgYW5kIG5vdCBzZWxmLmlzX3J1bm5pbmco
KToKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuaXNfcnVubmluZygp
OgogICAgICAgICAgICAgcmV0dXJuCiAKICAgICAgICAgaHR0cGRfcGlkID0gTm9uZQogICAgICAg
ICBpZiBzZWxmLl9wcm9jZXNzOgogICAgICAgICAgICAgaHR0cGRfcGlkID0gc2VsZi5fcHJvY2Vz
cy5waWQKLSAgICAgICAgc2VsZi5fcG9ydF9vYmouX3NodXRfZG93bl9odHRwX3NlcnZlcihodHRw
ZF9waWQpCisgICAgICAgIHNlbGYuX2V4ZWN1dGl2ZS5raWxsX3Byb2Nlc3MoaHR0cGRfcGlkKQog
CiAgICAgICAgIGlmIHNlbGYuX3Byb2Nlc3M6CiAgICAgICAgICAgICAjIHdhaXQoKSBpcyBub3Qg
dGhyZWFkc2FmZSBhbmQgY2FuIHRocm93IE9TRXJyb3IgZHVlIHRvOgpkaWZmIC0tZ2l0IGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlcl9iYXNlLnB5
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlcl9i
YXNlLnB5CmluZGV4IDJhNDNlODE5NzhiOTJjNmNhNjgxYThhNGMyOGY5OWI4M2I4NzZlYmIuLjhl
M2QyMDY1OGVlYjQyNTVhZTEyOTNiNjllMWYzODBjMzJhYmQ0NTAgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXJfYmFzZS5weQor
KysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVy
X2Jhc2UucHkKQEAgLTQzLDYgKzQzLDcgQEAgY2xhc3MgSHR0cFNlcnZlckJhc2Uob2JqZWN0KToK
IAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0X29iaik6CiAgICAgICAgIHNlbGYuX3BvcnRf
b2JqID0gcG9ydF9vYmoKKyAgICAgICAgc2VsZi5fZXhlY3V0aXZlID0gcG9ydF9vYmouX2V4ZWN1
dGl2ZQogCiAgICAgZGVmIHdhaXRfZm9yX2FjdGlvbihzZWxmLCBhY3Rpb24pOgogICAgICAgICAi
IiJSZXBlYXQgdGhlIGFjdGlvbiBmb3IgMjAgc2Vjb25kcyBvciB1bnRpbCBpdCBzdWNjZWVkcy4g
UmV0dXJucwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9odHRwX3NlcnZlcl9pbnRlZ3JhdGlvbnRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVyX2ludGVncmF0aW9udGVzdC5weQpuZXcg
ZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5mZjQxYmQ3OTM0ODAxY2ZlMGEwODRiNzY2NTU5NjU5YWZmMGU5NmYyCi0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRw
X3NlcnZlcl9pbnRlZ3JhdGlvbnRlc3QucHkKQEAgLTAsMCArMSwxMjYgQEAKKyMgQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMg
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisj
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCisiIiJJbnRlZ3JhdGlvbiB0ZXN0aW5nIGZvciB0aGUgbmV3LXJ1bi13ZWJraXQtaHR0cGQg
c2NyaXB0IiIiCisKK2ltcG9ydCBlcnJubworaW1wb3J0IG9zCitpbXBvcnQgc29ja2V0CitpbXBv
cnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdW5pdHRl
c3QKKworaW1wb3J0IHBvcnRfdGVzdGNhc2UKKworCitjbGFzcyBOZXdSdW5XZWJLaXRIVFRQZFRl
c3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHRoYXQgbmV3LXJ1bi13ZWJraXQt
aHR0cGQgbXVzdCBwYXNzLiIiIgorICAgIEhUVFBfUE9SVFMgPSAoODAwMCwgODA4MCwgODQ0MykK
KworICAgIGRlZiBhc3NlcnRfc2VydmVyc19hcmVfZG93bihzZWxmLCBob3N0LCBwb3J0cyk6Cisg
ICAgICAgIGZvciBwb3J0IGluIHBvcnRzOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAg
ICAgIHRlc3Rfc29ja2V0ID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgICAgICAgICAgdGVzdF9z
b2NrZXQuY29ubmVjdCgoaG9zdCwgcG9ydCkpCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCkK
KyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNz
ZXJ0VHJ1ZShlLmVycm5vIGluIChlcnJuby5FQ09OTlJFRlVTRUQsIGVycm5vLkVDT05OUkVTRVQp
KQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICB0ZXN0X3NvY2tldC5jbG9z
ZSgpCisKKyAgICBkZWYgYXNzZXJ0X3NlcnZlcnNfYXJlX3VwKHNlbGYsIGhvc3QsIHBvcnRzKToK
KyAgICAgICAgZm9yIHBvcnQgaW4gcG9ydHM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAg
ICAgICAgdGVzdF9zb2NrZXQgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgICAgICAgICB0ZXN0
X3NvY2tldC5jb25uZWN0KChob3N0LCBwb3J0KSkKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9y
LCBlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnZmFpbGVkIHRvIGNvbm5lY3QgdG8gJXM6
JWQnICUgKGhvc3QsIHBvcnQpKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAg
ICB0ZXN0X3NvY2tldC5jbG9zZSgpCisKKyAgICBkZWYgcnVuX3NjcmlwdChzZWxmLCBhcmdzKToK
KyAgICAgICAgc2NyaXB0X2RpciA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3Mu
cGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSkp
KQorICAgICAgICBzY3JpcHRfcGF0aCA9IG9zLnBhdGguam9pbihzY3JpcHRfZGlyLCAnbmV3LXJ1
bi13ZWJraXQtaHR0cGQnKQorICAgICAgICByZXR1cm4gc3VicHJvY2Vzcy5jYWxsKFtzeXMuZXhl
Y3V0YWJsZSwgc2NyaXB0X3BhdGhdICsgYXJncywgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3Rk
ZXJyPXN1YnByb2Nlc3MuUElQRSkKKworICAgIGRlZiBpbnRlZ3JhdGlvbl90ZXN0X2h0dHBfc2Vy
dmVyX19ub3JtYWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0X3NlcnZlcnNfYXJlX2Rvd24o
J2xvY2FsaG9zdCcsIHNlbGYuSFRUUF9QT1JUUykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMo
c2VsZi5ydW5fc2NyaXB0KFsnLS1zZXJ2ZXInLCAnc3RhcnQnXSksIDApCisgICAgICAgIHNlbGYu
YXNzZXJ0X3NlcnZlcnNfYXJlX3VwKCdsb2NhbGhvc3QnLCBzZWxmLkhUVFBfUE9SVFMpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYucnVuX3NjcmlwdChbJy0tc2VydmVyJywgJ3N0b3An
XSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0X3NlcnZlcnNfYXJlX2Rvd24oJ2xvY2FsaG9zdCcs
IHNlbGYuSFRUUF9QT1JUUykKKworICAgIGRlZiBpbnRlZ3JhdGlvbl90ZXN0X2h0dHBfc2VydmVy
X19mYWlscyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgaWYgYSBwb3J0IGlzbid0IGF2YWls
YWJsZSwgdGhlIGNhbGwgZmFpbHMuCisgICAgICAgIGZvciBwb3J0X251bWJlciBpbiBzZWxmLkhU
VFBfUE9SVFM6CisgICAgICAgICAgICB0ZXN0X3NvY2tldCA9IHNvY2tldC5zb2NrZXQoKQorICAg
ICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAg
dGVzdF9zb2NrZXQuYmluZCgoJ2xvY2FsaG9zdCcsIHBvcnRfbnVtYmVyKSkKKyAgICAgICAgICAg
ICAgICBleGNlcHQgc29ja2V0LmVycm9yLCBlOgorICAgICAgICAgICAgICAgICAgICBpZiBlLmVy
cm5vIGluIChlcnJuby5FQUREUklOVVNFLCBlcnJuby5FQUxSRUFEWSk6CisgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLmZhaWwoJ2NvdWxkIG5vdCBiaW5kIHRvIHBvcnQgJWQ6ICVzJyAlIChw
b3J0X251bWJlciwgc3RyKGUpKSkKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAg
ICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLnJ1bl9zY3JpcHQoWyctLXNlcnZlcicsICdz
dGFydCddKSwgMSkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc2VsZi5y
dW5fc2NyaXB0KFsnLS1zZXJ2ZXInLCAnc3RvcCddKQorICAgICAgICAgICAgICAgIHRlc3Rfc29j
a2V0LmNsb3NlKCkKKworICAgICAgICAjIFRlc3QgdGhhdCBjYWxsaW5nIHN0YXJ0KCkgdHdpY2Ug
ZmFpbHMuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYu
cnVuX3NjcmlwdChbJy0tc2VydmVyJywgJ3N0YXJ0J10pLCAwKQorICAgICAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbHMoc2VsZi5ydW5fc2NyaXB0KFsnLS1zZXJ2ZXInLCAnc3RhcnQnXSksIDEpCisg
ICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLnJ1bl9zY3JpcHQoWyctLXNlcnZlcics
ICdzdG9wJ10pCisKKyAgICAgICAgIyBUZXN0IHRoYXQgY2FsbGluZyBzdG9wKCkgdHdpY2UgaXMg
aGFybWxlc3MuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYucnVuX3NjcmlwdChbJy0t
c2VydmVyJywgJ3N0b3AnXSksIDApCisKKyAgICBkZWYgbWF5YmVfbWFrZV9kaXIoc2VsZiwgKmNv
bXBzKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MubWFrZWRpcnMob3MucGF0aC5qb2lu
KCpjb21wcykpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBlOgorICAgICAgICAgICAgaWYgZS5l
cnJubyAhPSBlcnJuby5FRVhJU1Q6CisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiBp
bnRlZ3JhdGlvbl90ZXN0X2h0dHBfc2VydmVyX3BvcnRfYW5kX3Jvb3Qoc2VsZik6CisgICAgICAg
IHRtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSd3ZWJraXRweXRlc3QnKQorICAgICAg
ICBzZWxmLm1heWJlX21ha2VfZGlyKHRtcGRpciwgJ2h0dHAnLCAndGVzdHMnKQorICAgICAgICBz
ZWxmLm1heWJlX21ha2VfZGlyKHRtcGRpciwgJ2Zhc3QnLCAnanMnLCAncmVzb3VyY2VzJykKKyAg
ICAgICAgc2VsZi5tYXliZV9tYWtlX2Rpcih0bXBkaXIsICdtZWRpYScpCisKKyAgICAgICAgc2Vs
Zi5hc3NlcnRfc2VydmVyc19hcmVfZG93bignbG9jYWxob3N0JywgWzE4MDAwXSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5ydW5fc2NyaXB0KFsnLS1zZXJ2ZXInLCAnc3RhcnQnLCAn
LS1wb3J0PTE4MDAwJywgJy0tcm9vdCcsIHRtcGRpcl0pLCAwKQorICAgICAgICBzZWxmLmFzc2Vy
dF9zZXJ2ZXJzX2FyZV91cCgnbG9jYWxob3N0JywgWzE4MDAwXSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbHMoc2VsZi5ydW5fc2NyaXB0KFsnLS1zZXJ2ZXInLCAnc3RvcCddKSwgMCkKKyAgICAg
ICAgc2VsZi5hc3NlcnRfc2VydmVyc19hcmVfZG93bignbG9jYWxob3N0JywgWzE4MDAwXSkKKwor
CitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHBvcnRfdGVzdGNhc2UubWFpbigpCmRp
ZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3BvcnRf
dGVzdGNhc2UucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Bv
cnRfdGVzdGNhc2UucHkKaW5kZXggZjYxNzM3ZDNhNjE5NDQ4M2UyYjU5ZTExNzBlOWRhMjFkMzZm
YjJiOC4uMzMyNDBjZDc3ZTcxOWEwNmY0ZWFkZGVjMTMyODM5ZGUxNWRiODgwMyAxMDA3NTUKLS0t
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9wb3J0X3Rlc3RjYXNl
LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvcG9ydF90
ZXN0Y2FzZS5weQpAQCAtNDgsOSArNDgsOCBAQCBtb2NrX29wdGlvbnMgPSBtb2NrdG9vbC5Nb2Nr
T3B0aW9ucyhjb25maWd1cmF0aW9uPSdSZWxlYXNlJykKIAogY2xhc3MgUG9ydFRlc3RDYXNlKHVu
aXR0ZXN0LlRlc3RDYXNlKToKICAgICAiIiJUZXN0cyB0aGF0IGFsbCBQb3J0IGltcGxlbWVudGF0
aW9ucyBtdXN0IHBhc3MuIiIiCi0KLSAgICBIVFRQX1BPUlRTID0gWzgwMDAsIDgwODAsIDg0NDNd
Ci0gICAgV0VCU09DS0VUX1BPUlRTID0gWzg4ODBdCisgICAgSFRUUF9QT1JUUyA9ICg4MDAwLCA4
MDgwLCA4NDQzKQorICAgIFdFQlNPQ0tFVF9QT1JUUyA9ICg4ODgwLCkKIAogICAgIGRlZiBwb3J0
X21ha2VyKHNlbGYsIHBsYXRmb3JtKToKICAgICAgICAgIiIiT3ZlcnJpZGUgdG8gcmV0dXJuIHRo
ZSBjbGFzcyBvYmplY3Qgb2YgdGhlIHBvcnQgdG8gYmUgdGVzdGVkLApAQCAtOTIsMjMgKzkxLDIz
IEBAIGNsYXNzIFBvcnRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIGFzc2Vy
dF9zZXJ2ZXJzX2FyZV9kb3duKHNlbGYsIGhvc3QsIHBvcnRzKToKICAgICAgICAgZm9yIHBvcnQg
aW4gcG9ydHM6CiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcyA9IHNvY2tldC5z
b2NrZXQoKQotICAgICAgICAgICAgICAgIHMuY29ubmVjdCgoaG9zdCwgcG9ydCkpCisgICAgICAg
ICAgICAgICAgdGVzdF9zb2NrZXQgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgICAgICAgICB0
ZXN0X3NvY2tldC5jb25uZWN0KChob3N0LCBwb3J0KSkKICAgICAgICAgICAgICAgICBzZWxmLmZh
aWwoKQogICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IsIGU6CiAgICAgICAgICAgICAgICAgc2Vs
Zi5hc3NlcnRUcnVlKGUuZXJybm8gaW4gKGVycm5vLkVDT05OUkVGVVNFRCwgZXJybm8uRUNPTk5S
RVNFVCkpCiAgICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIHMuY2xvc2UoKQor
ICAgICAgICAgICAgICAgIHRlc3Rfc29ja2V0LmNsb3NlKCkKIAogICAgIGRlZiBhc3NlcnRfc2Vy
dmVyc19hcmVfdXAoc2VsZiwgaG9zdCwgcG9ydHMpOgogICAgICAgICBmb3IgcG9ydCBpbiBwb3J0
czoKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzID0gc29ja2V0LnNvY2tldCgp
Ci0gICAgICAgICAgICAgICAgcy5jb25uZWN0KChob3N0LCBwb3J0KSkKKyAgICAgICAgICAgICAg
ICB0ZXN0X3NvY2tldCA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICAgICAgICAgIHRlc3Rfc29j
a2V0LmNvbm5lY3QoKGhvc3QsIHBvcnQpKQogICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IsIGU6
CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdmYWlsZWQgdG8gY29ubmVjdCB0byAlczolZCcg
JSAoaG9zdCwgcG9ydCkpCiAgICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIHMu
Y2xvc2UoKQorICAgICAgICAgICAgICAgIHRlc3Rfc29ja2V0LmNsb3NlKCkKIAogICAgIGRlZiBp
bnRlZ3JhdGlvbl90ZXN0X2h0dHBfbG9jayhzZWxmKToKICAgICAgICAgcG9ydCA9IHNlbGYubWFr
ZV9wb3J0KCkKQEAgLTEzNyw3ICsxMzYsNiBAQCBjbGFzcyBQb3J0VGVzdENhc2UodW5pdHRlc3Qu
VGVzdENhc2UpOgogICAgICAgICBwb3J0ID0gc2VsZi5tYWtlX3BvcnQoKQogICAgICAgICBpZiBu
b3QgcG9ydDoKICAgICAgICAgICAgIHJldHVybgotCiAgICAgICAgIHNlbGYuYXNzZXJ0X3NlcnZl
cnNfYXJlX2Rvd24oJ2xvY2FsaG9zdCcsIHNlbGYuSFRUUF9QT1JUUykKICAgICAgICAgcG9ydC5z
dGFydF9odHRwX3NlcnZlcigpCiAgICAgICAgIHNlbGYuYXNzZXJ0X3NlcnZlcnNfYXJlX3VwKCds
b2NhbGhvc3QnLCBzZWxmLkhUVFBfUE9SVFMpCkBAIC0xNDgsMTMgKzE0NiwxMiBAQCBjbGFzcyBQ
b3J0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBwb3J0ID0gc2VsZi5tYWtl
X3BvcnQoKQogICAgICAgICBpZiBub3QgcG9ydDoKICAgICAgICAgICAgIHJldHVybgotCiAgICAg
ICAgICMgVGVzdCB0aGF0IGlmIGEgcG9ydCBpc24ndCBhdmFpbGFibGUsIHRoZSBjYWxsIGZhaWxz
LgogICAgICAgICBmb3IgcG9ydF9udW1iZXIgaW4gc2VsZi5IVFRQX1BPUlRTOgotICAgICAgICAg
ICAgcyA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICAgICAgdGVzdF9zb2NrZXQgPSBzb2NrZXQu
c29ja2V0KCkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAg
ICAgICAgICAgICAgIHMuYmluZCgoJ2xvY2FsaG9zdCcsIHBvcnRfbnVtYmVyKSkKKyAgICAgICAg
ICAgICAgICAgICAgdGVzdF9zb2NrZXQuYmluZCgoJ2xvY2FsaG9zdCcsIHBvcnRfbnVtYmVyKSkK
ICAgICAgICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yLCBlOgogICAgICAgICAgICAgICAg
ICAgICBpZiBlLmVycm5vIGluIChlcnJuby5FQUREUklOVVNFLCBlcnJuby5FQUxSRUFEWSk6CiAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ2NvdWxkIG5vdCBiaW5kIHRvIHBvcnQg
JWQnICUgcG9ydF9udW1iZXIpCkBAIC0xNjYsNyArMTYzLDcgQEAgY2xhc3MgUG9ydFRlc3RDYXNl
KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAg
ICAgZmluYWxseToKICAgICAgICAgICAgICAgICBwb3J0LnN0b3BfaHR0cF9zZXJ2ZXIoKQotICAg
ICAgICAgICAgICAgIHMuY2xvc2UoKQorICAgICAgICAgICAgICAgIHRlc3Rfc29ja2V0LmNsb3Nl
KCkKIAogICAgICAgICAjIFRlc3QgdGhhdCBjYWxsaW5nIHN0YXJ0KCkgdHdpY2UgZmFpbHMuCiAg
ICAgICAgIHRyeToKQEAgLTI2MCw5ICsyNTcsOSBAQCBjbGFzcyBQb3J0VGVzdENhc2UodW5pdHRl
c3QuVGVzdENhc2UpOgogCiAgICAgICAgICMgVGVzdCB0aGF0IHN0YXJ0KCkgZmFpbHMgaWYgYSBw
b3J0IGlzbid0IGF2YWlsYWJsZS4KICAgICAgICAgZm9yIHBvcnRfbnVtYmVyIGluIHNlbGYuV0VC
U09DS0VUX1BPUlRTOgotICAgICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICAg
ICAgdGVzdF9zb2NrZXQgPSBzb2NrZXQuc29ja2V0KCkKICAgICAgICAgICAgIHRyeToKLSAgICAg
ICAgICAgICAgICBzLmJpbmQoKCdsb2NhbGhvc3QnLCBwb3J0X251bWJlcikpCisgICAgICAgICAg
ICAgICAgdGVzdF9zb2NrZXQuYmluZCgoJ2xvY2FsaG9zdCcsIHBvcnRfbnVtYmVyKSkKICAgICAg
ICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHBvcnQuc3RhcnRfd2Vic29ja2V0
X3NlcnZlcigpCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnc2hvdWxkIG5vdCBoYXZl
IGJlZW4gYWJsZSB0byBzdGFydCB0aGUgc2VydmVyIHdoaWxlIGJvdW5kIHRvICVkJyAlIHBvcnRf
bnVtYmVyKQpAQCAtMjcwLDcgKzI2Nyw3IEBAIGNsYXNzIFBvcnRUZXN0Q2FzZSh1bml0dGVzdC5U
ZXN0Q2FzZSk6CiAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGZpbmFsbHk6
CiAgICAgICAgICAgICAgICAgcG9ydC5zdG9wX3dlYnNvY2tldF9zZXJ2ZXIoKQotICAgICAgICAg
ICAgICAgIHMuY2xvc2UoKQorICAgICAgICAgICAgICAgIHRlc3Rfc29ja2V0LmNsb3NlKCkKIAog
ICAgICAgICAjIFRlc3QgdGhhdCBjYWxsaW5nIHN0YXJ0KCkgdHdpY2UgZmFpbHMuCiAgICAgICAg
IHRyeToKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvd2Vic29ja2V0X3NlcnZlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvd2Vic29ja2V0X3NlcnZlci5weQppbmRleCBhNTljYjFmYWRiOGM4Nzc2NzVkMDIx
MTQzMTMxYjY4MzYxOWUwZTJlLi5hN2Q2ZDliYzIyNTllMGU5MWUyNWE1MzYxNzM3OWU1NzZiNDM5
NzQ5IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L3dlYnNvY2tldF9zZXJ2ZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC93ZWJzb2NrZXRfc2VydmVyLnB5CkBAIC0yMDksOSArMjA5LDcgQEAgY2xhc3Mg
UHlXZWJTb2NrZXQoaHR0cF9zZXJ2ZXIuTGlnaHR0cGQpOgogICAgICAgICB1cmwgPSB1cmwgKyAn
Oi8vMTI3LjAuMC4xOiVkLycgJSBzZWxmLl9wb3J0CiAgICAgICAgIGlmIG5vdCB1cmxfaXNfYWxp
dmUodXJsKToKICAgICAgICAgICAgIGlmIHNlbGYuX3Byb2Nlc3MucmV0dXJuY29kZSA9PSBOb25l
OgotICAgICAgICAgICAgICAgICMgRklYTUU6IFdlIHNob3VsZCB1c2UgYSBub24tc3RhdGljIEV4
ZWN1dGl2ZSBmb3IgZWFzaWVyCi0gICAgICAgICAgICAgICAgIyB0ZXN0aW5nLgotICAgICAgICAg
ICAgICAgIEV4ZWN1dGl2ZSgpLmtpbGxfcHJvY2VzcyhzZWxmLl9wcm9jZXNzLnBpZCkKKyAgICAg
ICAgICAgICAgICBzZWxmLl9leGVjdXRpdmUua2lsbF9wcm9jZXNzKHNlbGYuX3Byb2Nlc3MucGlk
KQogICAgICAgICAgICAgd2l0aCBjb2RlY3Mub3BlbihvdXRwdXRfbG9nLCAiciIsICJ1dGYtOCIp
IGFzIGZwOgogICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGZwOgogICAgICAgICAgICAgICAg
ICAgICBfbG9nLmVycm9yKGxpbmUpCkBAIC0yMjcsOCArMjI1LDggQEAgY2xhc3MgUHlXZWJTb2Nr
ZXQoaHR0cF9zZXJ2ZXIuTGlnaHR0cGQpOgogICAgICAgICAgICAgd2l0aCBjb2RlY3Mub3Blbihz
ZWxmLl9waWRmaWxlLCAidyIsICJhc2NpaSIpIGFzIGZpbGU6CiAgICAgICAgICAgICAgICAgZmls
ZS53cml0ZSgiJWQiICUgc2VsZi5fcHJvY2Vzcy5waWQpCiAKLSAgICBkZWYgc3RvcChzZWxmLCBm
b3JjZT1GYWxzZSk6Ci0gICAgICAgIGlmIG5vdCBmb3JjZSBhbmQgbm90IHNlbGYuaXNfcnVubmlu
ZygpOgorICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5pc19ydW5uaW5n
KCk6CiAgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICBwaWQgPSBOb25lCkBAIC0yNDMsOCAr
MjQxLDcgQEAgY2xhc3MgUHlXZWJTb2NrZXQoaHR0cF9zZXJ2ZXIuTGlnaHR0cGQpOgogICAgICAg
ICAgICAgICAgICdGYWlsZWQgdG8gZmluZCAlcyBzZXJ2ZXIgcGlkLicgJSBzZWxmLl9zZXJ2ZXJf
bmFtZSkKIAogICAgICAgICBfbG9nLmRlYnVnKCdTaHV0dGluZyBkb3duICVzIHNlcnZlciAlZC4n
ICUgKHNlbGYuX3NlcnZlcl9uYW1lLCBwaWQpKQotICAgICAgICAjIEZJWE1FOiBXZSBzaG91bGQg
dXNlIGEgbm9uLXN0YXRpYyBFeGVjdXRpdmUgZm9yIGVhc2llciB0ZXN0aW5nLgotICAgICAgICBF
eGVjdXRpdmUoKS5raWxsX3Byb2Nlc3MocGlkKQorICAgICAgICBzZWxmLl9leGVjdXRpdmUua2ls
bF9wcm9jZXNzKHBpZCkKIAogICAgICAgICBpZiBzZWxmLl9wcm9jZXNzOgogICAgICAgICAgICAg
IyB3YWl0KCkgaXMgbm90IHRocmVhZHNhZmUgYW5kIGNhbiB0aHJvdyBPU0Vycm9yIGR1ZSB0bzoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96987</attachid>
            <date>2011-06-13 12:12:03 -0700</date>
            <delta_ts>2011-06-13 12:12:03 -0700</delta_ts>
            <desc>upload w/ tony&apos;s last bit of feedback</desc>
            <filename>bug-62251-20110613121201.patch</filename>
            <type>text/plain</type>
            <size>16444</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODgyODgKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA3ZDYwMTQ4ZDA2OWM5MDQ2YjZjOTI4Y2NlNWFkOGRmYWM5
YTM5NGFlLi4zZmFmYTAzZjFkYWY2NzM4YTIyMmU1NzQ5MWZhM2E1MmNlNmI0ZjY5IDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjMg
QEAKIDIwMTEtMDYtMDcgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgVG9ueSBDaGFuZy4KKworICAgICAgICB3ZWJraXRweTogYWRkIGlu
dGVncmF0aW9uIHRlc3RzIGZvciBuZXctcnVuLXdlYmtpdC1odHRwZCwgc3RvcCBjYWxsaW5nIHNo
dXRfZG93bl9odHRwX3NlcnZlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NjIyNTEKKworICAgICAgICBzaHV0X2Rvd25faHR0cF9zZXJ2ZXIoKSB3YXMg
YSB0b3RhbCBoYWNrIHRoYXQgd2FzIG9ubHkgdXNlZCBieQorICAgICAgICBuZXctcnVuLXdlYmtp
dC1odHRwZCwgc28gSSd2ZSBtb3ZlZCB0aGUgY29kZSB0aGVyZSBhbmQgc3dpdGNoZWQKKyAgICAg
ICAgdG8gdXNpbmcgZXhlY3V0aXZlLmtpbGxfcHJvY2VzcygpIGZvciB0aGUgY29tbW9uIGNhc2Uu
IFRoZQorICAgICAgICBtZXRob2QgaXRzZWxmIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgcGF0Y2gg
b24gYnVnIDU5OTkzLgorCisgICAgICAgICogU2NyaXB0cy9uZXctcnVuLXdlYmtpdC1odHRwZDoK
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2FwYWNoZV9odHRw
X3NlcnZlci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2h0dHBfc2VydmVyLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvaHR0cF9zZXJ2ZXJfaW50ZWdyYXRpb250ZXN0LnB5OiBBZGRlZC4KKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYnNvY2tldF9zZXJ2ZXIucHk6CisK
KzIwMTEtMDYtMDcgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKICAgICAg
ICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCiAKICAgICAgICAgd2Via2l0cHk6IGFkZCBhIHBv
cGVuKCkgY2FsbCB0byBleGVjdXRpdmUKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvbmV3LXJ1
bi13ZWJraXQtaHR0cGQgYi9Ub29scy9TY3JpcHRzL25ldy1ydW4td2Via2l0LWh0dHBkCmluZGV4
IDQxMjI5OTNjNDY2NGNmZjc3NDA1YTZkM2EzOWQ5YzkxZWE1Y2JkMTQuLmU3YWM1ZmUzZTZkMGE5
NmFjM2IxZWY0YjRhMDNiY2FiYzRhOTRmNmQgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvbmV3
LXJ1bi13ZWJraXQtaHR0cGQKKysrIGIvVG9vbHMvU2NyaXB0cy9uZXctcnVuLXdlYmtpdC1odHRw
ZApAQCAtNzAsOCArNzAsMTIgQEAgZGVmIHJ1bihvcHRpb25zKToKICAgICAgICAgaWYgb3B0aW9u
cy5zZXJ2ZXIgPT0gJ3N0YXJ0JzoKICAgICAgICAgICAgIGh0dHBkLnN0YXJ0KCkKICAgICAgICAg
ZWxzZToKLSAgICAgICAgICAgIGh0dHBkLnN0b3AoZm9yY2U9VHJ1ZSkKLQorICAgICAgICAgICAg
IyBGSVhNRTogV2UgdXNlIF9zaHV0X2Rvd25faHR0cF9zZXJ2ZXIoKSBpbnN0ZWFkIG9mIHN0b3Bf
aHR0cF9zZXJ2ZXIoKQorICAgICAgICAgICAgIyBiZWNhdXNlIHN0b3AoKSBvbmx5IHdvcmtzIGlm
IHN0YXJ0KCkgd2FzIGNhbGxlZCBwcmV2aW91c2x5IGluIHRoZQorICAgICAgICAgICAgIyBzYW1l
IHByb2Nlc3MuIF9zaHV0X2Rvd24oKSBpcyB0b28gY29hcnNlIGFuZCBtYXkga2lsbCB1bnJlbGF0
ZWQgCisgICAgICAgICAgICAjIHdlYiBzZXJ2ZXJzLCBzbyB0aGlzIGlzIGEgaGFjay4gV2Ugc2hv
dWxkIGNoYW5nZSB0aGUgaW50ZXJmYWNlIHNvIHdlCisgICAgICAgICAgICAjIGNhbiByZWx5IG9u
IHBpZCBmaWxlcyBvciBzb21ldGhpbmcuCisgICAgICAgICAgICBwb3J0X29iai5fc2h1dF9kb3du
X2h0dHBfc2VydmVyKE5vbmUpCiAKIGRlZiBtYWluKCk6CiAgICAgb3B0aW9uX3BhcnNlciA9IG9w
dHBhcnNlLk9wdGlvblBhcnNlcigpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L2FwYWNoZV9odHRwX3NlcnZlci5weSBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYXBhY2hlX2h0dHBfc2VydmVyLnB5CmluZGV4IDA1
YTIzMzgyNDUwZGVjZDgwYzQwMzQ1OTY0N2I1OGYxMjE1NDcwYjEuLjkwOTI5NzhmZjJkZDAxNjI3
OWM1YzJkYjM3YzJlNDdlMThkNTM4ZWMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYXBhY2hlX2h0dHBfc2VydmVyLnB5CisrKyBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYXBhY2hlX2h0dHBfc2VydmVyLnB5CkBA
IC0yMjcsNyArMjI3LDkgQEAgY2xhc3MgTGF5b3V0VGVzdEFwYWNoZUh0dHBkKGh0dHBfc2VydmVy
X2Jhc2UuSHR0cFNlcnZlckJhc2UpOgogICAgICAgICAiIiJTdG9wcyB0aGUgYXBhY2hlIGh0dHAg
c2VydmVyLiIiIgogICAgICAgICBfbG9nLmRlYnVnKCJTaHV0dGluZyBkb3duIGFueSBydW5uaW5n
IGh0dHAgc2VydmVycyIpCiAgICAgICAgIGh0dHBkX3BpZCA9IE5vbmUKLSAgICAgICAgaWYgb3Mu
cGF0aC5leGlzdHMoc2VsZi5fcGlkX2ZpbGUpOgorICAgICAgICBpZiBzZWxmLl9odHRwZF9wcm9j
OgorICAgICAgICAgICAgaHR0cGRfcGlkID0gc2VsZi5faHR0cGRfcHJvYy5waWQKKyAgICAgICAg
ZWxpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLl9waWRfZmlsZSk6CiAgICAgICAgICAgICBodHRwZF9w
aWQgPSBpbnQob3BlbihzZWxmLl9waWRfZmlsZSkucmVhZGxpbmUoKSkKLSAgICAgICAgIyBGSVhN
RTogV2Ugc2hvdWxkbid0IGJlIGNhbGxpbmcgYSBwcm90ZWN0ZWQgbWV0aG9kIG9mIF9wb3J0X29i
aiEKLSAgICAgICAgc2VsZi5fcG9ydF9vYmouX3NodXRfZG93bl9odHRwX3NlcnZlcihodHRwZF9w
aWQpCisgICAgICAgIGlmIGh0dHBkX3BpZDoKKyAgICAgICAgICAgIHNlbGYuX2V4ZWN1dGl2ZS5r
aWxsX3Byb2Nlc3MoaHR0cGRfcGlkKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXIucHkKaW5kZXggZTUyNWVlMGU0OTEyZmUw
OTUzOGY3Y2RmZGYzYTFiNjM0ODEyNDMyZC4uM2E1NGM5OWIyMDA4OGIxNzAzMTMyM2EwMDE2NTU3
NzU5MTNlZDJlMSAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9odHRwX3NlcnZlci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVyLnB5CkBAIC0yMjYsMTQgKzIyNiwxNCBAQCBjbGFzcyBM
aWdodHRwZChodHRwX3NlcnZlcl9iYXNlLkh0dHBTZXJ2ZXJCYXNlKToKICAgICAjIFRPRE8oZGVh
bm0pOiBGaW5kIGEgbmljZXIgd2F5IHRvIHNodXRkb3duIGNsZWFubHkuICBPdXIgbG9nIGZpbGVz
IGFyZQogICAgICMgcHJvYmFibHkgbm90IGJlaW5nIGZsdXNoZWQsIGV0Yy4uLiB3aHkgZG9lc24n
dCBvdXIgcHl0aG9uIGhhdmUgb3Mua2lsbCA/CiAKLSAgICBkZWYgc3RvcChzZWxmLCBmb3JjZT1G
YWxzZSk6Ci0gICAgICAgIGlmIG5vdCBmb3JjZSBhbmQgbm90IHNlbGYuaXNfcnVubmluZygpOgor
ICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5pc19ydW5uaW5nKCk6CiAg
ICAgICAgICAgICByZXR1cm4KIAogICAgICAgICBodHRwZF9waWQgPSBOb25lCiAgICAgICAgIGlm
IHNlbGYuX3Byb2Nlc3M6CiAgICAgICAgICAgICBodHRwZF9waWQgPSBzZWxmLl9wcm9jZXNzLnBp
ZAotICAgICAgICBzZWxmLl9wb3J0X29iai5fc2h1dF9kb3duX2h0dHBfc2VydmVyKGh0dHBkX3Bp
ZCkKKyAgICAgICAgc2VsZi5fZXhlY3V0aXZlLmtpbGxfcHJvY2VzcyhodHRwZF9waWQpCiAKICAg
ICAgICAgaWYgc2VsZi5fcHJvY2VzczoKICAgICAgICAgICAgICMgd2FpdCgpIGlzIG5vdCB0aHJl
YWRzYWZlIGFuZCBjYW4gdGhyb3cgT1NFcnJvciBkdWUgdG86CmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVyX2Jhc2UucHkgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVyX2Jhc2Uu
cHkKaW5kZXggMmE0M2U4MTk3OGI5MmM2Y2E2ODFhOGE0YzI4Zjk5YjgzYjg3NmViYi4uOGUzZDIw
NjU4ZWViNDI1NWFlMTI5M2I2OWUxZjM4MGMzMmFiZDQ1MCAxMDA2NDQKLS0tIGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlcl9iYXNlLnB5CisrKyBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXJfYmFz
ZS5weQpAQCAtNDMsNiArNDMsNyBAQCBjbGFzcyBIdHRwU2VydmVyQmFzZShvYmplY3QpOgogCiAg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfb2JqKToKICAgICAgICAgc2VsZi5fcG9ydF9vYmog
PSBwb3J0X29iagorICAgICAgICBzZWxmLl9leGVjdXRpdmUgPSBwb3J0X29iai5fZXhlY3V0aXZl
CiAKICAgICBkZWYgd2FpdF9mb3JfYWN0aW9uKHNlbGYsIGFjdGlvbik6CiAgICAgICAgICIiIlJl
cGVhdCB0aGUgYWN0aW9uIGZvciAyMCBzZWNvbmRzIG9yIHVudGlsIGl0IHN1Y2NlZWRzLiBSZXR1
cm5zCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2h0dHBfc2VydmVyX2ludGVncmF0aW9udGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXJfaW50ZWdyYXRpb250ZXN0LnB5Cm5ldyBmaWxl
IG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmFhMmY0YjY0OGMwMDY2MWRjNDViYTI3N2M0ZWUxMWQ2NmYzN2Q3ZDQKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfc2Vy
dmVyX2ludGVncmF0aW9udGVzdC5weQpAQCAtMCwwICsxLDEyNiBAQAorIyBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisj
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisj
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
KyIiIkludGVncmF0aW9uIHRlc3RpbmcgZm9yIHRoZSBuZXctcnVuLXdlYmtpdC1odHRwZCBzY3Jp
cHQiIiIKKworaW1wb3J0IGVycm5vCitpbXBvcnQgb3MKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBz
dWJwcm9jZXNzCitpbXBvcnQgc3lzCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCB1bml0dGVzdAor
Citmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBwb3J0X3Rlc3RjYXNlCisK
KworY2xhc3MgTmV3UnVuV2ViS2l0SFRUUGRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAi
IiJUZXN0cyB0aGF0IG5ldy1ydW4td2Via2l0LWh0dHBkIG11c3QgcGFzcy4iIiIKKyAgICBIVFRQ
X1BPUlRTID0gKDgwMDAsIDgwODAsIDg0NDMpCisKKyAgICBkZWYgYXNzZXJ0X3NlcnZlcnNfYXJl
X2Rvd24oc2VsZiwgaG9zdCwgcG9ydHMpOgorICAgICAgICBmb3IgcG9ydCBpbiBwb3J0czoKKyAg
ICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0ZXN0X3NvY2tldCA9IHNvY2tldC5zb2Nr
ZXQoKQorICAgICAgICAgICAgICAgIHRlc3Rfc29ja2V0LmNvbm5lY3QoKGhvc3QsIHBvcnQpKQor
ICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgpCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvciwg
ZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZS5lcnJubyBpbiAoZXJybm8uRUNP
Tk5SRUZVU0VELCBlcnJuby5FQ09OTlJFU0VUKSkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAg
ICAgICAgICAgICAgdGVzdF9zb2NrZXQuY2xvc2UoKQorCisgICAgZGVmIGFzc2VydF9zZXJ2ZXJz
X2FyZV91cChzZWxmLCBob3N0LCBwb3J0cyk6CisgICAgICAgIGZvciBwb3J0IGluIHBvcnRzOgor
ICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHRlc3Rfc29ja2V0ID0gc29ja2V0LnNv
Y2tldCgpCisgICAgICAgICAgICAgICAgdGVzdF9zb2NrZXQuY29ubmVjdCgoaG9zdCwgcG9ydCkp
CisgICAgICAgICAgICBleGNlcHQgSU9FcnJvciwgZToKKyAgICAgICAgICAgICAgICBzZWxmLmZh
aWwoJ2ZhaWxlZCB0byBjb25uZWN0IHRvICVzOiVkJyAlIChob3N0LCBwb3J0KSkKKyAgICAgICAg
ICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgdGVzdF9zb2NrZXQuY2xvc2UoKQorCisgICAg
ZGVmIHJ1bl9zY3JpcHQoc2VsZiwgYXJncyk6CisgICAgICAgIHNjcmlwdF9kaXIgPSBvcy5wYXRo
LmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUo
b3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkpKSkKKyAgICAgICAgc2NyaXB0X3BhdGggPSBvcy5w
YXRoLmpvaW4oc2NyaXB0X2RpciwgJ25ldy1ydW4td2Via2l0LWh0dHBkJykKKyAgICAgICAgcmV0
dXJuIHN1YnByb2Nlc3MuY2FsbChbc3lzLmV4ZWN1dGFibGUsIHNjcmlwdF9wYXRoXSArIGFyZ3Ms
IHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisKKyAgICBk
ZWYgaW50ZWdyYXRpb25fdGVzdF9odHRwX3NlcnZlcl9fbm9ybWFsKHNlbGYpOgorICAgICAgICBz
ZWxmLmFzc2VydF9zZXJ2ZXJzX2FyZV9kb3duKCdsb2NhbGhvc3QnLCBzZWxmLkhUVFBfUE9SVFMp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYucnVuX3NjcmlwdChbJy0tc2VydmVyJywg
J3N0YXJ0J10pLCAwKQorICAgICAgICBzZWxmLmFzc2VydF9zZXJ2ZXJzX2FyZV91cCgnbG9jYWxo
b3N0Jywgc2VsZi5IVFRQX1BPUlRTKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLnJ1
bl9zY3JpcHQoWyctLXNlcnZlcicsICdzdG9wJ10pLCAwKQorICAgICAgICBzZWxmLmFzc2VydF9z
ZXJ2ZXJzX2FyZV9kb3duKCdsb2NhbGhvc3QnLCBzZWxmLkhUVFBfUE9SVFMpCisKKyAgICBkZWYg
aW50ZWdyYXRpb25fdGVzdF9odHRwX3NlcnZlcl9fZmFpbHMoc2VsZik6CisgICAgICAgICMgVGVz
dCB0aGF0IGlmIGEgcG9ydCBpc24ndCBhdmFpbGFibGUsIHRoZSBjYWxsIGZhaWxzLgorICAgICAg
ICBmb3IgcG9ydF9udW1iZXIgaW4gc2VsZi5IVFRQX1BPUlRTOgorICAgICAgICAgICAgdGVzdF9z
b2NrZXQgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAg
ICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHRlc3Rfc29ja2V0LmJpbmQoKCdsb2NhbGhvc3Qn
LCBwb3J0X251bWJlcikpCisgICAgICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciwgZToK
KyAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyBpbiAoZXJybm8uRUFERFJJTlVTRSwgZXJy
bm8uRUFMUkVBRFkpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdjb3VsZCBu
b3QgYmluZCB0byBwb3J0ICVkOiAlcycgJSAocG9ydF9udW1iZXIsIHN0cihlKSkpCisgICAgICAg
ICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2Vs
Zi5ydW5fc2NyaXB0KFsnLS1zZXJ2ZXInLCAnc3RhcnQnXSksIDEpCisgICAgICAgICAgICBmaW5h
bGx5OgorICAgICAgICAgICAgICAgIHNlbGYucnVuX3NjcmlwdChbJy0tc2VydmVyJywgJ3N0b3An
XSkKKyAgICAgICAgICAgICAgICB0ZXN0X3NvY2tldC5jbG9zZSgpCisKKyAgICAgICAgIyBUZXN0
IHRoYXQgY2FsbGluZyBzdGFydCgpIHR3aWNlIGZhaWxzLgorICAgICAgICB0cnk6CisgICAgICAg
ICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLnJ1bl9zY3JpcHQoWyctLXNlcnZlcicsICdzdGFy
dCddKSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYucnVuX3NjcmlwdChb
Jy0tc2VydmVyJywgJ3N0YXJ0J10pLCAxKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAg
c2VsZi5ydW5fc2NyaXB0KFsnLS1zZXJ2ZXInLCAnc3RvcCddKQorCisgICAgICAgICMgVGVzdCB0
aGF0IGNhbGxpbmcgc3RvcCgpIHR3aWNlIGlzIGhhcm1sZXNzLgorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFscyhzZWxmLnJ1bl9zY3JpcHQoWyctLXNlcnZlcicsICdzdG9wJ10pLCAwKQorCisgICAg
ZGVmIG1heWJlX21ha2VfZGlyKHNlbGYsICpjb21wcyk6CisgICAgICAgIHRyeToKKyAgICAgICAg
ICAgIG9zLm1ha2VkaXJzKG9zLnBhdGguam9pbigqY29tcHMpKQorICAgICAgICBleGNlcHQgT1NF
cnJvciwgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUVYSVNUOgorICAgICAg
ICAgICAgICAgIHJhaXNlCisKKyAgICBkZWYgaW50ZWdyYXRpb25fdGVzdF9odHRwX3NlcnZlcl9w
b3J0X2FuZF9yb290KHNlbGYpOgorICAgICAgICB0bXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHBy
ZWZpeD0nd2Via2l0cHl0ZXN0JykKKyAgICAgICAgc2VsZi5tYXliZV9tYWtlX2Rpcih0bXBkaXIs
ICdodHRwJywgJ3Rlc3RzJykKKyAgICAgICAgc2VsZi5tYXliZV9tYWtlX2Rpcih0bXBkaXIsICdm
YXN0JywgJ2pzJywgJ3Jlc291cmNlcycpCisgICAgICAgIHNlbGYubWF5YmVfbWFrZV9kaXIodG1w
ZGlyLCAnbWVkaWEnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0X3NlcnZlcnNfYXJlX2Rvd24oJ2xv
Y2FsaG9zdCcsIFsxODAwMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYucnVuX3Nj
cmlwdChbJy0tc2VydmVyJywgJ3N0YXJ0JywgJy0tcG9ydD0xODAwMCcsICctLXJvb3QnLCB0bXBk
aXJdKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRfc2VydmVyc19hcmVfdXAoJ2xvY2FsaG9zdCcs
IFsxODAwMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYucnVuX3NjcmlwdChbJy0t
c2VydmVyJywgJ3N0b3AnXSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0X3NlcnZlcnNfYXJlX2Rv
d24oJ2xvY2FsaG9zdCcsIFsxODAwMF0pCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoK
KyAgICBwb3J0X3Rlc3RjYXNlLm1haW4oKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9wb3J0X3Rlc3RjYXNlLnB5IGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9wb3J0X3Rlc3RjYXNlLnB5CmluZGV4IGY2MTczN2Qz
YTYxOTQ0ODNlMmI1OWUxMTcwZTlkYTIxZDM2ZmIyYjguLjMzMjQwY2Q3N2U3MTlhMDZmNGVhZGRl
YzEzMjgzOWRlMTVkYjg4MDMgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvcG9ydF90ZXN0Y2FzZS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L3BvcnRfdGVzdGNhc2UucHkKQEAgLTQ4LDkgKzQ4LDggQEAg
bW9ja19vcHRpb25zID0gbW9ja3Rvb2wuTW9ja09wdGlvbnMoY29uZmlndXJhdGlvbj0nUmVsZWFz
ZScpCiAKIGNsYXNzIFBvcnRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIiIiVGVz
dHMgdGhhdCBhbGwgUG9ydCBpbXBsZW1lbnRhdGlvbnMgbXVzdCBwYXNzLiIiIgotCi0gICAgSFRU
UF9QT1JUUyA9IFs4MDAwLCA4MDgwLCA4NDQzXQotICAgIFdFQlNPQ0tFVF9QT1JUUyA9IFs4ODgw
XQorICAgIEhUVFBfUE9SVFMgPSAoODAwMCwgODA4MCwgODQ0MykKKyAgICBXRUJTT0NLRVRfUE9S
VFMgPSAoODg4MCwpCiAKICAgICBkZWYgcG9ydF9tYWtlcihzZWxmLCBwbGF0Zm9ybSk6CiAgICAg
ICAgICIiIk92ZXJyaWRlIHRvIHJldHVybiB0aGUgY2xhc3Mgb2JqZWN0IG9mIHRoZSBwb3J0IHRv
IGJlIHRlc3RlZCwKQEAgLTkyLDIzICs5MSwyMyBAQCBjbGFzcyBQb3J0VGVzdENhc2UodW5pdHRl
c3QuVGVzdENhc2UpOgogICAgIGRlZiBhc3NlcnRfc2VydmVyc19hcmVfZG93bihzZWxmLCBob3N0
LCBwb3J0cyk6CiAgICAgICAgIGZvciBwb3J0IGluIHBvcnRzOgogICAgICAgICAgICAgdHJ5Ogot
ICAgICAgICAgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KCkKLSAgICAgICAgICAgICAgICBzLmNv
bm5lY3QoKGhvc3QsIHBvcnQpKQorICAgICAgICAgICAgICAgIHRlc3Rfc29ja2V0ID0gc29ja2V0
LnNvY2tldCgpCisgICAgICAgICAgICAgICAgdGVzdF9zb2NrZXQuY29ubmVjdCgoaG9zdCwgcG9y
dCkpCiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCkKICAgICAgICAgICAgIGV4Y2VwdCBJT0Vy
cm9yLCBlOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlLmVycm5vIGluIChlcnJu
by5FQ09OTlJFRlVTRUQsIGVycm5vLkVDT05OUkVTRVQpKQogICAgICAgICAgICAgZmluYWxseToK
LSAgICAgICAgICAgICAgICBzLmNsb3NlKCkKKyAgICAgICAgICAgICAgICB0ZXN0X3NvY2tldC5j
bG9zZSgpCiAKICAgICBkZWYgYXNzZXJ0X3NlcnZlcnNfYXJlX3VwKHNlbGYsIGhvc3QsIHBvcnRz
KToKICAgICAgICAgZm9yIHBvcnQgaW4gcG9ydHM6CiAgICAgICAgICAgICB0cnk6Ci0gICAgICAg
ICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoKQotICAgICAgICAgICAgICAgIHMuY29ubmVjdCgo
aG9zdCwgcG9ydCkpCisgICAgICAgICAgICAgICAgdGVzdF9zb2NrZXQgPSBzb2NrZXQuc29ja2V0
KCkKKyAgICAgICAgICAgICAgICB0ZXN0X3NvY2tldC5jb25uZWN0KChob3N0LCBwb3J0KSkKICAg
ICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgn
ZmFpbGVkIHRvIGNvbm5lY3QgdG8gJXM6JWQnICUgKGhvc3QsIHBvcnQpKQogICAgICAgICAgICAg
ZmluYWxseToKLSAgICAgICAgICAgICAgICBzLmNsb3NlKCkKKyAgICAgICAgICAgICAgICB0ZXN0
X3NvY2tldC5jbG9zZSgpCiAKICAgICBkZWYgaW50ZWdyYXRpb25fdGVzdF9odHRwX2xvY2soc2Vs
Zik6CiAgICAgICAgIHBvcnQgPSBzZWxmLm1ha2VfcG9ydCgpCkBAIC0xMzcsNyArMTM2LDYgQEAg
Y2xhc3MgUG9ydFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgcG9ydCA9IHNl
bGYubWFrZV9wb3J0KCkKICAgICAgICAgaWYgbm90IHBvcnQ6CiAgICAgICAgICAgICByZXR1cm4K
LQogICAgICAgICBzZWxmLmFzc2VydF9zZXJ2ZXJzX2FyZV9kb3duKCdsb2NhbGhvc3QnLCBzZWxm
LkhUVFBfUE9SVFMpCiAgICAgICAgIHBvcnQuc3RhcnRfaHR0cF9zZXJ2ZXIoKQogICAgICAgICBz
ZWxmLmFzc2VydF9zZXJ2ZXJzX2FyZV91cCgnbG9jYWxob3N0Jywgc2VsZi5IVFRQX1BPUlRTKQpA
QCAtMTQ4LDEzICsxNDYsMTIgQEAgY2xhc3MgUG9ydFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNl
KToKICAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkKICAgICAgICAgaWYgbm90IHBvcnQ6
CiAgICAgICAgICAgICByZXR1cm4KLQogICAgICAgICAjIFRlc3QgdGhhdCBpZiBhIHBvcnQgaXNu
J3QgYXZhaWxhYmxlLCB0aGUgY2FsbCBmYWlscy4KICAgICAgICAgZm9yIHBvcnRfbnVtYmVyIGlu
IHNlbGYuSFRUUF9QT1JUUzoKLSAgICAgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAg
ICAgICAgIHRlc3Rfc29ja2V0ID0gc29ja2V0LnNvY2tldCgpCiAgICAgICAgICAgICB0cnk6CiAg
ICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBzLmJpbmQoKCdsb2NhbGhv
c3QnLCBwb3J0X251bWJlcikpCisgICAgICAgICAgICAgICAgICAgIHRlc3Rfc29ja2V0LmJpbmQo
KCdsb2NhbGhvc3QnLCBwb3J0X251bWJlcikpCiAgICAgICAgICAgICAgICAgZXhjZXB0IHNvY2tl
dC5lcnJvciwgZToKICAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyBpbiAoZXJybm8uRUFE
RFJJTlVTRSwgZXJybm8uRUFMUkVBRFkpOgogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5m
YWlsKCdjb3VsZCBub3QgYmluZCB0byBwb3J0ICVkJyAlIHBvcnRfbnVtYmVyKQpAQCAtMTY2LDcg
KzE2Myw3IEBAIGNsYXNzIFBvcnRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAg
ICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAg
cG9ydC5zdG9wX2h0dHBfc2VydmVyKCkKLSAgICAgICAgICAgICAgICBzLmNsb3NlKCkKKyAgICAg
ICAgICAgICAgICB0ZXN0X3NvY2tldC5jbG9zZSgpCiAKICAgICAgICAgIyBUZXN0IHRoYXQgY2Fs
bGluZyBzdGFydCgpIHR3aWNlIGZhaWxzLgogICAgICAgICB0cnk6CkBAIC0yNjAsOSArMjU3LDkg
QEAgY2xhc3MgUG9ydFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgICAgICAjIFRl
c3QgdGhhdCBzdGFydCgpIGZhaWxzIGlmIGEgcG9ydCBpc24ndCBhdmFpbGFibGUuCiAgICAgICAg
IGZvciBwb3J0X251bWJlciBpbiBzZWxmLldFQlNPQ0tFVF9QT1JUUzoKLSAgICAgICAgICAgIHMg
PSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgICAgIHRlc3Rfc29ja2V0ID0gc29ja2V0LnNvY2tl
dCgpCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcy5iaW5kKCgnbG9jYWxob3N0
JywgcG9ydF9udW1iZXIpKQorICAgICAgICAgICAgICAgIHRlc3Rfc29ja2V0LmJpbmQoKCdsb2Nh
bGhvc3QnLCBwb3J0X251bWJlcikpCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAg
ICAgICAgICBwb3J0LnN0YXJ0X3dlYnNvY2tldF9zZXJ2ZXIoKQogICAgICAgICAgICAgICAgICAg
ICBzZWxmLmZhaWwoJ3Nob3VsZCBub3QgaGF2ZSBiZWVuIGFibGUgdG8gc3RhcnQgdGhlIHNlcnZl
ciB3aGlsZSBib3VuZCB0byAlZCcgJSBwb3J0X251bWJlcikKQEAgLTI3MCw3ICsyNjcsNyBAQCBj
bGFzcyBQb3J0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAgICAgICAgICAg
ICBwYXNzCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIHBvcnQuc3RvcF93
ZWJzb2NrZXRfc2VydmVyKCkKLSAgICAgICAgICAgICAgICBzLmNsb3NlKCkKKyAgICAgICAgICAg
ICAgICB0ZXN0X3NvY2tldC5jbG9zZSgpCiAKICAgICAgICAgIyBUZXN0IHRoYXQgY2FsbGluZyBz
dGFydCgpIHR3aWNlIGZhaWxzLgogICAgICAgICB0cnk6CmRpZmYgLS1naXQgYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYnNvY2tldF9zZXJ2ZXIucHkgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYnNvY2tldF9zZXJ2ZXIucHkK
aW5kZXggYTU5Y2IxZmFkYjhjODc3Njc1ZDAyMTE0MzEzMWI2ODM2MTllMGUyZS4uYTdkNmQ5YmMy
MjU5ZTBlOTFlMjVhNTM2MTczNzllNTc2YjQzOTc0OSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJzb2NrZXRfc2VydmVyLnB5CisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Vic29ja2V0X3NlcnZlci5w
eQpAQCAtMjA5LDkgKzIwOSw3IEBAIGNsYXNzIFB5V2ViU29ja2V0KGh0dHBfc2VydmVyLkxpZ2h0
dHBkKToKICAgICAgICAgdXJsID0gdXJsICsgJzovLzEyNy4wLjAuMTolZC8nICUgc2VsZi5fcG9y
dAogICAgICAgICBpZiBub3QgdXJsX2lzX2FsaXZlKHVybCk6CiAgICAgICAgICAgICBpZiBzZWxm
Ll9wcm9jZXNzLnJldHVybmNvZGUgPT0gTm9uZToKLSAgICAgICAgICAgICAgICAjIEZJWE1FOiBX
ZSBzaG91bGQgdXNlIGEgbm9uLXN0YXRpYyBFeGVjdXRpdmUgZm9yIGVhc2llcgotICAgICAgICAg
ICAgICAgICMgdGVzdGluZy4KLSAgICAgICAgICAgICAgICBFeGVjdXRpdmUoKS5raWxsX3Byb2Nl
c3Moc2VsZi5fcHJvY2Vzcy5waWQpCisgICAgICAgICAgICAgICAgc2VsZi5fZXhlY3V0aXZlLmtp
bGxfcHJvY2VzcyhzZWxmLl9wcm9jZXNzLnBpZCkKICAgICAgICAgICAgIHdpdGggY29kZWNzLm9w
ZW4ob3V0cHV0X2xvZywgInIiLCAidXRmLTgiKSBhcyBmcDoKICAgICAgICAgICAgICAgICBmb3Ig
bGluZSBpbiBmcDoKICAgICAgICAgICAgICAgICAgICAgX2xvZy5lcnJvcihsaW5lKQpAQCAtMjI3
LDggKzIyNSw4IEBAIGNsYXNzIFB5V2ViU29ja2V0KGh0dHBfc2VydmVyLkxpZ2h0dHBkKToKICAg
ICAgICAgICAgIHdpdGggY29kZWNzLm9wZW4oc2VsZi5fcGlkZmlsZSwgInciLCAiYXNjaWkiKSBh
cyBmaWxlOgogICAgICAgICAgICAgICAgIGZpbGUud3JpdGUoIiVkIiAlIHNlbGYuX3Byb2Nlc3Mu
cGlkKQogCi0gICAgZGVmIHN0b3Aoc2VsZiwgZm9yY2U9RmFsc2UpOgotICAgICAgICBpZiBub3Qg
Zm9yY2UgYW5kIG5vdCBzZWxmLmlzX3J1bm5pbmcoKToKKyAgICBkZWYgc3RvcChzZWxmKToKKyAg
ICAgICAgaWYgbm90IHNlbGYuaXNfcnVubmluZygpOgogICAgICAgICAgICAgcmV0dXJuCiAKICAg
ICAgICAgcGlkID0gTm9uZQpAQCAtMjQzLDggKzI0MSw3IEBAIGNsYXNzIFB5V2ViU29ja2V0KGh0
dHBfc2VydmVyLkxpZ2h0dHBkKToKICAgICAgICAgICAgICAgICAnRmFpbGVkIHRvIGZpbmQgJXMg
c2VydmVyIHBpZC4nICUgc2VsZi5fc2VydmVyX25hbWUpCiAKICAgICAgICAgX2xvZy5kZWJ1Zygn
U2h1dHRpbmcgZG93biAlcyBzZXJ2ZXIgJWQuJyAlIChzZWxmLl9zZXJ2ZXJfbmFtZSwgcGlkKSkK
LSAgICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIHVzZSBhIG5vbi1zdGF0aWMgRXhlY3V0aXZlIGZv
ciBlYXNpZXIgdGVzdGluZy4KLSAgICAgICAgRXhlY3V0aXZlKCkua2lsbF9wcm9jZXNzKHBpZCkK
KyAgICAgICAgc2VsZi5fZXhlY3V0aXZlLmtpbGxfcHJvY2VzcyhwaWQpCiAKICAgICAgICAgaWYg
c2VsZi5fcHJvY2VzczoKICAgICAgICAgICAgICMgd2FpdCgpIGlzIG5vdCB0aHJlYWRzYWZlIGFu
ZCBjYW4gdGhyb3cgT1NFcnJvciBkdWUgdG86Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>