<?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>53036</bug_id>
          
          <creation_ts>2011-01-24 12:18:50 -0800</creation_ts>
          <short_desc>nrwt: clean up unit tests, add test-mac, test-win, port.unit_test_user()</short_desc>
          <delta_ts>2011-01-25 14:52:27 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>53040</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>mihaip</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>339178</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-24 12:18:50 -0800</bug_when>
    <thetext>nrwt: clean up unit tests, add test-mac, test-win, port.unit_test_user()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339184</commentid>
    <comment_count>1</comment_count>
      <attachid>79954</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-24 12:19:24 -0800</bug_when>
    <thetext>Created attachment 79954
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339192</commentid>
    <comment_count>2</comment_count>
      <attachid>79955</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-24 12:21:09 -0800</bug_when>
    <thetext>Created attachment 79955
fix bug id in ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339208</commentid>
    <comment_count>3</comment_count>
      <attachid>79955</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-01-24 13:06:46 -0800</bug_when>
    <thetext>Comment on attachment 79955
fix bug id in ChangeLog

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

I don&apos;t understand the design choice of hanging mocks off the port.

&gt; Tools/Scripts/webkitpy/layout_tests/port/test.py:194
&gt; +class TestUser():

Why invent a second shared mock?  Why not use MockUser in mocktool.py?

&gt; Tools/Scripts/webkitpy/layout_tests/port/test.py:226
&gt; +        if &apos;user&apos; not in kwargs or kwargs[&apos;user&apos;] is None:

Why not just put user in function declaration as a keword argument with a default value of None?

&gt; Tools/Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:-59
&gt; -class MockUser():

I see, you moved it.

&gt; Tools/Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:88
&gt; +                            user=port.unit_test_user(), filesystem=filesystem)

I don&apos;t like this pattern of the real port objects exposing mocks.  Historically the real objects knew nothing about the unit tests or mocks.  I don&apos;t understand why we&apos;d want this.

&gt; Tools/Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:251
&gt; +        user = port.unit_test_user()

It might be useful to have a n object which could vend mocks, but I don&apos;t see why that should be the port.  The user object has nothing to do with the port.

The Host object (assuming I landed that patch?), often accessed via self.tool, holds the user and hte port, etc.  I could see it making sense to have a MockHost whihc knew how to vend default mock objects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339209</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-01-24 13:07:06 -0800</bug_when>
    <thetext>Adding reviewers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339215</commentid>
    <comment_count>5</comment_count>
      <attachid>79962</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-24 13:12:20 -0800</bug_when>
    <thetext>Created attachment 79962
use user_mock.MockUser()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339234</commentid>
    <comment_count>6</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-24 13:34:18 -0800</bug_when>
    <thetext>Sorry, I posted this for review before it was quite ready, so you probably caught some stuff in flux.

(In reply to comment #3)
&gt; (From update of attachment 79955 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=79955&amp;action=review
&gt; 
&gt; I don&apos;t understand the design choice of hanging mocks off the port.
&gt; 

I&apos;m not sure which code this is a reference to. If it&apos;s the port.unit_test_filesystem() stuff, I&apos;ll talk about that below. I&apos;ve removed port.unit_test_user(). If it&apos;s something else, lmk.

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/test.py:194
&gt; &gt; +class TestUser():
&gt; 
&gt; Why invent a second shared mock?  Why not use MockUser in mocktool.py?
&gt; 

See, I knew there was a MockUser that I&apos;d used before somewhere. I&apos;ll switch to that.

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/test.py:226
&gt; &gt; +        if &apos;user&apos; not in kwargs or kwargs[&apos;user&apos;] is None:
&gt; 
&gt; Why not just put user in function declaration as a keword argument with a default value of None?
&gt;

Good suggestion.
 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:-59
&gt; &gt; -class MockUser():
&gt; 
&gt; I see, you moved it.
&gt;

:)
 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:88
&gt; &gt; +                            user=port.unit_test_user(), filesystem=filesystem)
&gt; 
&gt; I don&apos;t like this pattern of the real port objects exposing mocks.  Historically the real objects knew nothing about the unit tests or mocks.  I don&apos;t understand why we&apos;d want this.
&gt;

I thought I responded to this in another patch somewhere, but you may not have seen it (at least I don&apos;t remember seeing a response from you).

I understand the concern. I&apos;m not sure what the best way to fix this is. I want the object to live in port/test.py because that&apos;s really where it needs to be (alongside the other test code). However, since we export the get() function in port/__init__.py, I don&apos;t really like other callers reaching into the port/* package to try and get stuff that isn&apos;t otherwise exported. I don&apos;t know if there&apos;s a better way to solve this, and am certainly open to suggestions.
 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:251
&gt; &gt; +        user = port.unit_test_user()
&gt; 
&gt; It might be useful to have a n object which could vend mocks, but I don&apos;t see why that should be the port.  The user object has nothing to do with the port.

Agreed. This is gone now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339243</commentid>
    <comment_count>7</comment_count>
      <attachid>79972</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-24 13:46:04 -0800</bug_when>
    <thetext>Created attachment 79972
update w/ review feedback from eric</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339244</commentid>
    <comment_count>8</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-24 13:47:33 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; &gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/test.py:194
&gt; &gt; &gt; +class TestUser():
&gt; &gt; 
&gt; &gt; Why invent a second shared mock?  Why not use MockUser in mocktool.py?
&gt; &gt; 
&gt; 
&gt; See, I knew there was a MockUser that I&apos;d used before somewhere. I&apos;ll switch to that.
&gt;

I often forget about (and am trying not to use mocktool where I&apos;m not explicitly doing tool-related stuff). Any objection to moving MockUser out into common/system/user_mock.py so that it sits alongside the real User object?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339248</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-01-24 13:55:56 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #6)
&gt; &gt; &gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/test.py:194
&gt; &gt; &gt; &gt; +class TestUser():
&gt; &gt; &gt; 
&gt; &gt; &gt; Why invent a second shared mock?  Why not use MockUser in mocktool.py?
&gt; &gt; &gt; 
&gt; &gt; 
&gt; &gt; See, I knew there was a MockUser that I&apos;d used before somewhere. I&apos;ll switch to that.
&gt; &gt;
&gt; 
&gt; I often forget about (and am trying not to use mocktool where I&apos;m not explicitly doing tool-related stuff). Any objection to moving MockUser out into common/system/user_mock.py so that it sits alongside the real User object?

Yeah.  You (or someone?) long ago proposed splitting mocktool.py out into mock files which live next to the various files they&apos;re mocking.  I support such. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339743</commentid>
    <comment_count>10</comment_count>
      <attachid>79972</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-01-25 10:46:00 -0800</bug_when>
    <thetext>Comment on attachment 79972
update w/ review feedback from eric

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

Eric, did you want to take another pass at this?

&gt; Tools/Scripts/webkitpy/common/system/filesystem_mock.py:206
&gt;          if self.files[src] is None:
&gt;              self._raise_not_found(src)
&gt;          self.files[dst] = self.files[src]
&gt; +        self.written_files[dst] = self.files[dst]
&gt;          self.files[src] = None
&gt; +        self.written_files[src] = None

Nit: src -&gt; source and dst -&gt; destination

&gt; Tools/Scripts/webkitpy/common/system/filesystem_mock.py:213
&gt; -    def open_binary_tempfile(self, suffix):
&gt; +    def open_binary_tempfile(self, suffix=&apos;&apos;):
&gt;          path = self._mktemp(suffix)
&gt; -        return WritableFileObject(self, path), path
&gt; +        return (WritableFileObject(self, path), path)

Nit: It would be nice in a follow up patch to just return a WritableFileObject and have a path() getter on WritableFileObject.

&gt; Tools/Scripts/webkitpy/layout_tests/port/test.py:207
&gt; +        if not port_name or port_name == &apos;test&apos;:
&gt; +            port_name = &apos;test-mac&apos;

The port_name == &apos;test&apos; condition seems weird.  Can we adjust the callers to pass in test-mac instead of test?

&gt; Tools/Scripts/webkitpy/layout_tests/port/test.py:270
&gt; +        if self._name == &apos;test-win&apos;:
&gt; +            return &apos;win&apos;
&gt;          return &apos;mac&apos;

Nit: Should this also use a map (like test_platform_name_to_name)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339846</commentid>
    <comment_count>11</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-25 12:31:52 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 79972 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=79972&amp;action=review
&gt; 
&gt; Eric, did you want to take another pass at this?
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/common/system/filesystem_mock.py:206
&gt; &gt;          if self.files[src] is None:
&gt; &gt;              self._raise_not_found(src)
&gt; &gt;          self.files[dst] = self.files[src]
&gt; &gt; +        self.written_files[dst] = self.files[dst]
&gt; &gt;          self.files[src] = None
&gt; &gt; +        self.written_files[src] = None
&gt; 
&gt; Nit: src -&gt; source and dst -&gt; destination
&gt; 

Will fix.

&gt; &gt; Tools/Scripts/webkitpy/common/system/filesystem_mock.py:213
&gt; &gt; -    def open_binary_tempfile(self, suffix):
&gt; &gt; +    def open_binary_tempfile(self, suffix=&apos;&apos;):
&gt; &gt;          path = self._mktemp(suffix)
&gt; &gt; -        return WritableFileObject(self, path), path
&gt; &gt; +        return (WritableFileObject(self, path), path)
&gt; 
&gt; Nit: It would be nice in a follow up patch to just return a WritableFileObject and have a path() getter on WritableFileObject.
&gt;

I can do this, but I&apos;m curious, why do you think that that would be better than this?
 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/test.py:207
&gt; &gt; +        if not port_name or port_name == &apos;test&apos;:
&gt; &gt; +            port_name = &apos;test-mac&apos;
&gt; 
&gt; The port_name == &apos;test&apos; condition seems weird.  Can we adjust the callers to pass in test-mac instead of test?
&gt; 

Yeah, we can, but I&apos;d prefer to do that in a separate patch. As you surmise, this is largely for compatibility.

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/test.py:270
&gt; &gt; +        if self._name == &apos;test-win&apos;:
&gt; &gt; +            return &apos;win&apos;
&gt; &gt;          return &apos;mac&apos;
&gt; 
&gt; Nit: Should this also use a map (like test_platform_name_to_name)?

This does get changed to that in bug 51222 (two patches on).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339848</commentid>
    <comment_count>12</comment_count>
      <attachid>79972</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-01-25 12:32:49 -0800</bug_when>
    <thetext>Comment on attachment 79972
update w/ review feedback from eric

Seems OK.  Tony had some useful-to-fix-comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339853</commentid>
    <comment_count>13</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-25 12:39:18 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 79972 [details])
&gt; Seems OK.  Tony had some useful-to-fix-comments.

Apart from the src-&gt;source change, were any of the others things you think should be changed in this patch before it lands (as opposed to later patches)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339862</commentid>
    <comment_count>14</comment_count>
      <attachid>79972</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-01-25 12:57:35 -0800</bug_when>
    <thetext>Comment on attachment 79972
update w/ review feedback from eric

(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; (From update of attachment 79972 [details] [details])
&gt; &gt; Seems OK.  Tony had some useful-to-fix-comments.
&gt; 
&gt; Apart from the src-&gt;source change, were any of the others things you think should be changed in this patch before it lands (as opposed to later patches)?

Follow up patches are fine.  I prefer not returning tuples because it&apos;s fragile and often hard to read.  It also makes it easy to grow the tuple, making things harder to follow.

I much prefer just returning a class with named members because declaring classes is so light weight compared to other languages.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339939</commentid>
    <comment_count>15</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-25 14:41:02 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 79972 [details])
&gt; (In reply to comment #13)
&gt; &gt; (In reply to comment #12)
&gt; &gt; &gt; (From update of attachment 79972 [details] [details] [details])
&gt; &gt; &gt; Seems OK.  Tony had some useful-to-fix-comments.
&gt; &gt; 
&gt; &gt; Apart from the src-&gt;source change, were any of the others things you think should be changed in this patch before it lands (as opposed to later patches)?
&gt; 
&gt; Follow up patches are fine.  I prefer not returning tuples because it&apos;s fragile and often hard to read.  It also makes it easy to grow the tuple, making things harder to follow.
&gt; 
&gt; I much prefer just returning a class with named members because declaring classes is so light weight compared to other languages.

Those are good reasons. I would only tend to define a new class if the two returned values are obviously related (as they are in this case).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339946</commentid>
    <comment_count>16</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-01-25 14:52:27 -0800</bug_when>
    <thetext>Committed r76642: &lt;http://trac.webkit.org/changeset/76642&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79954</attachid>
            <date>2011-01-24 12:19:24 -0800</date>
            <delta_ts>2011-01-24 12:21:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53036-20110124121922.patch</filename>
            <type>text/plain</type>
            <size>11215</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAyMGIw
NTM5YzFlYWRiMTViMmMyMzY4NTY3MzAyY2RmNmU5YTMzMTkyLi41MWUyNTRmNTQ4MzVlZmY1Njdm
YTM5N2U0ODFmYmY3ODU5MDQyNTc0IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDEtMjQgIERpcmsgUHJhbmtl
ICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTWlub3IgYnVnIGZpeGVzIGFuZCBjbGVhbnVwIGZvciBmaWxlc3lz
dGVtIHdyYXBwZXJzLCBwb3J0LyogdGVzdAorICAgICAgICBjbGFzc2VzLCB0ZXN0X2V4cGVjdGF0
aW9ucy5weS4gVGhpcyBjaGFuZ2UgYWRkcyAidGVzdC13aW4iIGFuZAorICAgICAgICAidGVzdC1t
YWMiIHZhcmlhbnRzIHRvIHRoZSB0ZXN0IHBvcnQgc28gdGhhdCB3ZSBjYW4gYmV0dGVyIHRlc3QK
KyAgICAgICAgcmViYXNlbGluaW5nLCBhbmQgYWRkcyBhIHBvcnQvdW5pdF90ZXN0X3VzZXIoKSBv
YmplY3QgZm9yIHJldXNlCisgICAgICAgIGluIHRlc3RpbmcuCisKKworICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtLnB5OgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtX21vY2sucHk6CisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9leHBlY3Rh
dGlvbnMucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9m
YWN0b3J5LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
YmFzZS5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rl
c3QucHk6CisKIDIwMTEtMDEtMjQgIEFuZHJlYXMgS2xpbmcgIDxrbGluZ0B3ZWJraXQub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW1fbW9jay5weSBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtX21vY2sucHkKaW5kZXggMDAw
NDk0NDk5NGY0YjczNTQ3NzQzZTBhZDE3ODA3NWFiOWMyZWQ2MC4uODhlZTlhYmM3NGU2ZmQ1NzAz
NjZhZDM0NzNkYWUyM2M4MzU0YzlmNSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW1fbW9jay5weQorKysgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV9tb2NrLnB5CkBAIC02OSw2ICs2OSw3IEBA
IGNsYXNzIE1vY2tGaWxlU3lzdGVtKG9iamVjdCk6CiAgICAgICAgICAgICByYWlzZSBJT0Vycm9y
KGVycm5vLkVJU0RJUiwgZGVzdGluYXRpb24sIG9zLnN0cmVycm9yKGVycm5vLklTRElSKSkKIAog
ICAgICAgICBzZWxmLmZpbGVzW2Rlc3RpbmF0aW9uXSA9IHNlbGYuZmlsZXNbc291cmNlXQorICAg
ICAgICBzZWxmLndyaXR0ZW5fZmlsZXNbZGVzdGluYXRpb25dID0gc2VsZi5maWxlc1tzb3VyY2Vd
CiAKICAgICBkZWYgZGlybmFtZShzZWxmLCBwYXRoKToKICAgICAgICAgcmV0dXJuIHNlbGYuX3Nw
bGl0KHBhdGgpWzBdCkBAIC0yMDAsMTQgKzIwMSwxNiBAQCBjbGFzcyBNb2NrRmlsZVN5c3RlbShv
YmplY3QpOgogICAgICAgICBpZiBzZWxmLmZpbGVzW3NyY10gaXMgTm9uZToKICAgICAgICAgICAg
IHNlbGYuX3JhaXNlX25vdF9mb3VuZChzcmMpCiAgICAgICAgIHNlbGYuZmlsZXNbZHN0XSA9IHNl
bGYuZmlsZXNbc3JjXQorICAgICAgICBzZWxmLndyaXR0ZW5fZmlsZXNbZHN0XSA9IHNlbGYuZmls
ZXNbZHN0XQogICAgICAgICBzZWxmLmZpbGVzW3NyY10gPSBOb25lCisgICAgICAgIHNlbGYud3Jp
dHRlbl9maWxlc1tzcmNdID0gTm9uZQogCiAgICAgZGVmIG5vcm1wYXRoKHNlbGYsIHBhdGgpOgog
ICAgICAgICByZXR1cm4gcGF0aAogCi0gICAgZGVmIG9wZW5fYmluYXJ5X3RlbXBmaWxlKHNlbGYs
IHN1ZmZpeCk6CisgICAgZGVmIG9wZW5fYmluYXJ5X3RlbXBmaWxlKHNlbGYsIHN1ZmZpeD0nJyk6
CiAgICAgICAgIHBhdGggPSBzZWxmLl9ta3RlbXAoc3VmZml4KQotICAgICAgICByZXR1cm4gV3Jp
dGFibGVGaWxlT2JqZWN0KHNlbGYsIHBhdGgpLCBwYXRoCisgICAgICAgIHJldHVybiAoV3JpdGFi
bGVGaWxlT2JqZWN0KHNlbGYsIHBhdGgpLCBwYXRoKQogCiAgICAgZGVmIG9wZW5fdGV4dF9maWxl
X2Zvcl93cml0aW5nKHNlbGYsIHBhdGgsIGFwcGVuZD1GYWxzZSk6CiAgICAgICAgIHJldHVybiBX
cml0YWJsZUZpbGVPYmplY3Qoc2VsZiwgcGF0aCwgYXBwZW5kKQpAQCAtMjI1LDYgKzIyOCw3IEBA
IGNsYXNzIE1vY2tGaWxlU3lzdGVtKG9iamVjdCk6CiAgICAgICAgIGlmIHNlbGYuZmlsZXNbcGF0
aF0gaXMgTm9uZToKICAgICAgICAgICAgIHNlbGYuX3JhaXNlX25vdF9mb3VuZChwYXRoKQogICAg
ICAgICBzZWxmLmZpbGVzW3BhdGhdID0gTm9uZQorICAgICAgICBzZWxmLndyaXR0ZW5fZmlsZXNb
cGF0aF0gPSBOb25lCiAKICAgICBkZWYgcm10cmVlKHNlbGYsIHBhdGgpOgogICAgICAgICBpZiBu
b3QgcGF0aC5lbmRzd2l0aCgnLycpOgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9leHBlY3RhdGlvbnMucHkgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2V4cGVj
dGF0aW9ucy5weQppbmRleCA4MDZiNjYzNDcxODBhOGMwMWMwOGZlZWRjODBiM2ZmMDI1NTUyNDY4
Li5hY2FkY2IzZmFlMWQ1Y2NmMDUyOTBjYmFjOWNkNmU0MmY5NzUzNjc0IDEwMDY0NAotLS0gYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2V4
cGVjdGF0aW9ucy5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9s
YXlvdXRfcGFja2FnZS90ZXN0X2V4cGVjdGF0aW9ucy5weQpAQCAtODksNyArODksNyBAQCBjbGFz
cyBUZXN0RXhwZWN0YXRpb25zOgogICAgICAgICAiIiJMb2FkcyBhbmQgcGFyc2VzIHRoZSB0ZXN0
IGV4cGVjdGF0aW9ucyBnaXZlbiBpbiB0aGUgc3RyaW5nLgogICAgICAgICBBcmdzOgogICAgICAg
ICAgICAgcG9ydDogaGFuZGxlIHRvIG9iamVjdCBjb250YWluaW5nIHBsYXRmb3JtLXNwZWNpZmlj
IGZ1bmN0aW9uYWxpdHkKLSAgICAgICAgICAgIHRlc3Q6IGxpc3Qgb2YgYWxsIG9mIHRoZSB0ZXN0
IGZpbGVzCisgICAgICAgICAgICB0ZXN0czogbGlzdCBvZiBhbGwgb2YgdGhlIHRlc3QgZmlsZXMK
ICAgICAgICAgICAgIGV4cGVjdGF0aW9uczogdGVzdCBleHBlY3RhdGlvbnMgYXMgYSBzdHJpbmcK
ICAgICAgICAgICAgIHRlc3RfcGxhdGZvcm1fbmFtZTogbmFtZSBvZiB0aGUgcGxhdGZvcm0gdG8g
bWF0Y2ggZXhwZWN0YXRpb25zCiAgICAgICAgICAgICAgICAgYWdhaW5zdC4gTm90ZSB0aGF0IHRo
aXMgbWF5IGJlIGRpZmZlcmVudCB0aGFuCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L19faW5pdF9fLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9fX2luaXRfXy5weQppbmRleCA1OWFiMmVmMTExMDliYmIzMDBm
M2RkZDVkYjkxYjIyMmM4MzZjN2Y1Li5kZjU3ZWQ3N2JmMWI2NjY1NTEwNTk5NzE0YzVkMThlZWE1
YjkzYzQ4IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L19faW5pdF9fLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvX19pbml0X18ucHkKQEAgLTMxLDQgKzMxLDQgQEAKIAogZnJvbSBmYWN0b3J5IGltcG9y
dCBnZXQKIAotZnJvbSB0ZXN0IGltcG9ydCB1bml0X3Rlc3RfZmlsZXN5c3RlbQorZnJvbSB0ZXN0
IGltcG9ydCB1bml0X3Rlc3RfZmlsZXN5c3RlbSwgdW5pdF90ZXN0X3VzZXIKZGlmZiAtLWdpdCBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weSBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQppbmRleCA2ZTVmYWJj
MGQ0ZjM2NGEzZDVhMzdiMmZjOGUxZWVhMDFiYzQ3MmVmLi5hZWViYzY2ODY4ODIxMGM4ZTAzYTFj
NjAyODhkODliYjVhMDJiZGU3IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2Jhc2UucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9iYXNlLnB5CkBAIC01ODIsNyArNTgyLDcgQEAgY2xhc3MgUG9ydChvYmpl
Y3QpOgogCiAgICAgICAgIEJhc2ljYWxseSB0aGlzIHN0cmluZyBzaG91bGQgY29udGFpbiB0aGUg
ZXF1aXZhbGVudCBvZiBhCiAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zIGZpbGUuIFNlZSB0ZXN0
X2V4cGVjdGF0aW9ucy5weSBmb3IgbW9yZSBkZXRhaWxzLiIiIgotICAgICAgICByYWlzZSBOb3RJ
bXBsZW1lbnRlZEVycm9yKCdQb3J0LnRlc3RfZXhwZWN0YXRpb25zJykKKyAgICAgICAgcmV0dXJu
IHNlbGYuX2ZpbGVzeXN0ZW0ucmVhZF90ZXh0X2ZpbGUoc2VsZi5wYXRoX3RvX3Rlc3RfZXhwZWN0
YXRpb25zX2ZpbGUoKSkKIAogICAgIGRlZiB0ZXN0X2V4cGVjdGF0aW9uc19vdmVycmlkZXMoc2Vs
Zik6CiAgICAgICAgICIiIlJldHVybnMgYW4gb3B0aW9uYWwgc2V0IG9mIG92ZXJyaWRlcyBmb3Ig
dGhlIHRlc3RfZXhwZWN0YXRpb25zLgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9mYWN0b3J5LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9mYWN0b3J5LnB5CmluZGV4IDY5MzU3NDQyYWViZTMxZTBhMTQ1ZDNj
OWEzZTE1OTA3N2IxMDQ1NjAuLjY3NWUwYzA5Njg4OTgwOGNiODUwYzYwZWQxMTE2YTkxNmNkODNi
NjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
ZmFjdG9yeS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2ZhY3RvcnkucHkKQEAgLTcwLDcgKzcwLDcgQEAgZGVmIF9nZXRfa3dhcmdzKCoqa3dhcmdzKToK
ICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigndW5rbm93biBwb3J0OyBzeXMucGxh
dGZvcm0gPSAiJXMiJyAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnBs
YXRmb3JtKQogCi0gICAgaWYgcG9ydF90b191c2UgPT0gJ3Rlc3QnOgorICAgIGlmIHBvcnRfdG9f
dXNlLnN0YXJ0c3dpdGgoJ3Rlc3QnKToKICAgICAgICAgaW1wb3J0IHRlc3QKICAgICAgICAgbWFr
ZXIgPSB0ZXN0LlRlc3RQb3J0CiAgICAgZWxpZiBwb3J0X3RvX3VzZS5zdGFydHN3aXRoKCdkcnly
dW4nKToKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvdGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVz
dC5weQppbmRleCA1ZGY1YzJkOWQ2MjE5YmY5NDY5NDk2ZjI1NzRlNjNjMTgxMTJhZGU0Li4yMmVj
ODI0MGNlNDFkMmNjYTA4ODM3YWZmY2I4YWNiZWMzNjU5NjJiIDEwMDY0NAotLS0gYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHkKKysrIGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5CkBAIC0xODksNiArMTg5LDE5
IEBAIFdPTlRGSVggU0tJUCA6IGZhaWx1cmVzL2V4cGVjdGVkL2V4Y2VwdGlvbi5odG1sID0gQ1JB
U0gKICAgICByZXR1cm4gZnMKIAogCisjIFRoaXMgaXMgYSBzdHViYmVkLW91dCBVc2VyIGltcGxl
bWVudGF0aW9uLiBXZSBjYW4ndCB1c2UgYSByZWFsIHVzZXIKKyMgYmVjYXVzZSB3ZSdyZSB1c2lu
ZyBhIGZha2UgZmlsZXN5c3RlbS4KK2NsYXNzIFRlc3RVc2VyKCk6CisgICAgZGVmIF9faW5pdF9f
KHNlbGYpOgorICAgICAgICBzZWxmLnVybCA9IE5vbmUKKworICAgIGRlZiBvcGVuX3VybChzZWxm
LCB1cmwpOgorICAgICAgICBzZWxmLnVybCA9IHVybAorCisKK2RlZiB1bml0X3Rlc3RfdXNlcigp
OgorICAgIHJldHVybiBUZXN0VXNlcigpCisKIGNsYXNzIFRlc3RQb3J0KGJhc2UuUG9ydCk6CiAg
ICAgIiIiVGVzdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUG9ydCBpbnRlcmZhY2UuIiIiCiAKQEAg
LTIxMCw3ICsyMjMsMTMgQEAgY2xhc3MgVGVzdFBvcnQoYmFzZS5Qb3J0KToKICAgICAgICAgZWxz
ZToKICAgICAgICAgICAgIHNlbGYuX3Rlc3RzID0gdW5pdF90ZXN0X2xpc3QoKQogCi0gICAgICAg
IGt3YXJncy5zZXRkZWZhdWx0KCdwb3J0X25hbWUnLCAndGVzdCcpCisgICAgICAgIGlmICd1c2Vy
JyBub3QgaW4ga3dhcmdzIG9yIGt3YXJnc1sndXNlciddIGlzIE5vbmU6CisgICAgICAgICAgICBr
d2FyZ3NbJ3VzZXInXSA9IHVuaXRfdGVzdF91c2VyKCkKKworICAgICAgICBzZWxmLl9leHBlY3Rh
dGlvbnNfcGF0aCA9IExBWU9VVF9URVNUX0RJUiArICcvcGxhdGZvcm0vdGVzdC90ZXN0X2V4cGVj
dGF0aW9ucy50eHQnCisgICAgICAgIGt3YXJncy5zZXRkZWZhdWx0KCdwb3J0X25hbWUnLCAndGVz
dC1tYWMnKQorICAgICAgICBpZiBrd2FyZ3NbJ3BvcnRfbmFtZSddID09ICd0ZXN0JzoKKyAgICAg
ICAgICAgIGt3YXJnc1sncG9ydF9uYW1lJ10gPSAndGVzdC1tYWMnCiAgICAgICAgIGJhc2UuUG9y
dC5fX2luaXRfXyhzZWxmLCAqKmt3YXJncykKIAogICAgIGRlZiBiYXNlbGluZV9wYXRoKHNlbGYp
OgpAQCAtMjY0LDE3ICsyODMsMjMgQEAgY2xhc3MgVGVzdFBvcnQoYmFzZS5Qb3J0KToKICAgICBk
ZWYgdGVzdF9iYXNlX3BsYXRmb3JtX25hbWVzKHNlbGYpOgogICAgICAgICByZXR1cm4gKCdtYWMn
LCAnd2luJykKIAotICAgIGRlZiB0ZXN0X2V4cGVjdGF0aW9ucyhzZWxmKToKLSAgICAgICAgcmV0
dXJuIHNlbGYuX2ZpbGVzeXN0ZW0ucmVhZF90ZXh0X2ZpbGUoTEFZT1VUX1RFU1RfRElSICsgJy9w
bGF0Zm9ybS90ZXN0L3Rlc3RfZXhwZWN0YXRpb25zLnR4dCcpCisgICAgZGVmIHBhdGhfdG9fdGVz
dF9leHBlY3RhdGlvbnNfZmlsZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2V4cGVjdGF0
aW9uc19wYXRoCiAKICAgICBkZWYgdGVzdF9wbGF0Zm9ybV9uYW1lKHNlbGYpOgorICAgICAgICBp
ZiBzZWxmLl9uYW1lID09ICd0ZXN0LXdpbic6CisgICAgICAgICAgICByZXR1cm4gJ3dpbicKICAg
ICAgICAgcmV0dXJuICdtYWMnCiAKICAgICBkZWYgdGVzdF9wbGF0Zm9ybV9uYW1lcyhzZWxmKToK
ICAgICAgICAgcmV0dXJuIHNlbGYudGVzdF9iYXNlX3BsYXRmb3JtX25hbWVzKCkKIAogICAgIGRl
ZiB0ZXN0X3BsYXRmb3JtX25hbWVfdG9fbmFtZShzZWxmLCB0ZXN0X3BsYXRmb3JtX25hbWUpOgot
ICAgICAgICByZXR1cm4gdGVzdF9wbGF0Zm9ybV9uYW1lCisgICAgICAgIG5hbWVfbWFwID0gewor
ICAgICAgICAgICAgJ21hYyc6ICd0ZXN0LW1hYycsCisgICAgICAgICAgICAnd2luJzogJ3Rlc3Qt
d2luJywKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmFtZV9tYXBbdGVzdF9wbGF0Zm9ybV9u
YW1lXQogCiAgICAgZGVmIHZlcnNpb24oc2VsZik6CiAgICAgICAgIHJldHVybiAnJwpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0
c191bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93
ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKaW5kZXggNjc3YmVjZDI1OTQzZmM0M2U2ZDNlMTEyODQ0
MGNhM2E2YzY4NTk3NC4uYzhmNTkzOGI2ZGI5NDcxMGQ0NGNmOGE1MmE4MTJmMTAxODI3NDUxZCAx
MDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtp
dF90ZXN0c191bml0dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5CkBAIC01NiwxNCArNTYsNiBAQCBmcm9t
IHdlYmtpdHB5LnRlc3Quc2tpcCBpbXBvcnQgc2tpcF9pZgogZnJvbSB3ZWJraXRweS50aGlyZHBh
cnR5Lm1vY2sgaW1wb3J0IE1vY2sKIAogCi1jbGFzcyBNb2NrVXNlcigpOgotICAgIGRlZiBfX2lu
aXRfXyhzZWxmKToKLSAgICAgICAgc2VsZi51cmwgPSBOb25lCi0KLSAgICBkZWYgb3Blbl91cmwo
c2VsZiwgdXJsKToKLSAgICAgICAgc2VsZi51cmwgPSB1cmwKLQotCiBkZWYgcGFyc2VfYXJncyhl
eHRyYV9hcmdzPU5vbmUsIHJlY29yZF9yZXN1bHRzPUZhbHNlLCB0ZXN0c19pbmNsdWRlZD1GYWxz
ZSwKICAgICAgICAgICAgICAgIHByaW50X25vdGhpbmc9VHJ1ZSk6CiAgICAgZXh0cmFfYXJncyA9
IGV4dHJhX2FyZ3Mgb3IgW10KQEAgLTkzLDcgKzg1LDcgQEAgZGVmIHBhc3NpbmdfcnVuKGV4dHJh
X2FyZ3M9Tm9uZSwgcG9ydF9vYmo9Tm9uZSwgcmVjb3JkX3Jlc3VsdHM9RmFsc2UsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RzX2luY2x1ZGVkKQogICAgIGlmIG5v
dCBwb3J0X29iajoKICAgICAgICAgcG9ydF9vYmogPSBwb3J0LmdldChwb3J0X25hbWU9b3B0aW9u
cy5wbGF0Zm9ybSwgb3B0aW9ucz1vcHRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVzZXI9TW9ja1VzZXIoKSwgZmlsZXN5c3RlbT1maWxlc3lzdGVtKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVzZXI9cG9ydC51bml0X3Rlc3RfdXNlcigpLCBmaWxlc3lzdGVtPWZpbGVz
eXN0ZW0pCiAgICAgcmVzID0gcnVuX3dlYmtpdF90ZXN0cy5ydW4ocG9ydF9vYmosIG9wdGlvbnMs
IHBhcnNlZF9hcmdzKQogICAgIHJldHVybiByZXMgPT0gMAogCkBAIC0xMDMsNyArOTUsNyBAQCBk
ZWYgbG9nZ2luZ19ydW4oZXh0cmFfYXJncz1Ob25lLCBwb3J0X29iaj1Ob25lLCByZWNvcmRfcmVz
dWx0cz1GYWxzZSwgdGVzdHNfaW5jbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZWNvcmRfcmVzdWx0cz1yZWNvcmRfcmVzdWx0cywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGVzdHNfaW5jbHVkZWQ9dGVzdHNfaW5jbHVkZWQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50X25vdGhpbmc9RmFsc2UpCi0gICAg
dXNlciA9IE1vY2tVc2VyKCkKKyAgICB1c2VyID0gcG9ydC51bml0X3Rlc3RfdXNlcigpCiAgICAg
aWYgbm90IHBvcnRfb2JqOgogICAgICAgICBwb3J0X29iaiA9IHBvcnQuZ2V0KHBvcnRfbmFtZT1v
cHRpb25zLnBsYXRmb3JtLCBvcHRpb25zPW9wdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdXNlcj11c2VyLCBmaWxlc3lzdGVtPWZpbGVzeXN0ZW0pCkBAIC0xMzUsNyArMTI3LDcg
QEAgZGVmIGdldF90ZXN0c19ydW4oZXh0cmFfYXJncz1Ob25lLCB0ZXN0c19pbmNsdWRlZD1GYWxz
ZSwgZmxhdHRlbl9iYXRjaGVzPUZhbHNlLAogICAgICAgICBleHRyYV9hcmdzID0gWydwYXNzZXMn
LCAnZmFpbHVyZXMnXSArIGV4dHJhX2FyZ3MKICAgICBvcHRpb25zLCBwYXJzZWRfYXJncyA9IHBh
cnNlX2FyZ3MoZXh0cmFfYXJncywgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSkKIAotICAgIHVzZXIgPSBN
b2NrVXNlcigpCisgICAgdXNlciA9IHBvcnQudW5pdF90ZXN0X3VzZXIoKQogCiAgICAgdGVzdF9i
YXRjaGVzID0gW10KIApAQCAtMjU2LDcgKzI0OCw3IEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0
LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X2xpbnRfdGVzdF9maWxlc19fZXJyb3JzKHNlbGYp
OgogICAgICAgICBvcHRpb25zLCBwYXJzZWRfYXJncyA9IHBhcnNlX2FyZ3MoWyctLWxpbnQtdGVz
dC1maWxlcyddKQotICAgICAgICB1c2VyID0gTW9ja1VzZXIoKQorICAgICAgICB1c2VyID0gcG9y
dC51bml0X3Rlc3RfdXNlcigpCiAgICAgICAgIHBvcnRfb2JqID0gcG9ydC5nZXQob3B0aW9ucy5w
bGF0Zm9ybSwgb3B0aW9ucz1vcHRpb25zLCB1c2VyPXVzZXIpCiAgICAgICAgIHBvcnRfb2JqLnRl
c3RfZXhwZWN0YXRpb25zID0gbGFtYmRhOiAiIyBzeW50YXggZXJyb3IiCiAgICAgICAgIHJlcywg
b3V0LCBlcnIgPSBydW5fYW5kX2NhcHR1cmUocG9ydF9vYmosIG9wdGlvbnMsIHBhcnNlZF9hcmdz
KQpAQCAtNDQxLDcgKzQzMyw3IEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToK
IAogICAgICAgICBkZWYgZ2V0X3BvcnRfZm9yX3J1bihhcmdzKToKICAgICAgICAgICAgIG9wdGlv
bnMsIHBhcnNlZF9hcmdzID0gcnVuX3dlYmtpdF90ZXN0cy5wYXJzZV9hcmdzKGFyZ3MpCi0gICAg
ICAgICAgICB0ZXN0X3BvcnQgPSBJbWFnZURpZmZUZXN0UG9ydChvcHRpb25zPW9wdGlvbnMsIHVz
ZXI9TW9ja1VzZXIoKSkKKyAgICAgICAgICAgIHRlc3RfcG9ydCA9IEltYWdlRGlmZlRlc3RQb3J0
KG9wdGlvbnM9b3B0aW9ucywgdXNlcj1wb3J0LnVuaXRfdGVzdF91c2VyKCkpCiAgICAgICAgICAg
ICBwYXNzaW5nX3J1bihhcmdzLCBwb3J0X29iaj10ZXN0X3BvcnQsIHRlc3RzX2luY2x1ZGVkPVRy
dWUpCiAgICAgICAgICAgICByZXR1cm4gdGVzdF9wb3J0CiAKQEAgLTUxMSw5ICs1MDMsOSBAQCBj
bGFzcyBSZWJhc2VsaW5lVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIGZpbGVfbGlz
dC5yZW1vdmUoJy90bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy90ZXN0c19ydW4udHh0JykKICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZmlsZV9saXN0KSwgNikKICAgICAgICAgc2VsZi5hc3Nl
cnRCYXNlbGluZXMoZmlsZV9saXN0LAotICAgICAgICAgICAgIi9wbGF0Zm9ybS90ZXN0L3Bhc3Nl
cy9pbWFnZSIpCisgICAgICAgICAgICAiL3BsYXRmb3JtL3Rlc3QtbWFjL3Bhc3Nlcy9pbWFnZSIp
CiAgICAgICAgIHNlbGYuYXNzZXJ0QmFzZWxpbmVzKGZpbGVfbGlzdCwKLSAgICAgICAgICAgICIv
cGxhdGZvcm0vdGVzdC9mYWlsdXJlcy9leHBlY3RlZC9taXNzaW5nX2ltYWdlIikKKyAgICAgICAg
ICAgICIvcGxhdGZvcm0vdGVzdC1tYWMvZmFpbHVyZXMvZXhwZWN0ZWQvbWlzc2luZ19pbWFnZSIp
CiAKIAogY2xhc3MgRHJ5cnVuVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79955</attachid>
            <date>2011-01-24 12:21:09 -0800</date>
            <delta_ts>2011-01-24 13:12:14 -0800</delta_ts>
            <desc>fix bug id in ChangeLog</desc>
            <filename>bug-53036-20110124122108.patch</filename>
            <type>text/plain</type>
            <size>11270</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAyMGIw
NTM5YzFlYWRiMTViMmMyMzY4NTY3MzAyY2RmNmU5YTMzMTkyLi4wZjdmNzhiMGY2ZWVkOTYwMDA3
Zjk5NGFmM2ZjYTA2ZjExOTQ5YTAzIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMDEtMjQgIERpcmsgUHJhbmtl
ICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTWlub3IgYnVnIGZpeGVzIGFuZCBjbGVhbnVwIGZvciBmaWxlc3lz
dGVtIHdyYXBwZXJzLCBwb3J0LyogdGVzdAorICAgICAgICBjbGFzc2VzLCB0ZXN0X2V4cGVjdGF0
aW9ucy5weS4gVGhpcyBjaGFuZ2UgYWRkcyAidGVzdC13aW4iIGFuZAorICAgICAgICAidGVzdC1t
YWMiIHZhcmlhbnRzIHRvIHRoZSB0ZXN0IHBvcnQgc28gdGhhdCB3ZSBjYW4gYmV0dGVyIHRlc3QK
KyAgICAgICAgcmViYXNlbGluaW5nLCBhbmQgYWRkcyBhIHBvcnQvdW5pdF90ZXN0X3VzZXIoKSBv
YmplY3QgZm9yIHJldXNlCisgICAgICAgIGluIHRlc3RpbmcuCisKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzMDM2CisKKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbS5weToKKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV9tb2NrLnB5OgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfZXhwZWN0YXRp
b25zLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZmFj
dG9yeS5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jh
c2UucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0
LnB5OgorCiAyMDExLTAxLTI0ICBBbmRyZWFzIEtsaW5nICA8a2xpbmdAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtX21vY2sucHkgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV9tb2NrLnB5CmluZGV4IDAwMDQ5
NDQ5OTRmNGI3MzU0Nzc0M2UwYWQxNzgwNzVhYjljMmVkNjAuLjg4ZWU5YWJjNzRlNmZkNTcwMzY2
YWQzNDczZGFlMjNjODM1NGM5ZjUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3N5c3RlbS9maWxlc3lzdGVtX21vY2sucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW1fbW9jay5weQpAQCAtNjksNiArNjksNyBAQCBj
bGFzcyBNb2NrRmlsZVN5c3RlbShvYmplY3QpOgogICAgICAgICAgICAgcmFpc2UgSU9FcnJvcihl
cnJuby5FSVNESVIsIGRlc3RpbmF0aW9uLCBvcy5zdHJlcnJvcihlcnJuby5JU0RJUikpCiAKICAg
ICAgICAgc2VsZi5maWxlc1tkZXN0aW5hdGlvbl0gPSBzZWxmLmZpbGVzW3NvdXJjZV0KKyAgICAg
ICAgc2VsZi53cml0dGVuX2ZpbGVzW2Rlc3RpbmF0aW9uXSA9IHNlbGYuZmlsZXNbc291cmNlXQog
CiAgICAgZGVmIGRpcm5hbWUoc2VsZiwgcGF0aCk6CiAgICAgICAgIHJldHVybiBzZWxmLl9zcGxp
dChwYXRoKVswXQpAQCAtMjAwLDE0ICsyMDEsMTYgQEAgY2xhc3MgTW9ja0ZpbGVTeXN0ZW0ob2Jq
ZWN0KToKICAgICAgICAgaWYgc2VsZi5maWxlc1tzcmNdIGlzIE5vbmU6CiAgICAgICAgICAgICBz
ZWxmLl9yYWlzZV9ub3RfZm91bmQoc3JjKQogICAgICAgICBzZWxmLmZpbGVzW2RzdF0gPSBzZWxm
LmZpbGVzW3NyY10KKyAgICAgICAgc2VsZi53cml0dGVuX2ZpbGVzW2RzdF0gPSBzZWxmLmZpbGVz
W2RzdF0KICAgICAgICAgc2VsZi5maWxlc1tzcmNdID0gTm9uZQorICAgICAgICBzZWxmLndyaXR0
ZW5fZmlsZXNbc3JjXSA9IE5vbmUKIAogICAgIGRlZiBub3JtcGF0aChzZWxmLCBwYXRoKToKICAg
ICAgICAgcmV0dXJuIHBhdGgKIAotICAgIGRlZiBvcGVuX2JpbmFyeV90ZW1wZmlsZShzZWxmLCBz
dWZmaXgpOgorICAgIGRlZiBvcGVuX2JpbmFyeV90ZW1wZmlsZShzZWxmLCBzdWZmaXg9JycpOgog
ICAgICAgICBwYXRoID0gc2VsZi5fbWt0ZW1wKHN1ZmZpeCkKLSAgICAgICAgcmV0dXJuIFdyaXRh
YmxlRmlsZU9iamVjdChzZWxmLCBwYXRoKSwgcGF0aAorICAgICAgICByZXR1cm4gKFdyaXRhYmxl
RmlsZU9iamVjdChzZWxmLCBwYXRoKSwgcGF0aCkKIAogICAgIGRlZiBvcGVuX3RleHRfZmlsZV9m
b3Jfd3JpdGluZyhzZWxmLCBwYXRoLCBhcHBlbmQ9RmFsc2UpOgogICAgICAgICByZXR1cm4gV3Jp
dGFibGVGaWxlT2JqZWN0KHNlbGYsIHBhdGgsIGFwcGVuZCkKQEAgLTIyNSw2ICsyMjgsNyBAQCBj
bGFzcyBNb2NrRmlsZVN5c3RlbShvYmplY3QpOgogICAgICAgICBpZiBzZWxmLmZpbGVzW3BhdGhd
IGlzIE5vbmU6CiAgICAgICAgICAgICBzZWxmLl9yYWlzZV9ub3RfZm91bmQocGF0aCkKICAgICAg
ICAgc2VsZi5maWxlc1twYXRoXSA9IE5vbmUKKyAgICAgICAgc2VsZi53cml0dGVuX2ZpbGVzW3Bh
dGhdID0gTm9uZQogCiAgICAgZGVmIHJtdHJlZShzZWxmLCBwYXRoKToKICAgICAgICAgaWYgbm90
IHBhdGguZW5kc3dpdGgoJy8nKToKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfZXhwZWN0YXRpb25zLnB5IGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9leHBlY3Rh
dGlvbnMucHkKaW5kZXggODA2YjY2MzQ3MTgwYThjMDFjMDhmZWVkYzgwYjNmZjAyNTU1MjQ2OC4u
YWNhZGNiM2ZhZTFkNWNjZjA1MjkwY2JhYzljZDZlNDJmOTc1MzY3NCAxMDA2NDQKLS0tIGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvdGVzdF9leHBl
Y3RhdGlvbnMucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5
b3V0X3BhY2thZ2UvdGVzdF9leHBlY3RhdGlvbnMucHkKQEAgLTg5LDcgKzg5LDcgQEAgY2xhc3Mg
VGVzdEV4cGVjdGF0aW9uczoKICAgICAgICAgIiIiTG9hZHMgYW5kIHBhcnNlcyB0aGUgdGVzdCBl
eHBlY3RhdGlvbnMgZ2l2ZW4gaW4gdGhlIHN0cmluZy4KICAgICAgICAgQXJnczoKICAgICAgICAg
ICAgIHBvcnQ6IGhhbmRsZSB0byBvYmplY3QgY29udGFpbmluZyBwbGF0Zm9ybS1zcGVjaWZpYyBm
dW5jdGlvbmFsaXR5Ci0gICAgICAgICAgICB0ZXN0OiBsaXN0IG9mIGFsbCBvZiB0aGUgdGVzdCBm
aWxlcworICAgICAgICAgICAgdGVzdHM6IGxpc3Qgb2YgYWxsIG9mIHRoZSB0ZXN0IGZpbGVzCiAg
ICAgICAgICAgICBleHBlY3RhdGlvbnM6IHRlc3QgZXhwZWN0YXRpb25zIGFzIGEgc3RyaW5nCiAg
ICAgICAgICAgICB0ZXN0X3BsYXRmb3JtX25hbWU6IG5hbWUgb2YgdGhlIHBsYXRmb3JtIHRvIG1h
dGNoIGV4cGVjdGF0aW9ucwogICAgICAgICAgICAgICAgIGFnYWluc3QuIE5vdGUgdGhhdCB0aGlz
IG1heSBiZSBkaWZmZXJlbnQgdGhhbgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9fX2luaXRfXy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvX19pbml0X18ucHkKaW5kZXggNTlhYjJlZjExMTA5YmJiMzAwZjNk
ZGQ1ZGI5MWIyMjJjODM2YzdmNS4uZGY1N2VkNzdiZjFiNjY2NTUxMDU5OTcxNGM1ZDE4ZWVhNWI5
M2M0OCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9y
dC9fX2luaXRfXy5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L19faW5pdF9fLnB5CkBAIC0zMSw0ICszMSw0IEBACiAKIGZyb20gZmFjdG9yeSBpbXBvcnQg
Z2V0CiAKLWZyb20gdGVzdCBpbXBvcnQgdW5pdF90ZXN0X2ZpbGVzeXN0ZW0KK2Zyb20gdGVzdCBp
bXBvcnQgdW5pdF90ZXN0X2ZpbGVzeXN0ZW0sIHVuaXRfdGVzdF91c2VyCmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkKaW5kZXggNmU1ZmFiYzBk
NGYzNjRhM2Q1YTM3YjJmYzhlMWVlYTAxYmM0NzJlZi4uYWVlYmM2Njg2ODgyMTBjOGUwM2ExYzYw
Mjg4ZDg5YmI1YTAyYmRlNyAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC9iYXNlLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvYmFzZS5weQpAQCAtNTgyLDcgKzU4Miw3IEBAIGNsYXNzIFBvcnQob2JqZWN0
KToKIAogICAgICAgICBCYXNpY2FsbHkgdGhpcyBzdHJpbmcgc2hvdWxkIGNvbnRhaW4gdGhlIGVx
dWl2YWxlbnQgb2YgYQogICAgICAgICB0ZXN0X2V4cGVjdGF0aW9ucyBmaWxlLiBTZWUgdGVzdF9l
eHBlY3RhdGlvbnMucHkgZm9yIG1vcmUgZGV0YWlscy4iIiIKLSAgICAgICAgcmFpc2UgTm90SW1w
bGVtZW50ZWRFcnJvcignUG9ydC50ZXN0X2V4cGVjdGF0aW9ucycpCisgICAgICAgIHJldHVybiBz
ZWxmLl9maWxlc3lzdGVtLnJlYWRfdGV4dF9maWxlKHNlbGYucGF0aF90b190ZXN0X2V4cGVjdGF0
aW9uc19maWxlKCkpCiAKICAgICBkZWYgdGVzdF9leHBlY3RhdGlvbnNfb3ZlcnJpZGVzKHNlbGYp
OgogICAgICAgICAiIiJSZXR1cm5zIGFuIG9wdGlvbmFsIHNldCBvZiBvdmVycmlkZXMgZm9yIHRo
ZSB0ZXN0X2V4cGVjdGF0aW9ucy4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvZmFjdG9yeS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvZmFjdG9yeS5weQppbmRleCA2OTM1NzQ0MmFlYmUzMWUwYTE0NWQzYzlh
M2UxNTkwNzdiMTA0NTYwLi42NzVlMGMwOTY4ODk4MDhjYjg1MGM2MGVkMTExNmE5MTZjZDgzYjY2
IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Zh
Y3RvcnkucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9m
YWN0b3J5LnB5CkBAIC03MCw3ICs3MCw3IEBAIGRlZiBfZ2V0X2t3YXJncygqKmt3YXJncyk6CiAg
ICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ3Vua25vd24gcG9ydDsgc3lzLnBsYXRm
b3JtID0gIiVzIicgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5wbGF0
Zm9ybSkKIAotICAgIGlmIHBvcnRfdG9fdXNlID09ICd0ZXN0JzoKKyAgICBpZiBwb3J0X3RvX3Vz
ZS5zdGFydHN3aXRoKCd0ZXN0Jyk6CiAgICAgICAgIGltcG9ydCB0ZXN0CiAgICAgICAgIG1ha2Vy
ID0gdGVzdC5UZXN0UG9ydAogICAgIGVsaWYgcG9ydF90b191c2Uuc3RhcnRzd2l0aCgnZHJ5cnVu
Jyk6CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L3Rlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3Qu
cHkKaW5kZXggNWRmNWMyZDlkNjIxOWJmOTQ2OTQ5NmYyNTc0ZTYzYzE4MTEyYWRlNC4uMjJlYzgy
NDBjZTQxZDJjY2EwODgzN2FmZmNiOGFjYmVjMzY1OTYyYiAxMDA2NDQKLS0tIGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5CisrKyBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weQpAQCAtMTg5LDYgKzE4OSwxOSBA
QCBXT05URklYIFNLSVAgOiBmYWlsdXJlcy9leHBlY3RlZC9leGNlcHRpb24uaHRtbCA9IENSQVNI
CiAgICAgcmV0dXJuIGZzCiAKIAorIyBUaGlzIGlzIGEgc3R1YmJlZC1vdXQgVXNlciBpbXBsZW1l
bnRhdGlvbi4gV2UgY2FuJ3QgdXNlIGEgcmVhbCB1c2VyCisjIGJlY2F1c2Ugd2UncmUgdXNpbmcg
YSBmYWtlIGZpbGVzeXN0ZW0uCitjbGFzcyBUZXN0VXNlcigpOgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmKToKKyAgICAgICAgc2VsZi51cmwgPSBOb25lCisKKyAgICBkZWYgb3Blbl91cmwoc2VsZiwg
dXJsKToKKyAgICAgICAgc2VsZi51cmwgPSB1cmwKKworCitkZWYgdW5pdF90ZXN0X3VzZXIoKToK
KyAgICByZXR1cm4gVGVzdFVzZXIoKQorCiBjbGFzcyBUZXN0UG9ydChiYXNlLlBvcnQpOgogICAg
ICIiIlRlc3QgaW1wbGVtZW50YXRpb24gb2YgdGhlIFBvcnQgaW50ZXJmYWNlLiIiIgogCkBAIC0y
MTAsNyArMjIzLDEzIEBAIGNsYXNzIFRlc3RQb3J0KGJhc2UuUG9ydCk6CiAgICAgICAgIGVsc2U6
CiAgICAgICAgICAgICBzZWxmLl90ZXN0cyA9IHVuaXRfdGVzdF9saXN0KCkKIAotICAgICAgICBr
d2FyZ3Muc2V0ZGVmYXVsdCgncG9ydF9uYW1lJywgJ3Rlc3QnKQorICAgICAgICBpZiAndXNlcicg
bm90IGluIGt3YXJncyBvciBrd2FyZ3NbJ3VzZXInXSBpcyBOb25lOgorICAgICAgICAgICAga3dh
cmdzWyd1c2VyJ10gPSB1bml0X3Rlc3RfdXNlcigpCisKKyAgICAgICAgc2VsZi5fZXhwZWN0YXRp
b25zX3BhdGggPSBMQVlPVVRfVEVTVF9ESVIgKyAnL3BsYXRmb3JtL3Rlc3QvdGVzdF9leHBlY3Rh
dGlvbnMudHh0JworICAgICAgICBrd2FyZ3Muc2V0ZGVmYXVsdCgncG9ydF9uYW1lJywgJ3Rlc3Qt
bWFjJykKKyAgICAgICAgaWYga3dhcmdzWydwb3J0X25hbWUnXSA9PSAndGVzdCc6CisgICAgICAg
ICAgICBrd2FyZ3NbJ3BvcnRfbmFtZSddID0gJ3Rlc3QtbWFjJwogICAgICAgICBiYXNlLlBvcnQu
X19pbml0X18oc2VsZiwgKiprd2FyZ3MpCiAKICAgICBkZWYgYmFzZWxpbmVfcGF0aChzZWxmKToK
QEAgLTI2NCwxNyArMjgzLDIzIEBAIGNsYXNzIFRlc3RQb3J0KGJhc2UuUG9ydCk6CiAgICAgZGVm
IHRlc3RfYmFzZV9wbGF0Zm9ybV9uYW1lcyhzZWxmKToKICAgICAgICAgcmV0dXJuICgnbWFjJywg
J3dpbicpCiAKLSAgICBkZWYgdGVzdF9leHBlY3RhdGlvbnMoc2VsZik6Ci0gICAgICAgIHJldHVy
biBzZWxmLl9maWxlc3lzdGVtLnJlYWRfdGV4dF9maWxlKExBWU9VVF9URVNUX0RJUiArICcvcGxh
dGZvcm0vdGVzdC90ZXN0X2V4cGVjdGF0aW9ucy50eHQnKQorICAgIGRlZiBwYXRoX3RvX3Rlc3Rf
ZXhwZWN0YXRpb25zX2ZpbGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9leHBlY3RhdGlv
bnNfcGF0aAogCiAgICAgZGVmIHRlc3RfcGxhdGZvcm1fbmFtZShzZWxmKToKKyAgICAgICAgaWYg
c2VsZi5fbmFtZSA9PSAndGVzdC13aW4nOgorICAgICAgICAgICAgcmV0dXJuICd3aW4nCiAgICAg
ICAgIHJldHVybiAnbWFjJwogCiAgICAgZGVmIHRlc3RfcGxhdGZvcm1fbmFtZXMoc2VsZik6CiAg
ICAgICAgIHJldHVybiBzZWxmLnRlc3RfYmFzZV9wbGF0Zm9ybV9uYW1lcygpCiAKICAgICBkZWYg
dGVzdF9wbGF0Zm9ybV9uYW1lX3RvX25hbWUoc2VsZiwgdGVzdF9wbGF0Zm9ybV9uYW1lKToKLSAg
ICAgICAgcmV0dXJuIHRlc3RfcGxhdGZvcm1fbmFtZQorICAgICAgICBuYW1lX21hcCA9IHsKKyAg
ICAgICAgICAgICdtYWMnOiAndGVzdC1tYWMnLAorICAgICAgICAgICAgJ3dpbic6ICd0ZXN0LXdp
bicsCisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5hbWVfbWFwW3Rlc3RfcGxhdGZvcm1fbmFt
ZV0KIAogICAgIGRlZiB2ZXJzaW9uKHNlbGYpOgogICAgICAgICByZXR1cm4gJycKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNf
dW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Vi
a2l0X3Rlc3RzX3VuaXR0ZXN0LnB5CmluZGV4IDY3N2JlY2QyNTk0M2ZjNDNlNmQzZTExMjg0NDBj
YTNhNmM2ODU5NzQuLmM4ZjU5MzhiNmRiOTQ3MTBkNDRjZjhhNTJhODEyZjEwMTgyNzQ1MWQgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRf
dGVzdHNfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weQpAQCAtNTYsMTQgKzU2LDYgQEAgZnJvbSB3
ZWJraXRweS50ZXN0LnNraXAgaW1wb3J0IHNraXBfaWYKIGZyb20gd2Via2l0cHkudGhpcmRwYXJ0
eS5tb2NrIGltcG9ydCBNb2NrCiAKIAotY2xhc3MgTW9ja1VzZXIoKToKLSAgICBkZWYgX19pbml0
X18oc2VsZik6Ci0gICAgICAgIHNlbGYudXJsID0gTm9uZQotCi0gICAgZGVmIG9wZW5fdXJsKHNl
bGYsIHVybCk6Ci0gICAgICAgIHNlbGYudXJsID0gdXJsCi0KLQogZGVmIHBhcnNlX2FyZ3MoZXh0
cmFfYXJncz1Ob25lLCByZWNvcmRfcmVzdWx0cz1GYWxzZSwgdGVzdHNfaW5jbHVkZWQ9RmFsc2Us
CiAgICAgICAgICAgICAgICBwcmludF9ub3RoaW5nPVRydWUpOgogICAgIGV4dHJhX2FyZ3MgPSBl
eHRyYV9hcmdzIG9yIFtdCkBAIC05Myw3ICs4NSw3IEBAIGRlZiBwYXNzaW5nX3J1bihleHRyYV9h
cmdzPU5vbmUsIHBvcnRfb2JqPU5vbmUsIHJlY29yZF9yZXN1bHRzPUZhbHNlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0c19pbmNsdWRlZCkKICAgICBpZiBub3Qg
cG9ydF9vYmo6CiAgICAgICAgIHBvcnRfb2JqID0gcG9ydC5nZXQocG9ydF9uYW1lPW9wdGlvbnMu
cGxhdGZvcm0sIG9wdGlvbnM9b3B0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
c2VyPU1vY2tVc2VyKCksIGZpbGVzeXN0ZW09ZmlsZXN5c3RlbSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1c2VyPXBvcnQudW5pdF90ZXN0X3VzZXIoKSwgZmlsZXN5c3RlbT1maWxlc3lz
dGVtKQogICAgIHJlcyA9IHJ1bl93ZWJraXRfdGVzdHMucnVuKHBvcnRfb2JqLCBvcHRpb25zLCBw
YXJzZWRfYXJncykKICAgICByZXR1cm4gcmVzID09IDAKIApAQCAtMTAzLDcgKzk1LDcgQEAgZGVm
IGxvZ2dpbmdfcnVuKGV4dHJhX2FyZ3M9Tm9uZSwgcG9ydF9vYmo9Tm9uZSwgcmVjb3JkX3Jlc3Vs
dHM9RmFsc2UsIHRlc3RzX2luY2wKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVjb3JkX3Jlc3VsdHM9cmVjb3JkX3Jlc3VsdHMsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRlc3RzX2luY2x1ZGVkPXRlc3RzX2luY2x1ZGVkLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludF9ub3RoaW5nPUZhbHNlKQotICAgIHVz
ZXIgPSBNb2NrVXNlcigpCisgICAgdXNlciA9IHBvcnQudW5pdF90ZXN0X3VzZXIoKQogICAgIGlm
IG5vdCBwb3J0X29iajoKICAgICAgICAgcG9ydF9vYmogPSBwb3J0LmdldChwb3J0X25hbWU9b3B0
aW9ucy5wbGF0Zm9ybSwgb3B0aW9ucz1vcHRpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVzZXI9dXNlciwgZmlsZXN5c3RlbT1maWxlc3lzdGVtKQpAQCAtMTM1LDcgKzEyNyw3IEBA
IGRlZiBnZXRfdGVzdHNfcnVuKGV4dHJhX2FyZ3M9Tm9uZSwgdGVzdHNfaW5jbHVkZWQ9RmFsc2Us
IGZsYXR0ZW5fYmF0Y2hlcz1GYWxzZSwKICAgICAgICAgZXh0cmFfYXJncyA9IFsncGFzc2VzJywg
J2ZhaWx1cmVzJ10gKyBleHRyYV9hcmdzCiAgICAgb3B0aW9ucywgcGFyc2VkX2FyZ3MgPSBwYXJz
ZV9hcmdzKGV4dHJhX2FyZ3MsIHRlc3RzX2luY2x1ZGVkPVRydWUpCiAKLSAgICB1c2VyID0gTW9j
a1VzZXIoKQorICAgIHVzZXIgPSBwb3J0LnVuaXRfdGVzdF91c2VyKCkKIAogICAgIHRlc3RfYmF0
Y2hlcyA9IFtdCiAKQEAgLTI1Niw3ICsyNDgsNyBAQCBjbGFzcyBNYWluVGVzdCh1bml0dGVzdC5U
ZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9saW50X3Rlc3RfZmlsZXNfX2Vycm9ycyhzZWxmKToK
ICAgICAgICAgb3B0aW9ucywgcGFyc2VkX2FyZ3MgPSBwYXJzZV9hcmdzKFsnLS1saW50LXRlc3Qt
ZmlsZXMnXSkKLSAgICAgICAgdXNlciA9IE1vY2tVc2VyKCkKKyAgICAgICAgdXNlciA9IHBvcnQu
dW5pdF90ZXN0X3VzZXIoKQogICAgICAgICBwb3J0X29iaiA9IHBvcnQuZ2V0KG9wdGlvbnMucGxh
dGZvcm0sIG9wdGlvbnM9b3B0aW9ucywgdXNlcj11c2VyKQogICAgICAgICBwb3J0X29iai50ZXN0
X2V4cGVjdGF0aW9ucyA9IGxhbWJkYTogIiMgc3ludGF4IGVycm9yIgogICAgICAgICByZXMsIG91
dCwgZXJyID0gcnVuX2FuZF9jYXB0dXJlKHBvcnRfb2JqLCBvcHRpb25zLCBwYXJzZWRfYXJncykK
QEAgLTQ0MSw3ICs0MzMsNyBAQCBjbGFzcyBNYWluVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAK
ICAgICAgICAgZGVmIGdldF9wb3J0X2Zvcl9ydW4oYXJncyk6CiAgICAgICAgICAgICBvcHRpb25z
LCBwYXJzZWRfYXJncyA9IHJ1bl93ZWJraXRfdGVzdHMucGFyc2VfYXJncyhhcmdzKQotICAgICAg
ICAgICAgdGVzdF9wb3J0ID0gSW1hZ2VEaWZmVGVzdFBvcnQob3B0aW9ucz1vcHRpb25zLCB1c2Vy
PU1vY2tVc2VyKCkpCisgICAgICAgICAgICB0ZXN0X3BvcnQgPSBJbWFnZURpZmZUZXN0UG9ydChv
cHRpb25zPW9wdGlvbnMsIHVzZXI9cG9ydC51bml0X3Rlc3RfdXNlcigpKQogICAgICAgICAgICAg
cGFzc2luZ19ydW4oYXJncywgcG9ydF9vYmo9dGVzdF9wb3J0LCB0ZXN0c19pbmNsdWRlZD1UcnVl
KQogICAgICAgICAgICAgcmV0dXJuIHRlc3RfcG9ydAogCkBAIC01MTEsOSArNTAzLDkgQEAgY2xh
c3MgUmViYXNlbGluZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBmaWxlX2xpc3Qu
cmVtb3ZlKCcvdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvdGVzdHNfcnVuLnR4dCcpCiAgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwobGVuKGZpbGVfbGlzdCksIDYpCiAgICAgICAgIHNlbGYuYXNzZXJ0
QmFzZWxpbmVzKGZpbGVfbGlzdCwKLSAgICAgICAgICAgICIvcGxhdGZvcm0vdGVzdC9wYXNzZXMv
aW1hZ2UiKQorICAgICAgICAgICAgIi9wbGF0Zm9ybS90ZXN0LW1hYy9wYXNzZXMvaW1hZ2UiKQog
ICAgICAgICBzZWxmLmFzc2VydEJhc2VsaW5lcyhmaWxlX2xpc3QsCi0gICAgICAgICAgICAiL3Bs
YXRmb3JtL3Rlc3QvZmFpbHVyZXMvZXhwZWN0ZWQvbWlzc2luZ19pbWFnZSIpCisgICAgICAgICAg
ICAiL3BsYXRmb3JtL3Rlc3QtbWFjL2ZhaWx1cmVzL2V4cGVjdGVkL21pc3NpbmdfaW1hZ2UiKQog
CiAKIGNsYXNzIERyeXJ1blRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79962</attachid>
            <date>2011-01-24 13:12:20 -0800</date>
            <delta_ts>2011-01-24 13:46:00 -0800</delta_ts>
            <desc>use user_mock.MockUser()</desc>
            <filename>bug-53036-20110124131219.patch</filename>
            <type>text/plain</type>
            <size>16025</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAyMGIw
NTM5YzFlYWRiMTViMmMyMzY4NTY3MzAyY2RmNmU5YTMzMTkyLi5jNjAwZWYzYWY3OTZlYTNlZjJi
MDU4YTU1OTRhZDMxNmEwNGQyMmM2IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTEtMDEtMjQgIERpcmsgUHJhbmtl
ICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTWlub3IgYnVnIGZpeGVzIGFuZCBjbGVhbnVwIGZvciBmaWxlc3lz
dGVtIHdyYXBwZXJzLCBwb3J0LyogdGVzdAorICAgICAgICBjbGFzc2VzLCB0ZXN0X2V4cGVjdGF0
aW9ucy5weS4gVGhpcyBjaGFuZ2UgYWRkcyAidGVzdC13aW4iIGFuZAorICAgICAgICAidGVzdC1t
YWMiIHZhcmlhbnRzIHRvIHRoZSB0ZXN0IHBvcnQgc28gdGhhdCB3ZSBjYW4gYmV0dGVyIHRlc3QK
KyAgICAgICAgcmViYXNlbGluaW5nLCBhbmQgYWRkcyBhIE1vY2tVc2VyKCkgb2JqZWN0IGZvciBy
ZXVzZSBpbiB0ZXN0aW5nLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01MzAzNgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lz
dGVtL2ZpbGVzeXN0ZW0ucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lz
dGVtL2ZpbGVzeXN0ZW1fbW9jay5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9zeXN0ZW0vdXNlcl9tb2NrLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfZXhwZWN0YXRpb25zLnB5OgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZmFjdG9yeS5weToKKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHk6CisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5OgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHk6Cisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcmViYXNlbGluZV9jaHJvbWl1
bV93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHk6CisKIDIwMTEtMDEtMjQgIEFuZHJlYXMgS2xpbmcg
IDxrbGluZ0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0
ZW1fbW9jay5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lz
dGVtX21vY2sucHkKaW5kZXggMDAwNDk0NDk5NGY0YjczNTQ3NzQzZTBhZDE3ODA3NWFiOWMyZWQ2
MC4uODhlZTlhYmM3NGU2ZmQ1NzAzNjZhZDM0NzNkYWUyM2M4MzU0YzlmNSAxMDA2NDQKLS0tIGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW1fbW9jay5weQor
KysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV9tb2Nr
LnB5CkBAIC02OSw2ICs2OSw3IEBAIGNsYXNzIE1vY2tGaWxlU3lzdGVtKG9iamVjdCk6CiAgICAg
ICAgICAgICByYWlzZSBJT0Vycm9yKGVycm5vLkVJU0RJUiwgZGVzdGluYXRpb24sIG9zLnN0cmVy
cm9yKGVycm5vLklTRElSKSkKIAogICAgICAgICBzZWxmLmZpbGVzW2Rlc3RpbmF0aW9uXSA9IHNl
bGYuZmlsZXNbc291cmNlXQorICAgICAgICBzZWxmLndyaXR0ZW5fZmlsZXNbZGVzdGluYXRpb25d
ID0gc2VsZi5maWxlc1tzb3VyY2VdCiAKICAgICBkZWYgZGlybmFtZShzZWxmLCBwYXRoKToKICAg
ICAgICAgcmV0dXJuIHNlbGYuX3NwbGl0KHBhdGgpWzBdCkBAIC0yMDAsMTQgKzIwMSwxNiBAQCBj
bGFzcyBNb2NrRmlsZVN5c3RlbShvYmplY3QpOgogICAgICAgICBpZiBzZWxmLmZpbGVzW3NyY10g
aXMgTm9uZToKICAgICAgICAgICAgIHNlbGYuX3JhaXNlX25vdF9mb3VuZChzcmMpCiAgICAgICAg
IHNlbGYuZmlsZXNbZHN0XSA9IHNlbGYuZmlsZXNbc3JjXQorICAgICAgICBzZWxmLndyaXR0ZW5f
ZmlsZXNbZHN0XSA9IHNlbGYuZmlsZXNbZHN0XQogICAgICAgICBzZWxmLmZpbGVzW3NyY10gPSBO
b25lCisgICAgICAgIHNlbGYud3JpdHRlbl9maWxlc1tzcmNdID0gTm9uZQogCiAgICAgZGVmIG5v
cm1wYXRoKHNlbGYsIHBhdGgpOgogICAgICAgICByZXR1cm4gcGF0aAogCi0gICAgZGVmIG9wZW5f
YmluYXJ5X3RlbXBmaWxlKHNlbGYsIHN1ZmZpeCk6CisgICAgZGVmIG9wZW5fYmluYXJ5X3RlbXBm
aWxlKHNlbGYsIHN1ZmZpeD0nJyk6CiAgICAgICAgIHBhdGggPSBzZWxmLl9ta3RlbXAoc3VmZml4
KQotICAgICAgICByZXR1cm4gV3JpdGFibGVGaWxlT2JqZWN0KHNlbGYsIHBhdGgpLCBwYXRoCisg
ICAgICAgIHJldHVybiAoV3JpdGFibGVGaWxlT2JqZWN0KHNlbGYsIHBhdGgpLCBwYXRoKQogCiAg
ICAgZGVmIG9wZW5fdGV4dF9maWxlX2Zvcl93cml0aW5nKHNlbGYsIHBhdGgsIGFwcGVuZD1GYWxz
ZSk6CiAgICAgICAgIHJldHVybiBXcml0YWJsZUZpbGVPYmplY3Qoc2VsZiwgcGF0aCwgYXBwZW5k
KQpAQCAtMjI1LDYgKzIyOCw3IEBAIGNsYXNzIE1vY2tGaWxlU3lzdGVtKG9iamVjdCk6CiAgICAg
ICAgIGlmIHNlbGYuZmlsZXNbcGF0aF0gaXMgTm9uZToKICAgICAgICAgICAgIHNlbGYuX3JhaXNl
X25vdF9mb3VuZChwYXRoKQogICAgICAgICBzZWxmLmZpbGVzW3BhdGhdID0gTm9uZQorICAgICAg
ICBzZWxmLndyaXR0ZW5fZmlsZXNbcGF0aF0gPSBOb25lCiAKICAgICBkZWYgcm10cmVlKHNlbGYs
IHBhdGgpOgogICAgICAgICBpZiBub3QgcGF0aC5lbmRzd2l0aCgnLycpOgpkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3VzZXJfbW9jay5weSBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS91c2VyX21vY2sucHkKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZTljYjcyN2Q5NzQ5NTA0ZTg3YzM0Zjg3ZmJkZmVjOGRiZTYyMzcxMgotLS0gL2Rldi9udWxsCisr
KyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS91c2VyX21vY2sucHkKQEAg
LTAsMCArMSwzNyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIwor
IyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBk
aXN0cmlidXRpb24uCisjICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIldyYXBwZXIgbW9kdWxlIGZvciBtb2Nr
aW5nIG91dCAvIHRlc3RpbmcgVXNlciBvYmplY3RzLiIiIgorCisKK2NsYXNzIE1vY2tVc2VyKG9i
amVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLm9wZW5lZF91cmxz
ID0gW10KKworICAgIGRlZiBvcGVuX3VybChzZWxmLCB1cmwpOgorICAgICAgICBzZWxmLm9wZW5l
ZF91cmxzLmFwcGVuZCh1cmwpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2V4cGVjdGF0aW9ucy5weSBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfZXhwZWN0YXRp
b25zLnB5CmluZGV4IDgwNmI2NjM0NzE4MGE4YzAxYzA4ZmVlZGM4MGIzZmYwMjU1NTI0NjguLmFj
YWRjYjNmYWUxZDVjY2YwNTI5MGNiYWM5Y2Q2ZTQyZjk3NTM2NzQgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfZXhwZWN0
YXRpb25zLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91
dF9wYWNrYWdlL3Rlc3RfZXhwZWN0YXRpb25zLnB5CkBAIC04OSw3ICs4OSw3IEBAIGNsYXNzIFRl
c3RFeHBlY3RhdGlvbnM6CiAgICAgICAgICIiIkxvYWRzIGFuZCBwYXJzZXMgdGhlIHRlc3QgZXhw
ZWN0YXRpb25zIGdpdmVuIGluIHRoZSBzdHJpbmcuCiAgICAgICAgIEFyZ3M6CiAgICAgICAgICAg
ICBwb3J0OiBoYW5kbGUgdG8gb2JqZWN0IGNvbnRhaW5pbmcgcGxhdGZvcm0tc3BlY2lmaWMgZnVu
Y3Rpb25hbGl0eQotICAgICAgICAgICAgdGVzdDogbGlzdCBvZiBhbGwgb2YgdGhlIHRlc3QgZmls
ZXMKKyAgICAgICAgICAgIHRlc3RzOiBsaXN0IG9mIGFsbCBvZiB0aGUgdGVzdCBmaWxlcwogICAg
ICAgICAgICAgZXhwZWN0YXRpb25zOiB0ZXN0IGV4cGVjdGF0aW9ucyBhcyBhIHN0cmluZwogICAg
ICAgICAgICAgdGVzdF9wbGF0Zm9ybV9uYW1lOiBuYW1lIG9mIHRoZSBwbGF0Zm9ybSB0byBtYXRj
aCBleHBlY3RhdGlvbnMKICAgICAgICAgICAgICAgICBhZ2FpbnN0LiBOb3RlIHRoYXQgdGhpcyBt
YXkgYmUgZGlmZmVyZW50IHRoYW4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvYmFzZS5weQppbmRleCA2ZTVmYWJjMGQ0ZjM2NGEzZDVhMzdiMmZjOGUxZWVh
MDFiYzQ3MmVmLi5hZWViYzY2ODY4ODIxMGM4ZTAzYTFjNjAyODhkODliYjVhMDJiZGU3IDEwMDY0
NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkK
KysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CkBA
IC01ODIsNyArNTgyLDcgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogCiAgICAgICAgIEJhc2ljYWxs
eSB0aGlzIHN0cmluZyBzaG91bGQgY29udGFpbiB0aGUgZXF1aXZhbGVudCBvZiBhCiAgICAgICAg
IHRlc3RfZXhwZWN0YXRpb25zIGZpbGUuIFNlZSB0ZXN0X2V4cGVjdGF0aW9ucy5weSBmb3IgbW9y
ZSBkZXRhaWxzLiIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdQb3J0LnRl
c3RfZXhwZWN0YXRpb25zJykKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVzeXN0ZW0ucmVhZF90
ZXh0X2ZpbGUoc2VsZi5wYXRoX3RvX3Rlc3RfZXhwZWN0YXRpb25zX2ZpbGUoKSkKIAogICAgIGRl
ZiB0ZXN0X2V4cGVjdGF0aW9uc19vdmVycmlkZXMoc2VsZik6CiAgICAgICAgICIiIlJldHVybnMg
YW4gb3B0aW9uYWwgc2V0IG9mIG92ZXJyaWRlcyBmb3IgdGhlIHRlc3RfZXhwZWN0YXRpb25zLgpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9mYWN0
b3J5LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9mYWN0b3J5
LnB5CmluZGV4IDY5MzU3NDQyYWViZTMxZTBhMTQ1ZDNjOWEzZTE1OTA3N2IxMDQ1NjAuLjY3NWUw
YzA5Njg4OTgwOGNiODUwYzYwZWQxMTE2YTkxNmNkODNiNjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZmFjdG9yeS5weQorKysgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2ZhY3RvcnkucHkKQEAgLTcwLDcgKzcw
LDcgQEAgZGVmIF9nZXRfa3dhcmdzKCoqa3dhcmdzKToKICAgICAgICAgcmFpc2UgTm90SW1wbGVt
ZW50ZWRFcnJvcigndW5rbm93biBwb3J0OyBzeXMucGxhdGZvcm0gPSAiJXMiJyAlCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnBsYXRmb3JtKQogCi0gICAgaWYgcG9ydF90
b191c2UgPT0gJ3Rlc3QnOgorICAgIGlmIHBvcnRfdG9fdXNlLnN0YXJ0c3dpdGgoJ3Rlc3QnKToK
ICAgICAgICAgaW1wb3J0IHRlc3QKICAgICAgICAgbWFrZXIgPSB0ZXN0LlRlc3RQb3J0CiAgICAg
ZWxpZiBwb3J0X3RvX3VzZS5zdGFydHN3aXRoKCdkcnlydW4nKToKZGlmZiAtLWdpdCBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weSBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weQppbmRleCA1ZGY1YzJkOWQ2MjE5
YmY5NDY5NDk2ZjI1NzRlNjNjMTgxMTJhZGU0Li42ZTE5ZWFiYzU2Yjg3NzYwMDRmZWNmZDI0Nzhm
ZGE1ZjM3NzcxNjY0IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L3Rlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC90ZXN0LnB5CkBAIC0zMyw2ICszMyw3IEBAIGZyb20gX19mdXR1cmVfXyBpbXBvcnQg
d2l0aF9zdGF0ZW1lbnQKIGltcG9ydCB0aW1lCiAKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3Rl
bSBpbXBvcnQgZmlsZXN5c3RlbV9tb2NrCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1w
b3J0IHVzZXJfbW9jawogCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2Fn
ZSBpbXBvcnQgdGVzdF9vdXRwdXQKIApAQCAtMjEwLDcgKzIxMSwxMiBAQCBjbGFzcyBUZXN0UG9y
dChiYXNlLlBvcnQpOgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5fdGVzdHMgPSB1
bml0X3Rlc3RfbGlzdCgpCiAKLSAgICAgICAga3dhcmdzLnNldGRlZmF1bHQoJ3BvcnRfbmFtZScs
ICd0ZXN0JykKKyAgICAgICAgaWYgJ3VzZXInIG5vdCBpbiBrd2FyZ3Mgb3Iga3dhcmdzWyd1c2Vy
J10gaXMgTm9uZToKKyAgICAgICAgICAgIGt3YXJnc1sndXNlciddID0gdXNlcl9tb2NrLk1vY2tV
c2VyKCkKKworICAgICAgICBzZWxmLl9leHBlY3RhdGlvbnNfcGF0aCA9IExBWU9VVF9URVNUX0RJ
UiArICcvcGxhdGZvcm0vdGVzdC90ZXN0X2V4cGVjdGF0aW9ucy50eHQnCisgICAgICAgIGlmICdw
b3J0X25hbWUnIG5vdCBpbiBrd2FyZ3Mgb3Iga3dhcmdzWydwb3J0X25hbWUnXSA9PSAndGVzdCcg
b3Iga3dhcmdzWydwb3J0X25hbWUnXSA9PSBOb25lOgorICAgICAgICAgICAga3dhcmdzWydwb3J0
X25hbWUnXSA9ICd0ZXN0LW1hYycKICAgICAgICAgYmFzZS5Qb3J0Ll9faW5pdF9fKHNlbGYsICoq
a3dhcmdzKQogCiAgICAgZGVmIGJhc2VsaW5lX3BhdGgoc2VsZik6CkBAIC0yNjQsMTcgKzI3MCwy
MyBAQCBjbGFzcyBUZXN0UG9ydChiYXNlLlBvcnQpOgogICAgIGRlZiB0ZXN0X2Jhc2VfcGxhdGZv
cm1fbmFtZXMoc2VsZik6CiAgICAgICAgIHJldHVybiAoJ21hYycsICd3aW4nKQogCi0gICAgZGVm
IHRlc3RfZXhwZWN0YXRpb25zKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fZmlsZXN5c3Rl
bS5yZWFkX3RleHRfZmlsZShMQVlPVVRfVEVTVF9ESVIgKyAnL3BsYXRmb3JtL3Rlc3QvdGVzdF9l
eHBlY3RhdGlvbnMudHh0JykKKyAgICBkZWYgcGF0aF90b190ZXN0X2V4cGVjdGF0aW9uc19maWxl
KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZXhwZWN0YXRpb25zX3BhdGgKIAogICAgIGRl
ZiB0ZXN0X3BsYXRmb3JtX25hbWUoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX25hbWUgPT0gJ3Rl
c3Qtd2luJzoKKyAgICAgICAgICAgIHJldHVybiAnd2luJwogICAgICAgICByZXR1cm4gJ21hYycK
IAogICAgIGRlZiB0ZXN0X3BsYXRmb3JtX25hbWVzKHNlbGYpOgogICAgICAgICByZXR1cm4gc2Vs
Zi50ZXN0X2Jhc2VfcGxhdGZvcm1fbmFtZXMoKQogCiAgICAgZGVmIHRlc3RfcGxhdGZvcm1fbmFt
ZV90b19uYW1lKHNlbGYsIHRlc3RfcGxhdGZvcm1fbmFtZSk6Ci0gICAgICAgIHJldHVybiB0ZXN0
X3BsYXRmb3JtX25hbWUKKyAgICAgICAgbmFtZV9tYXAgPSB7CisgICAgICAgICAgICAnbWFjJzog
J3Rlc3QtbWFjJywKKyAgICAgICAgICAgICd3aW4nOiAndGVzdC13aW4nLAorICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBuYW1lX21hcFt0ZXN0X3BsYXRmb3JtX25hbWVdCiAKICAgICBkZWYgdmVy
c2lvbihzZWxmKToKICAgICAgICAgcmV0dXJuICcnCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9yZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0c191
bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3JlYmFzZWxp
bmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5CmluZGV4IDUwYzAyMDQzYjg0NDk4
NDlhNzAyYzg3NDVlZjAwMmFlN2NkN2FkN2QuLmRhZDU3ZDFhNmQzMjE4YzkzYTYzOWQxN2M4YWFj
N2Y1M2RmZmNjZWEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3JlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5CisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3JlYmFzZWxpbmVfY2hyb21pdW1fd2Vi
a2l0X3Rlc3RzX3VuaXR0ZXN0LnB5CkBAIC05Miw3ICs5Miw3IEBAIGNsYXNzIFRlc3RSZWJhc2Vs
aW5lcih1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIGhvc3RfcG9ydF9vYmogPSBwb3J0Lmdl
dCgndGVzdCcsIG9wdGlvbnMsIGZpbGVzeXN0ZW09ZmlsZXN5c3RlbSkKICAgICAgICAgdGFyZ2V0
X29wdGlvbnMgPSBvcHRpb25zCiAgICAgICAgIHRhcmdldF9wb3J0X29iaiA9IHBvcnQuZ2V0KCd0
ZXN0JywgdGFyZ2V0X29wdGlvbnMsIGZpbGVzeXN0ZW09ZmlsZXN5c3RlbSkKLSAgICAgICAgcGxh
dGZvcm0gPSAndGVzdCcKKyAgICAgICAgcGxhdGZvcm0gPSB0YXJnZXRfcG9ydF9vYmoudGVzdF9w
bGF0Zm9ybV9uYW1lKCkKICAgICAgICAgcmV0dXJuIHJlYmFzZWxpbmVfY2hyb21pdW1fd2Via2l0
X3Rlc3RzLlJlYmFzZWxpbmVyKAogICAgICAgICAgICAgaG9zdF9wb3J0X29iaiwgdGFyZ2V0X3Bv
cnRfb2JqLCBwbGF0Zm9ybSwgb3B0aW9ucykKIApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weSBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3Qu
cHkKaW5kZXggNjc3YmVjZDI1OTQzZmM0M2U2ZDNlMTEyODQ0MGNhM2E2YzY4NTk3NC4uMDczNTMy
MDk4ODM1YjUxOWUxYzQyYWE4ZWQwMjQ2Zjc2OGE3YjAzMCAxMDA2NDQKLS0tIGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weQor
KysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3Rz
X3VuaXR0ZXN0LnB5CkBAIC00NSw3ICs0NSw3IEBAIGltcG9ydCB1bml0dGVzdAogZnJvbSB3ZWJr
aXRweS5jb21tb24gaW1wb3J0IGFycmF5X3N0cmVhbQogZnJvbSB3ZWJraXRweS5jb21tb24uc3lz
dGVtIGltcG9ydCBvdXRwdXRjYXB0dXJlCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1w
b3J0IGZpbGVzeXN0ZW1fbW9jawotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCB1
c2VyCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IHVzZXJfbW9jawogZnJvbSB3
ZWJraXRweS5sYXlvdXRfdGVzdHMgaW1wb3J0IHBvcnQKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rl
c3RzIGltcG9ydCBydW5fd2Via2l0X3Rlc3RzCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5s
YXlvdXRfcGFja2FnZSBpbXBvcnQgZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQKQEAgLTU2LDE0ICs1
Niw2IEBAIGZyb20gd2Via2l0cHkudGVzdC5za2lwIGltcG9ydCBza2lwX2lmCiBmcm9tIHdlYmtp
dHB5LnRoaXJkcGFydHkubW9jayBpbXBvcnQgTW9jawogCiAKLWNsYXNzIE1vY2tVc2VyKCk6Ci0g
ICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBzZWxmLnVybCA9IE5vbmUKLQotICAgIGRl
ZiBvcGVuX3VybChzZWxmLCB1cmwpOgotICAgICAgICBzZWxmLnVybCA9IHVybAotCi0KIGRlZiBw
YXJzZV9hcmdzKGV4dHJhX2FyZ3M9Tm9uZSwgcmVjb3JkX3Jlc3VsdHM9RmFsc2UsIHRlc3RzX2lu
Y2x1ZGVkPUZhbHNlLAogICAgICAgICAgICAgICAgcHJpbnRfbm90aGluZz1UcnVlKToKICAgICBl
eHRyYV9hcmdzID0gZXh0cmFfYXJncyBvciBbXQpAQCAtOTMsNyArODUsNyBAQCBkZWYgcGFzc2lu
Z19ydW4oZXh0cmFfYXJncz1Ob25lLCBwb3J0X29iaj1Ob25lLCByZWNvcmRfcmVzdWx0cz1GYWxz
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHNfaW5jbHVkZWQp
CiAgICAgaWYgbm90IHBvcnRfb2JqOgogICAgICAgICBwb3J0X29iaiA9IHBvcnQuZ2V0KHBvcnRf
bmFtZT1vcHRpb25zLnBsYXRmb3JtLCBvcHRpb25zPW9wdGlvbnMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdXNlcj1Nb2NrVXNlcigpLCBmaWxlc3lzdGVtPWZpbGVzeXN0ZW0pCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdXNlcj11c2VyX21vY2suTW9ja1VzZXIoKSwgZmlsZXN5
c3RlbT1maWxlc3lzdGVtKQogICAgIHJlcyA9IHJ1bl93ZWJraXRfdGVzdHMucnVuKHBvcnRfb2Jq
LCBvcHRpb25zLCBwYXJzZWRfYXJncykKICAgICByZXR1cm4gcmVzID09IDAKIApAQCAtMTAzLDcg
Kzk1LDcgQEAgZGVmIGxvZ2dpbmdfcnVuKGV4dHJhX2FyZ3M9Tm9uZSwgcG9ydF9vYmo9Tm9uZSwg
cmVjb3JkX3Jlc3VsdHM9RmFsc2UsIHRlc3RzX2luY2wKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVjb3JkX3Jlc3VsdHM9cmVjb3JkX3Jlc3VsdHMsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RzX2luY2x1ZGVkPXRlc3RzX2luY2x1ZGVk
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludF9ub3RoaW5nPUZh
bHNlKQotICAgIHVzZXIgPSBNb2NrVXNlcigpCisgICAgdXNlciA9IHVzZXJfbW9jay5Nb2NrVXNl
cigpCiAgICAgaWYgbm90IHBvcnRfb2JqOgogICAgICAgICBwb3J0X29iaiA9IHBvcnQuZ2V0KHBv
cnRfbmFtZT1vcHRpb25zLnBsYXRmb3JtLCBvcHRpb25zPW9wdGlvbnMsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdXNlcj11c2VyLCBmaWxlc3lzdGVtPWZpbGVzeXN0ZW0pCkBAIC0xMzUs
NyArMTI3LDcgQEAgZGVmIGdldF90ZXN0c19ydW4oZXh0cmFfYXJncz1Ob25lLCB0ZXN0c19pbmNs
dWRlZD1GYWxzZSwgZmxhdHRlbl9iYXRjaGVzPUZhbHNlLAogICAgICAgICBleHRyYV9hcmdzID0g
WydwYXNzZXMnLCAnZmFpbHVyZXMnXSArIGV4dHJhX2FyZ3MKICAgICBvcHRpb25zLCBwYXJzZWRf
YXJncyA9IHBhcnNlX2FyZ3MoZXh0cmFfYXJncywgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSkKIAotICAg
IHVzZXIgPSBNb2NrVXNlcigpCisgICAgdXNlciA9IHVzZXJfbW9jay5Nb2NrVXNlcigpCiAKICAg
ICB0ZXN0X2JhdGNoZXMgPSBbXQogCkBAIC0yNTYsNyArMjQ4LDcgQEAgY2xhc3MgTWFpblRlc3Qo
dW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfbGludF90ZXN0X2ZpbGVzX19lcnJv
cnMoc2VsZik6CiAgICAgICAgIG9wdGlvbnMsIHBhcnNlZF9hcmdzID0gcGFyc2VfYXJncyhbJy0t
bGludC10ZXN0LWZpbGVzJ10pCi0gICAgICAgIHVzZXIgPSBNb2NrVXNlcigpCisgICAgICAgIHVz
ZXIgPSB1c2VyX21vY2suTW9ja1VzZXIoKQogICAgICAgICBwb3J0X29iaiA9IHBvcnQuZ2V0KG9w
dGlvbnMucGxhdGZvcm0sIG9wdGlvbnM9b3B0aW9ucywgdXNlcj11c2VyKQogICAgICAgICBwb3J0
X29iai50ZXN0X2V4cGVjdGF0aW9ucyA9IGxhbWJkYTogIiMgc3ludGF4IGVycm9yIgogICAgICAg
ICByZXMsIG91dCwgZXJyID0gcnVuX2FuZF9jYXB0dXJlKHBvcnRfb2JqLCBvcHRpb25zLCBwYXJz
ZWRfYXJncykKQEAgLTM1Miw3ICszNDQsNyBAQCBjbGFzcyBNYWluVGVzdCh1bml0dGVzdC5UZXN0
Q2FzZSk6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCAzKQogICAgICAgICBzZWxmLmFz
c2VydEZhbHNlKG91dC5lbXB0eSgpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVyci5lbXB0
eSgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVzZXIudXJsLCAnL3RtcC9sYXlvdXQtdGVz
dC1yZXN1bHRzL3Jlc3VsdHMuaHRtbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXNlci5v
cGVuZWRfdXJscywgWycvdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvcmVzdWx0cy5odG1sJ10pCiAK
ICAgICBkZWYgdGVzdF9leGl0X2FmdGVyX25fZmFpbHVyZXMoc2VsZik6CiAgICAgICAgICMgVW5l
eHBlY3RlZCBmYWlsdXJlcyBzaG91bGQgcmVzdWx0IGluIHRlc3RzIHN0b3BwaW5nLgpAQCAtNDE0
LDcgKzQwNiw3IEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAg
d2l0aCBmcy5ta2R0ZW1wKCkgYXMgdG1wZGlyOgogICAgICAgICAgICAgcmVzLCBvdXQsIGVyciwg
dXNlciA9IGxvZ2dpbmdfcnVuKFsnLS1yZXN1bHRzLWRpcmVjdG9yeT0nICsgc3RyKHRtcGRpcild
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RzX2lu
Y2x1ZGVkPVRydWUsIGZpbGVzeXN0ZW09ZnMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHVzZXIudXJsLCBmcy5qb2luKHRtcGRpciwgJ3Jlc3VsdHMuaHRtbCcpKQorICAgICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCh1c2VyLm9wZW5lZF91cmxzLCBbZnMuam9pbih0bXBkaXIsICdyZXN1
bHRzLmh0bWwnKV0pCiAKICAgICBkZWYgdGVzdF9yZXN1bHRzX2RpcmVjdG9yeV9kZWZhdWx0KHNl
bGYpOgogICAgICAgICAjIFdlIHJ1biBhIGNvbmZpZ3VyYXRpb24gdGhhdCBzaG91bGQgZmFpbCwg
dG8gZ2VuZXJhdGUgb3V0cHV0LCB0aGVuCkBAIC00MjIsNyArNDE0LDcgQEAgY2xhc3MgTWFpblRl
c3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgICAgICMgVGhpcyBpcyB0aGUgZGVmYXVsdCBs
b2NhdGlvbi4KICAgICAgICAgcmVzLCBvdXQsIGVyciwgdXNlciA9IGxvZ2dpbmdfcnVuKHRlc3Rz
X2luY2x1ZGVkPVRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXNlci51cmwsICcvdG1w
L2xheW91dC10ZXN0LXJlc3VsdHMvcmVzdWx0cy5odG1sJykKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCh1c2VyLm9wZW5lZF91cmxzLCBbJy90bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9yZXN1bHRz
Lmh0bWwnXSkKIAogICAgIGRlZiB0ZXN0X3Jlc3VsdHNfZGlyZWN0b3J5X3JlbGF0aXZlKHNlbGYp
OgogICAgICAgICAjIFdlIHJ1biBhIGNvbmZpZ3VyYXRpb24gdGhhdCBzaG91bGQgZmFpbCwgdG8g
Z2VuZXJhdGUgb3V0cHV0LCB0aGVuCkBAIC00MzAsNyArNDIyLDcgQEAgY2xhc3MgTWFpblRlc3Qo
dW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgICAgIHJlcywgb3V0LCBlcnIsIHVzZXIgPSBsb2dn
aW5nX3J1bihbJy0tcmVzdWx0cy1kaXJlY3Rvcnk9Zm9vJ10sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0ZXN0c19pbmNsdWRlZD1UcnVlKQotICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKHVzZXIudXJsLCAnL3RtcC9mb28vcmVzdWx0cy5odG1sJykKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCh1c2VyLm9wZW5lZF91cmxzLCBbJy90bXAvZm9vL3Jlc3VsdHMuaHRt
bCddKQogCiAgICAgZGVmIHRlc3RfdG9sZXJhbmNlKHNlbGYpOgogICAgICAgICBjbGFzcyBJbWFn
ZURpZmZUZXN0UG9ydChUZXN0UG9ydCk6CkBAIC00NDEsNyArNDMzLDcgQEAgY2xhc3MgTWFpblRl
c3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgICAgIGRlZiBnZXRfcG9ydF9mb3JfcnVuKGFy
Z3MpOgogICAgICAgICAgICAgb3B0aW9ucywgcGFyc2VkX2FyZ3MgPSBydW5fd2Via2l0X3Rlc3Rz
LnBhcnNlX2FyZ3MoYXJncykKLSAgICAgICAgICAgIHRlc3RfcG9ydCA9IEltYWdlRGlmZlRlc3RQ
b3J0KG9wdGlvbnM9b3B0aW9ucywgdXNlcj1Nb2NrVXNlcigpKQorICAgICAgICAgICAgdGVzdF9w
b3J0ID0gSW1hZ2VEaWZmVGVzdFBvcnQob3B0aW9ucz1vcHRpb25zLCB1c2VyPXVzZXJfbW9jay5N
b2NrVXNlcigpKQogICAgICAgICAgICAgcGFzc2luZ19ydW4oYXJncywgcG9ydF9vYmo9dGVzdF9w
b3J0LCB0ZXN0c19pbmNsdWRlZD1UcnVlKQogICAgICAgICAgICAgcmV0dXJuIHRlc3RfcG9ydAog
CkBAIC01MTEsOSArNTAzLDkgQEAgY2xhc3MgUmViYXNlbGluZVRlc3QodW5pdHRlc3QuVGVzdENh
c2UpOgogICAgICAgICBmaWxlX2xpc3QucmVtb3ZlKCcvdG1wL2xheW91dC10ZXN0LXJlc3VsdHMv
dGVzdHNfcnVuLnR4dCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGZpbGVfbGlzdCks
IDYpCiAgICAgICAgIHNlbGYuYXNzZXJ0QmFzZWxpbmVzKGZpbGVfbGlzdCwKLSAgICAgICAgICAg
ICIvcGxhdGZvcm0vdGVzdC9wYXNzZXMvaW1hZ2UiKQorICAgICAgICAgICAgIi9wbGF0Zm9ybS90
ZXN0LW1hYy9wYXNzZXMvaW1hZ2UiKQogICAgICAgICBzZWxmLmFzc2VydEJhc2VsaW5lcyhmaWxl
X2xpc3QsCi0gICAgICAgICAgICAiL3BsYXRmb3JtL3Rlc3QvZmFpbHVyZXMvZXhwZWN0ZWQvbWlz
c2luZ19pbWFnZSIpCisgICAgICAgICAgICAiL3BsYXRmb3JtL3Rlc3QtbWFjL2ZhaWx1cmVzL2V4
cGVjdGVkL21pc3NpbmdfaW1hZ2UiKQogCiAKIGNsYXNzIERyeXJ1blRlc3QodW5pdHRlc3QuVGVz
dENhc2UpOgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79972</attachid>
            <date>2011-01-24 13:46:04 -0800</date>
            <delta_ts>2011-01-25 12:57:35 -0800</delta_ts>
            <desc>update w/ review feedback from eric</desc>
            <filename>bug-53036-20110124134603.patch</filename>
            <type>text/plain</type>
            <size>17318</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAyMGIw
NTM5YzFlYWRiMTViMmMyMzY4NTY3MzAyY2RmNmU5YTMzMTkyLi45ODAyYzZiOTM1YWUyMTY1MDVi
ZTk2Njg4MmNjYTVhZDIwZTliNjNhIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTEtMDEtMjQgIERpcmsgUHJhbmtl
ICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTWlub3IgYnVnIGZpeGVzIGFuZCBjbGVhbnVwIGZvciBmaWxlc3lz
dGVtIHdyYXBwZXJzLCBwb3J0LyogdGVzdAorICAgICAgICBjbGFzc2VzLCB0ZXN0X2V4cGVjdGF0
aW9ucy5weS4gVGhpcyBjaGFuZ2UgYWRkcyAidGVzdC13aW4iIGFuZAorICAgICAgICAidGVzdC1t
YWMiIHZhcmlhbnRzIHRvIHRoZSB0ZXN0IHBvcnQgc28gdGhhdCB3ZSBjYW4gYmV0dGVyIHRlc3QK
KyAgICAgICAgcmViYXNlbGluaW5nLCBhbmQgYWRkcyBhIE1vY2tVc2VyKCkgb2JqZWN0IGZvciBy
ZXVzZSBpbiB0ZXN0aW5nLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01MzAzNgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lz
dGVtL2ZpbGVzeXN0ZW0ucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lz
dGVtL2ZpbGVzeXN0ZW1fbW9jay5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2V4cGVjdGF0aW9ucy5weToKKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2ZhY3RvcnkucHk6CisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5OgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weToKKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5Ogor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3JlYmFzZWxpbmVfY2hyb21p
dW1fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
dG9vbC9tb2NrdG9vbC5weToKKwogMjAxMS0wMS0yNCAgQW5kcmVhcyBLbGluZyAgPGtsaW5nQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQg
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV9tb2NrLnB5
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW1fbW9jay5w
eQppbmRleCAwMDA0OTQ0OTk0ZjRiNzM1NDc3NDNlMGFkMTc4MDc1YWI5YzJlZDYwLi44OGVlOWFi
Yzc0ZTZmZDU3MDM2NmFkMzQ3M2RhZTIzYzgzNTRjOWY1IDEwMDY0NAotLS0gYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbV9tb2NrLnB5CisrKyBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtX21vY2sucHkKQEAgLTY5
LDYgKzY5LDcgQEAgY2xhc3MgTW9ja0ZpbGVTeXN0ZW0ob2JqZWN0KToKICAgICAgICAgICAgIHJh
aXNlIElPRXJyb3IoZXJybm8uRUlTRElSLCBkZXN0aW5hdGlvbiwgb3Muc3RyZXJyb3IoZXJybm8u
SVNESVIpKQogCiAgICAgICAgIHNlbGYuZmlsZXNbZGVzdGluYXRpb25dID0gc2VsZi5maWxlc1tz
b3VyY2VdCisgICAgICAgIHNlbGYud3JpdHRlbl9maWxlc1tkZXN0aW5hdGlvbl0gPSBzZWxmLmZp
bGVzW3NvdXJjZV0KIAogICAgIGRlZiBkaXJuYW1lKHNlbGYsIHBhdGgpOgogICAgICAgICByZXR1
cm4gc2VsZi5fc3BsaXQocGF0aClbMF0KQEAgLTIwMCwxNCArMjAxLDE2IEBAIGNsYXNzIE1vY2tG
aWxlU3lzdGVtKG9iamVjdCk6CiAgICAgICAgIGlmIHNlbGYuZmlsZXNbc3JjXSBpcyBOb25lOgog
ICAgICAgICAgICAgc2VsZi5fcmFpc2Vfbm90X2ZvdW5kKHNyYykKICAgICAgICAgc2VsZi5maWxl
c1tkc3RdID0gc2VsZi5maWxlc1tzcmNdCisgICAgICAgIHNlbGYud3JpdHRlbl9maWxlc1tkc3Rd
ID0gc2VsZi5maWxlc1tkc3RdCiAgICAgICAgIHNlbGYuZmlsZXNbc3JjXSA9IE5vbmUKKyAgICAg
ICAgc2VsZi53cml0dGVuX2ZpbGVzW3NyY10gPSBOb25lCiAKICAgICBkZWYgbm9ybXBhdGgoc2Vs
ZiwgcGF0aCk6CiAgICAgICAgIHJldHVybiBwYXRoCiAKLSAgICBkZWYgb3Blbl9iaW5hcnlfdGVt
cGZpbGUoc2VsZiwgc3VmZml4KToKKyAgICBkZWYgb3Blbl9iaW5hcnlfdGVtcGZpbGUoc2VsZiwg
c3VmZml4PScnKToKICAgICAgICAgcGF0aCA9IHNlbGYuX21rdGVtcChzdWZmaXgpCi0gICAgICAg
IHJldHVybiBXcml0YWJsZUZpbGVPYmplY3Qoc2VsZiwgcGF0aCksIHBhdGgKKyAgICAgICAgcmV0
dXJuIChXcml0YWJsZUZpbGVPYmplY3Qoc2VsZiwgcGF0aCksIHBhdGgpCiAKICAgICBkZWYgb3Bl
bl90ZXh0X2ZpbGVfZm9yX3dyaXRpbmcoc2VsZiwgcGF0aCwgYXBwZW5kPUZhbHNlKToKICAgICAg
ICAgcmV0dXJuIFdyaXRhYmxlRmlsZU9iamVjdChzZWxmLCBwYXRoLCBhcHBlbmQpCkBAIC0yMjUs
NiArMjI4LDcgQEAgY2xhc3MgTW9ja0ZpbGVTeXN0ZW0ob2JqZWN0KToKICAgICAgICAgaWYgc2Vs
Zi5maWxlc1twYXRoXSBpcyBOb25lOgogICAgICAgICAgICAgc2VsZi5fcmFpc2Vfbm90X2ZvdW5k
KHBhdGgpCiAgICAgICAgIHNlbGYuZmlsZXNbcGF0aF0gPSBOb25lCisgICAgICAgIHNlbGYud3Jp
dHRlbl9maWxlc1twYXRoXSA9IE5vbmUKIAogICAgIGRlZiBybXRyZWUoc2VsZiwgcGF0aCk6CiAg
ICAgICAgIGlmIG5vdCBwYXRoLmVuZHN3aXRoKCcvJyk6CmRpZmYgLS1naXQgYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS90ZXN0X2V4cGVjdGF0aW9u
cy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L3Rlc3RfZXhwZWN0YXRpb25zLnB5CmluZGV4IDgwNmI2NjM0NzE4MGE4YzAxYzA4ZmVlZGM4MGIz
ZmYwMjU1NTI0NjguLmFjYWRjYjNmYWUxZDVjY2YwNTI5MGNiYWM5Y2Q2ZTQyZjk3NTM2NzQgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNr
YWdlL3Rlc3RfZXhwZWN0YXRpb25zLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Rlc3RfZXhwZWN0YXRpb25zLnB5CkBAIC04OSw3ICs4
OSw3IEBAIGNsYXNzIFRlc3RFeHBlY3RhdGlvbnM6CiAgICAgICAgICIiIkxvYWRzIGFuZCBwYXJz
ZXMgdGhlIHRlc3QgZXhwZWN0YXRpb25zIGdpdmVuIGluIHRoZSBzdHJpbmcuCiAgICAgICAgIEFy
Z3M6CiAgICAgICAgICAgICBwb3J0OiBoYW5kbGUgdG8gb2JqZWN0IGNvbnRhaW5pbmcgcGxhdGZv
cm0tc3BlY2lmaWMgZnVuY3Rpb25hbGl0eQotICAgICAgICAgICAgdGVzdDogbGlzdCBvZiBhbGwg
b2YgdGhlIHRlc3QgZmlsZXMKKyAgICAgICAgICAgIHRlc3RzOiBsaXN0IG9mIGFsbCBvZiB0aGUg
dGVzdCBmaWxlcwogICAgICAgICAgICAgZXhwZWN0YXRpb25zOiB0ZXN0IGV4cGVjdGF0aW9ucyBh
cyBhIHN0cmluZwogICAgICAgICAgICAgdGVzdF9wbGF0Zm9ybV9uYW1lOiBuYW1lIG9mIHRoZSBw
bGF0Zm9ybSB0byBtYXRjaCBleHBlY3RhdGlvbnMKICAgICAgICAgICAgICAgICBhZ2FpbnN0LiBO
b3RlIHRoYXQgdGhpcyBtYXkgYmUgZGlmZmVyZW50IHRoYW4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weSBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQppbmRleCA2ZTVmYWJjMGQ0ZjM2NGEz
ZDVhMzdiMmZjOGUxZWVhMDFiYzQ3MmVmLi5hZWViYzY2ODY4ODIxMGM4ZTAzYTFjNjAyODhkODli
YjVhMDJiZGU3IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L2Jhc2UucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9iYXNlLnB5CkBAIC01ODIsNyArNTgyLDcgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogCiAg
ICAgICAgIEJhc2ljYWxseSB0aGlzIHN0cmluZyBzaG91bGQgY29udGFpbiB0aGUgZXF1aXZhbGVu
dCBvZiBhCiAgICAgICAgIHRlc3RfZXhwZWN0YXRpb25zIGZpbGUuIFNlZSB0ZXN0X2V4cGVjdGF0
aW9ucy5weSBmb3IgbW9yZSBkZXRhaWxzLiIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRl
ZEVycm9yKCdQb3J0LnRlc3RfZXhwZWN0YXRpb25zJykKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Zp
bGVzeXN0ZW0ucmVhZF90ZXh0X2ZpbGUoc2VsZi5wYXRoX3RvX3Rlc3RfZXhwZWN0YXRpb25zX2Zp
bGUoKSkKIAogICAgIGRlZiB0ZXN0X2V4cGVjdGF0aW9uc19vdmVycmlkZXMoc2VsZik6CiAgICAg
ICAgICIiIlJldHVybnMgYW4gb3B0aW9uYWwgc2V0IG9mIG92ZXJyaWRlcyBmb3IgdGhlIHRlc3Rf
ZXhwZWN0YXRpb25zLgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC9mYWN0b3J5LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9mYWN0b3J5LnB5CmluZGV4IDY5MzU3NDQyYWViZTMxZTBhMTQ1ZDNjOWEzZTE1OTA3
N2IxMDQ1NjAuLjY3NWUwYzA5Njg4OTgwOGNiODUwYzYwZWQxMTE2YTkxNmNkODNiNjYgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZmFjdG9yeS5w
eQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2ZhY3Rvcnku
cHkKQEAgLTcwLDcgKzcwLDcgQEAgZGVmIF9nZXRfa3dhcmdzKCoqa3dhcmdzKToKICAgICAgICAg
cmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigndW5rbm93biBwb3J0OyBzeXMucGxhdGZvcm0gPSAi
JXMiJyAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnBsYXRmb3JtKQog
Ci0gICAgaWYgcG9ydF90b191c2UgPT0gJ3Rlc3QnOgorICAgIGlmIHBvcnRfdG9fdXNlLnN0YXJ0
c3dpdGgoJ3Rlc3QnKToKICAgICAgICAgaW1wb3J0IHRlc3QKICAgICAgICAgbWFrZXIgPSB0ZXN0
LlRlc3RQb3J0CiAgICAgZWxpZiBwb3J0X3RvX3VzZS5zdGFydHN3aXRoKCdkcnlydW4nKToKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5w
eSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weQppbmRl
eCA1ZGY1YzJkOWQ2MjE5YmY5NDY5NDk2ZjI1NzRlNjNjMTgxMTJhZGU0Li5hOWQ1ODg0MDg1MWIx
NmJiNjA3YTg1ZjdlNTUxZTZiZTBlMzBmMjVkIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5CkBAIC0zMyw2ICszMyw3IEBAIGZyb20gX19m
dXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQKIGltcG9ydCB0aW1lCiAKIGZyb20gd2Via2l0
cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgZmlsZXN5c3RlbV9tb2NrCitmcm9tIHdlYmtpdHB5LnRv
b2wgaW1wb3J0IG1vY2t0b29sCiAKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9w
YWNrYWdlIGltcG9ydCB0ZXN0X291dHB1dAogCkBAIC0xOTIsMjYgKzE5MywyMiBAQCBXT05URklY
IFNLSVAgOiBmYWlsdXJlcy9leHBlY3RlZC9leGNlcHRpb24uaHRtbCA9IENSQVNICiBjbGFzcyBU
ZXN0UG9ydChiYXNlLlBvcnQpOgogICAgICIiIlRlc3QgaW1wbGVtZW50YXRpb24gb2YgdGhlIFBv
cnQgaW50ZXJmYWNlLiIiIgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsICoqa3dhcmdzKToKLSAg
ICAgICAgIyBGSVhNRTogd2hhdCBoYXBwZW5zIGlmIHdlJ3JlIG5vdCBwYXNzZWQgaW4gdGhlIHRl
c3QgZmlsZXN5c3RlbQotICAgICAgICAjIGFuZCB0aGUgdGVzdHMgZG9uJ3QgbWF0Y2ggd2hhdCdz
IGluIHRoZSBmaWxlc3lzdGVtPwotICAgICAgICAjCi0gICAgICAgICMgV2UnbGwgbGVhdmUgYXMg
aXMgZm9yIG5vdyB0byBhdm9pZCB1bm5lY2Vzc2FyeSBkZXBlbmRlbmNpZXMgd2hpbGUKLSAgICAg
ICAgIyBjb252ZXJ0aW5nIGFsbCBvZiB0aGUgdW5pdCB0ZXN0cyBvdmVyIHRvIHVzaW5nCi0gICAg
ICAgICMgdW5pdF90ZXN0X2ZpbGVzeXN0ZW0oKS4gSWYgdGhpbmdzIGdldCBvdXQgb2Ygc3luYyB0
aGUgdGVzdHMgc2hvdWxkCi0gICAgICAgICMgZmFpbCBpbiBmYWlybHkgb2J2aW91cyB3YXlzLiBF
dmVudHVhbGx5IHdlIHdhbnQgdG8ganVzdCBkbzoKLSAgICAgICAgIwotICAgICAgICAjIGFzc2Vy
dCBrd2FyZ3NbJ2ZpbGVzeXN0ZW0nXS5fdGVzdHMKLSAgICAgICAgIyBzZWxmLl90ZXN0cyA9IGt3
YXJnc1snZmlsZXN5c3RlbSddLl90ZXN0cwotCi0gICAgICAgIGlmICdmaWxlc3lzdGVtJyBub3Qg
aW4ga3dhcmdzIG9yIGt3YXJnc1snZmlsZXN5c3RlbSddIGlzIE5vbmU6Ci0gICAgICAgICAgICBr
d2FyZ3NbJ2ZpbGVzeXN0ZW0nXSA9IHVuaXRfdGVzdF9maWxlc3lzdGVtKCkKLSAgICAgICAgICAg
IHNlbGYuX3Rlc3RzID0ga3dhcmdzWydmaWxlc3lzdGVtJ10uX3Rlc3RzCi0gICAgICAgIGVsc2U6
Ci0gICAgICAgICAgICBzZWxmLl90ZXN0cyA9IHVuaXRfdGVzdF9saXN0KCkKLQotICAgICAgICBr
d2FyZ3Muc2V0ZGVmYXVsdCgncG9ydF9uYW1lJywgJ3Rlc3QnKQotICAgICAgICBiYXNlLlBvcnQu
X19pbml0X18oc2VsZiwgKiprd2FyZ3MpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfbmFt
ZT1Ob25lLCB1c2VyPU5vbmUsIGZpbGVzeXN0ZW09Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICBp
ZiBub3QgZmlsZXN5c3RlbToKKyAgICAgICAgICAgIGZpbGVzeXN0ZW0gPSB1bml0X3Rlc3RfZmls
ZXN5c3RlbSgpCisKKyAgICAgICAgYXNzZXJ0IGZpbGVzeXN0ZW0uX3Rlc3RzCisgICAgICAgIHNl
bGYuX3Rlc3RzID0gZmlsZXN5c3RlbS5fdGVzdHMKKworICAgICAgICBpZiBub3QgdXNlcjoKKyAg
ICAgICAgICAgIHVzZXIgPSBtb2NrdG9vbC5Nb2NrVXNlcigpCisKKyAgICAgICAgaWYgbm90IHBv
cnRfbmFtZSBvciBwb3J0X25hbWUgPT0gJ3Rlc3QnOgorICAgICAgICAgICAgcG9ydF9uYW1lID0g
J3Rlc3QtbWFjJworCisgICAgICAgIHNlbGYuX2V4cGVjdGF0aW9uc19wYXRoID0gTEFZT1VUX1RF
U1RfRElSICsgJy9wbGF0Zm9ybS90ZXN0L3Rlc3RfZXhwZWN0YXRpb25zLnR4dCcKKyAgICAgICAg
YmFzZS5Qb3J0Ll9faW5pdF9fKHNlbGYsIHBvcnRfbmFtZT1wb3J0X25hbWUsIGZpbGVzeXN0ZW09
ZmlsZXN5c3RlbSwgdXNlcj11c2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKiprd2Fy
Z3MpCiAKICAgICBkZWYgYmFzZWxpbmVfcGF0aChzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYu
X2ZpbGVzeXN0ZW0uam9pbihzZWxmLmxheW91dF90ZXN0c19kaXIoKSwgJ3BsYXRmb3JtJywKQEAg
LTI2NCwxNyArMjYxLDIzIEBAIGNsYXNzIFRlc3RQb3J0KGJhc2UuUG9ydCk6CiAgICAgZGVmIHRl
c3RfYmFzZV9wbGF0Zm9ybV9uYW1lcyhzZWxmKToKICAgICAgICAgcmV0dXJuICgnbWFjJywgJ3dp
bicpCiAKLSAgICBkZWYgdGVzdF9leHBlY3RhdGlvbnMoc2VsZik6Ci0gICAgICAgIHJldHVybiBz
ZWxmLl9maWxlc3lzdGVtLnJlYWRfdGV4dF9maWxlKExBWU9VVF9URVNUX0RJUiArICcvcGxhdGZv
cm0vdGVzdC90ZXN0X2V4cGVjdGF0aW9ucy50eHQnKQorICAgIGRlZiBwYXRoX3RvX3Rlc3RfZXhw
ZWN0YXRpb25zX2ZpbGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9leHBlY3RhdGlvbnNf
cGF0aAogCiAgICAgZGVmIHRlc3RfcGxhdGZvcm1fbmFtZShzZWxmKToKKyAgICAgICAgaWYgc2Vs
Zi5fbmFtZSA9PSAndGVzdC13aW4nOgorICAgICAgICAgICAgcmV0dXJuICd3aW4nCiAgICAgICAg
IHJldHVybiAnbWFjJwogCiAgICAgZGVmIHRlc3RfcGxhdGZvcm1fbmFtZXMoc2VsZik6CiAgICAg
ICAgIHJldHVybiBzZWxmLnRlc3RfYmFzZV9wbGF0Zm9ybV9uYW1lcygpCiAKICAgICBkZWYgdGVz
dF9wbGF0Zm9ybV9uYW1lX3RvX25hbWUoc2VsZiwgdGVzdF9wbGF0Zm9ybV9uYW1lKToKLSAgICAg
ICAgcmV0dXJuIHRlc3RfcGxhdGZvcm1fbmFtZQorICAgICAgICBuYW1lX21hcCA9IHsKKyAgICAg
ICAgICAgICdtYWMnOiAndGVzdC1tYWMnLAorICAgICAgICAgICAgJ3dpbic6ICd0ZXN0LXdpbics
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5hbWVfbWFwW3Rlc3RfcGxhdGZvcm1fbmFtZV0K
IAogICAgIGRlZiB2ZXJzaW9uKHNlbGYpOgogICAgICAgICByZXR1cm4gJycKZGlmZiAtLWdpdCBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3JlYmFzZWxpbmVfY2hyb21pdW1f
d2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKaW5kZXgg
NTBjMDIwNDNiODQ0OTg0OWE3MDJjODc0NWVmMDAyYWU3Y2Q3YWQ3ZC4uYTBmNWVlYjEzNmY0ZjI5
OWE0OTUxZWIwMzQ3YTZlYjQyMGQ4MDMzNyAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcmViYXNlbGluZV9jaHJvbWl1bV93ZWJraXRfdGVzdHNfdW5pdHRl
c3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcmViYXNlbGlu
ZV9jaHJvbWl1bV93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKQEAgLTMyLDcgKzMyLDYgQEAKIGlt
cG9ydCB1bml0dGVzdAogCiBmcm9tIHdlYmtpdHB5LnRvb2wgaW1wb3J0IG1vY2t0b29sCi1mcm9t
IHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IGZpbGVzeXN0ZW1fbW9jawogZnJvbSB3ZWJr
aXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQgRXhlY3V0aXZlLCBTY3JpcHRFcnJv
cgogCiBpbXBvcnQgcG9ydApAQCAtODgsMTEgKzg3LDExIEBAIGNsYXNzIFRlc3RSZWJhc2VsaW5l
cih1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIG1ha2VfcmViYXNlbGluZXIoc2VsZik6CiAg
ICAgICAgIG9wdGlvbnMgPSBtb2NrdG9vbC5Nb2NrT3B0aW9ucyhjb25maWd1cmF0aW9uPU5vbmUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sX2RpcmVjdG9yeT1O
b25lKQotICAgICAgICBmaWxlc3lzdGVtID0gZmlsZXN5c3RlbV9tb2NrLk1vY2tGaWxlU3lzdGVt
KCkKKyAgICAgICAgZmlsZXN5c3RlbSA9IHBvcnQudW5pdF90ZXN0X2ZpbGVzeXN0ZW0oKQogICAg
ICAgICBob3N0X3BvcnRfb2JqID0gcG9ydC5nZXQoJ3Rlc3QnLCBvcHRpb25zLCBmaWxlc3lzdGVt
PWZpbGVzeXN0ZW0pCiAgICAgICAgIHRhcmdldF9vcHRpb25zID0gb3B0aW9ucwogICAgICAgICB0
YXJnZXRfcG9ydF9vYmogPSBwb3J0LmdldCgndGVzdCcsIHRhcmdldF9vcHRpb25zLCBmaWxlc3lz
dGVtPWZpbGVzeXN0ZW0pCi0gICAgICAgIHBsYXRmb3JtID0gJ3Rlc3QnCisgICAgICAgIHBsYXRm
b3JtID0gdGFyZ2V0X3BvcnRfb2JqLnRlc3RfcGxhdGZvcm1fbmFtZSgpCiAgICAgICAgIHJldHVy
biByZWJhc2VsaW5lX2Nocm9taXVtX3dlYmtpdF90ZXN0cy5SZWJhc2VsaW5lcigKICAgICAgICAg
ICAgIGhvc3RfcG9ydF9vYmosIHRhcmdldF9wb3J0X29iaiwgcGxhdGZvcm0sIG9wdGlvbnMpCiAK
QEAgLTEzMSw3ICsxMzAsNyBAQCBjbGFzcyBUZXN0UmViYXNlbGluZXIodW5pdHRlc3QuVGVzdENh
c2UpOgogY2xhc3MgVGVzdEh0bWxHZW5lcmF0b3IodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRl
ZiBtYWtlX2dlbmVyYXRvcihzZWxmLCBmaWxlcywgdGVzdHMpOgogICAgICAgICBvcHRpb25zID0g
bW9ja3Rvb2wuTW9ja09wdGlvbnMoY29uZmlndXJhdGlvbj1Ob25lLCBodG1sX2RpcmVjdG9yeT0n
L3RtcCcpCi0gICAgICAgIGhvc3RfcG9ydCA9IHBvcnQuZ2V0KCd0ZXN0Jywgb3B0aW9ucywgZmls
ZXN5c3RlbT1maWxlc3lzdGVtX21vY2suTW9ja0ZpbGVTeXN0ZW0oZmlsZXMpKQorICAgICAgICBo
b3N0X3BvcnQgPSBwb3J0LmdldCgndGVzdCcsIG9wdGlvbnMsIGZpbGVzeXN0ZW09cG9ydC51bml0
X3Rlc3RfZmlsZXN5c3RlbShmaWxlcykpCiAgICAgICAgIGdlbmVyYXRvciA9IHJlYmFzZWxpbmVf
Y2hyb21pdW1fd2Via2l0X3Rlc3RzLkh0bWxHZW5lcmF0b3IoCiAgICAgICAgICAgICBob3N0X3Bv
cnQsCiAgICAgICAgICAgICB0YXJnZXRfcG9ydD1Ob25lLApkaWZmIC0tZ2l0IGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weSBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5p
dHRlc3QucHkKaW5kZXggNjc3YmVjZDI1OTQzZmM0M2U2ZDNlMTEyODQ0MGNhM2E2YzY4NTk3NC4u
MTEyZTQwMjc5NGM5ZWJjN2JkOTNiZjg2MDllYjNmZmUzNTY2MWEzMyAxMDA2NDQKLS0tIGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVz
dC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0
X3Rlc3RzX3VuaXR0ZXN0LnB5CkBAIC00NSw3ICs0NSw3IEBAIGltcG9ydCB1bml0dGVzdAogZnJv
bSB3ZWJraXRweS5jb21tb24gaW1wb3J0IGFycmF5X3N0cmVhbQogZnJvbSB3ZWJraXRweS5jb21t
b24uc3lzdGVtIGltcG9ydCBvdXRwdXRjYXB0dXJlCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0
ZW0gaW1wb3J0IGZpbGVzeXN0ZW1fbW9jawotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGlt
cG9ydCB1c2VyCitmcm9tIHdlYmtpdHB5LnRvb2wgaW1wb3J0IG1vY2t0b29sCiBmcm9tIHdlYmtp
dHB5LmxheW91dF90ZXN0cyBpbXBvcnQgcG9ydAogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMg
aW1wb3J0IHJ1bl93ZWJraXRfdGVzdHMKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91
dF9wYWNrYWdlIGltcG9ydCBkdW1wX3JlbmRlcl90cmVlX3RocmVhZApAQCAtNTYsMTQgKzU2LDYg
QEAgZnJvbSB3ZWJraXRweS50ZXN0LnNraXAgaW1wb3J0IHNraXBfaWYKIGZyb20gd2Via2l0cHku
dGhpcmRwYXJ0eS5tb2NrIGltcG9ydCBNb2NrCiAKIAotY2xhc3MgTW9ja1VzZXIoKToKLSAgICBk
ZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIHNlbGYudXJsID0gTm9uZQotCi0gICAgZGVmIG9w
ZW5fdXJsKHNlbGYsIHVybCk6Ci0gICAgICAgIHNlbGYudXJsID0gdXJsCi0KLQogZGVmIHBhcnNl
X2FyZ3MoZXh0cmFfYXJncz1Ob25lLCByZWNvcmRfcmVzdWx0cz1GYWxzZSwgdGVzdHNfaW5jbHVk
ZWQ9RmFsc2UsCiAgICAgICAgICAgICAgICBwcmludF9ub3RoaW5nPVRydWUpOgogICAgIGV4dHJh
X2FyZ3MgPSBleHRyYV9hcmdzIG9yIFtdCkBAIC05Myw3ICs4NSw3IEBAIGRlZiBwYXNzaW5nX3J1
bihleHRyYV9hcmdzPU5vbmUsIHBvcnRfb2JqPU5vbmUsIHJlY29yZF9yZXN1bHRzPUZhbHNlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0c19pbmNsdWRlZCkKICAg
ICBpZiBub3QgcG9ydF9vYmo6CiAgICAgICAgIHBvcnRfb2JqID0gcG9ydC5nZXQocG9ydF9uYW1l
PW9wdGlvbnMucGxhdGZvcm0sIG9wdGlvbnM9b3B0aW9ucywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1c2VyPU1vY2tVc2VyKCksIGZpbGVzeXN0ZW09ZmlsZXN5c3RlbSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1c2VyPW1vY2t0b29sLk1vY2tVc2VyKCksIGZpbGVzeXN0ZW09
ZmlsZXN5c3RlbSkKICAgICByZXMgPSBydW5fd2Via2l0X3Rlc3RzLnJ1bihwb3J0X29iaiwgb3B0
aW9ucywgcGFyc2VkX2FyZ3MpCiAgICAgcmV0dXJuIHJlcyA9PSAwCiAKQEAgLTEwMyw3ICs5NSw3
IEBAIGRlZiBsb2dnaW5nX3J1bihleHRyYV9hcmdzPU5vbmUsIHBvcnRfb2JqPU5vbmUsIHJlY29y
ZF9yZXN1bHRzPUZhbHNlLCB0ZXN0c19pbmNsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlY29yZF9yZXN1bHRzPXJlY29yZF9yZXN1bHRzLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0ZXN0c19pbmNsdWRlZD10ZXN0c19pbmNsdWRlZCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRfbm90aGluZz1GYWxzZSkK
LSAgICB1c2VyID0gTW9ja1VzZXIoKQorICAgIHVzZXIgPSBtb2NrdG9vbC5Nb2NrVXNlcigpCiAg
ICAgaWYgbm90IHBvcnRfb2JqOgogICAgICAgICBwb3J0X29iaiA9IHBvcnQuZ2V0KHBvcnRfbmFt
ZT1vcHRpb25zLnBsYXRmb3JtLCBvcHRpb25zPW9wdGlvbnMsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdXNlcj11c2VyLCBmaWxlc3lzdGVtPWZpbGVzeXN0ZW0pCkBAIC0xMzUsNyArMTI3
LDcgQEAgZGVmIGdldF90ZXN0c19ydW4oZXh0cmFfYXJncz1Ob25lLCB0ZXN0c19pbmNsdWRlZD1G
YWxzZSwgZmxhdHRlbl9iYXRjaGVzPUZhbHNlLAogICAgICAgICBleHRyYV9hcmdzID0gWydwYXNz
ZXMnLCAnZmFpbHVyZXMnXSArIGV4dHJhX2FyZ3MKICAgICBvcHRpb25zLCBwYXJzZWRfYXJncyA9
IHBhcnNlX2FyZ3MoZXh0cmFfYXJncywgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSkKIAotICAgIHVzZXIg
PSBNb2NrVXNlcigpCisgICAgdXNlciA9IG1vY2t0b29sLk1vY2tVc2VyKCkKIAogICAgIHRlc3Rf
YmF0Y2hlcyA9IFtdCiAKQEAgLTIxNiw3ICsyMDgsOCBAQCBjbGFzcyBNYWluVGVzdCh1bml0dGVz
dC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9mdWxsX3Jlc3VsdHNfaHRtbChzZWxmKToKICAg
ICAgICAgIyBGSVhNRTogdmVyaWZ5IGh0bWw/Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNz
aW5nX3J1bihbJy0tZnVsbC1yZXN1bHRzLWh0bWwnXSkpCisgICAgICAgIHJlcywgb3V0LCBlcnIs
IHVzZXIgPSBsb2dnaW5nX3J1bihbJy0tZnVsbC1yZXN1bHRzLWh0bWwnXSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChyZXMsIDApCiAKICAgICBkZWYgdGVzdF9oZWxwX3ByaW50aW5nKHNlbGYp
OgogICAgICAgICByZXMsIG91dCwgZXJyLCB1c2VyID0gbG9nZ2luZ19ydW4oWyctLWhlbHAtcHJp
bnRpbmcnXSkKQEAgLTI1Niw3ICsyNDksNyBAQCBjbGFzcyBNYWluVGVzdCh1bml0dGVzdC5UZXN0
Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9saW50X3Rlc3RfZmlsZXNfX2Vycm9ycyhzZWxmKToKICAg
ICAgICAgb3B0aW9ucywgcGFyc2VkX2FyZ3MgPSBwYXJzZV9hcmdzKFsnLS1saW50LXRlc3QtZmls
ZXMnXSkKLSAgICAgICAgdXNlciA9IE1vY2tVc2VyKCkKKyAgICAgICAgdXNlciA9IG1vY2t0b29s
Lk1vY2tVc2VyKCkKICAgICAgICAgcG9ydF9vYmogPSBwb3J0LmdldChvcHRpb25zLnBsYXRmb3Jt
LCBvcHRpb25zPW9wdGlvbnMsIHVzZXI9dXNlcikKICAgICAgICAgcG9ydF9vYmoudGVzdF9leHBl
Y3RhdGlvbnMgPSBsYW1iZGE6ICIjIHN5bnRheCBlcnJvciIKICAgICAgICAgcmVzLCBvdXQsIGVy
ciA9IHJ1bl9hbmRfY2FwdHVyZShwb3J0X29iaiwgb3B0aW9ucywgcGFyc2VkX2FyZ3MpCkBAIC0z
NTIsNyArMzQ1LDcgQEAgY2xhc3MgTWFpblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHJlcywgMykKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvdXQu
ZW1wdHkoKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuZW1wdHkoKSkKLSAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCh1c2VyLnVybCwgJy90bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9yZXN1
bHRzLmh0bWwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVzZXIub3BlbmVkX3VybHMsIFsn
L3RtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL3Jlc3VsdHMuaHRtbCddKQogCiAgICAgZGVmIHRlc3Rf
ZXhpdF9hZnRlcl9uX2ZhaWx1cmVzKHNlbGYpOgogICAgICAgICAjIFVuZXhwZWN0ZWQgZmFpbHVy
ZXMgc2hvdWxkIHJlc3VsdCBpbiB0ZXN0cyBzdG9wcGluZy4KQEAgLTQxNCw3ICs0MDcsNyBAQCBj
bGFzcyBNYWluVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHdpdGggZnMubWtkdGVt
cCgpIGFzIHRtcGRpcjoKICAgICAgICAgICAgIHJlcywgb3V0LCBlcnIsIHVzZXIgPSBsb2dnaW5n
X3J1bihbJy0tcmVzdWx0cy1kaXJlY3Rvcnk9JyArIHN0cih0bXBkaXIpXSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0c19pbmNsdWRlZD1UcnVlLCBm
aWxlc3lzdGVtPWZzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1c2VyLnVybCwgZnMu
am9pbih0bXBkaXIsICdyZXN1bHRzLmh0bWwnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwodXNlci5vcGVuZWRfdXJscywgW2ZzLmpvaW4odG1wZGlyLCAncmVzdWx0cy5odG1sJyldKQog
CiAgICAgZGVmIHRlc3RfcmVzdWx0c19kaXJlY3RvcnlfZGVmYXVsdChzZWxmKToKICAgICAgICAg
IyBXZSBydW4gYSBjb25maWd1cmF0aW9uIHRoYXQgc2hvdWxkIGZhaWwsIHRvIGdlbmVyYXRlIG91
dHB1dCwgdGhlbgpAQCAtNDIyLDcgKzQxNSw3IEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRl
c3RDYXNlKToKIAogICAgICAgICAjIFRoaXMgaXMgdGhlIGRlZmF1bHQgbG9jYXRpb24uCiAgICAg
ICAgIHJlcywgb3V0LCBlcnIsIHVzZXIgPSBsb2dnaW5nX3J1bih0ZXN0c19pbmNsdWRlZD1UcnVl
KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVzZXIudXJsLCAnL3RtcC9sYXlvdXQtdGVzdC1y
ZXN1bHRzL3Jlc3VsdHMuaHRtbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXNlci5vcGVu
ZWRfdXJscywgWycvdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvcmVzdWx0cy5odG1sJ10pCiAKICAg
ICBkZWYgdGVzdF9yZXN1bHRzX2RpcmVjdG9yeV9yZWxhdGl2ZShzZWxmKToKICAgICAgICAgIyBX
ZSBydW4gYSBjb25maWd1cmF0aW9uIHRoYXQgc2hvdWxkIGZhaWwsIHRvIGdlbmVyYXRlIG91dHB1
dCwgdGhlbgpAQCAtNDMwLDcgKzQyMyw3IEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RD
YXNlKToKIAogICAgICAgICByZXMsIG91dCwgZXJyLCB1c2VyID0gbG9nZ2luZ19ydW4oWyctLXJl
c3VsdHMtZGlyZWN0b3J5PWZvbyddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1
c2VyLnVybCwgJy90bXAvZm9vL3Jlc3VsdHMuaHRtbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwodXNlci5vcGVuZWRfdXJscywgWycvdG1wL2Zvby9yZXN1bHRzLmh0bWwnXSkKIAogICAgIGRl
ZiB0ZXN0X3RvbGVyYW5jZShzZWxmKToKICAgICAgICAgY2xhc3MgSW1hZ2VEaWZmVGVzdFBvcnQo
VGVzdFBvcnQpOgpAQCAtNDQxLDcgKzQzNCw3IEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRl
c3RDYXNlKToKIAogICAgICAgICBkZWYgZ2V0X3BvcnRfZm9yX3J1bihhcmdzKToKICAgICAgICAg
ICAgIG9wdGlvbnMsIHBhcnNlZF9hcmdzID0gcnVuX3dlYmtpdF90ZXN0cy5wYXJzZV9hcmdzKGFy
Z3MpCi0gICAgICAgICAgICB0ZXN0X3BvcnQgPSBJbWFnZURpZmZUZXN0UG9ydChvcHRpb25zPW9w
dGlvbnMsIHVzZXI9TW9ja1VzZXIoKSkKKyAgICAgICAgICAgIHRlc3RfcG9ydCA9IEltYWdlRGlm
ZlRlc3RQb3J0KG9wdGlvbnM9b3B0aW9ucywgdXNlcj1tb2NrdG9vbC5Nb2NrVXNlcigpKQogICAg
ICAgICAgICAgcGFzc2luZ19ydW4oYXJncywgcG9ydF9vYmo9dGVzdF9wb3J0LCB0ZXN0c19pbmNs
dWRlZD1UcnVlKQogICAgICAgICAgICAgcmV0dXJuIHRlc3RfcG9ydAogCkBAIC01MTEsOSArNTA0
LDkgQEAgY2xhc3MgUmViYXNlbGluZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBm
aWxlX2xpc3QucmVtb3ZlKCcvdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvdGVzdHNfcnVuLnR4dCcp
CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGZpbGVfbGlzdCksIDYpCiAgICAgICAgIHNl
bGYuYXNzZXJ0QmFzZWxpbmVzKGZpbGVfbGlzdCwKLSAgICAgICAgICAgICIvcGxhdGZvcm0vdGVz
dC9wYXNzZXMvaW1hZ2UiKQorICAgICAgICAgICAgIi9wbGF0Zm9ybS90ZXN0LW1hYy9wYXNzZXMv
aW1hZ2UiKQogICAgICAgICBzZWxmLmFzc2VydEJhc2VsaW5lcyhmaWxlX2xpc3QsCi0gICAgICAg
ICAgICAiL3BsYXRmb3JtL3Rlc3QvZmFpbHVyZXMvZXhwZWN0ZWQvbWlzc2luZ19pbWFnZSIpCisg
ICAgICAgICAgICAiL3BsYXRmb3JtL3Rlc3QtbWFjL2ZhaWx1cmVzL2V4cGVjdGVkL21pc3Npbmdf
aW1hZ2UiKQogCiAKIGNsYXNzIERyeXJ1blRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL21vY2t0b29sLnB5IGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS90b29sL21vY2t0b29sLnB5CmluZGV4IDdkYjI5OTY5MmNkZDhiYjFiMGI3
NGY3MmFhODUyNjFlM2ZhMTRkMjEuLjM2ODBkNGNlZjg0ZTYxMzdmZGJhOTA0NmNlMmY4M2U0MThl
MDFmNDcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9tb2NrdG9vbC5w
eQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvbW9ja3Rvb2wucHkKQEAgLTU0OCw2
ICs1NDgsOSBAQCBjbGFzcyBNb2NrVXNlcihvYmplY3QpOgogICAgIGRlZiBwcm9tcHRfd2l0aF9s
aXN0KGNscywgbGlzdF90aXRsZSwgbGlzdF9pdGVtcywgY2FuX2Nob29zZV9tdWx0aXBsZT1GYWxz
ZSwgcmF3X2lucHV0PXJhd19pbnB1dCk6CiAgICAgICAgIHBhc3MKIAorICAgIGRlZiBfX2luaXRf
XyhzZWxmKToKKyAgICAgICAgc2VsZi5vcGVuZWRfdXJscyA9IFtdCisKICAgICBkZWYgZWRpdChz
ZWxmLCBmaWxlcyk6CiAgICAgICAgIHBhc3MKIApAQCAtNTY1LDYgKzU2OCw3IEBAIGNsYXNzIE1v
Y2tVc2VyKG9iamVjdCk6CiAgICAgICAgIHJldHVybiBUcnVlCiAKICAgICBkZWYgb3Blbl91cmwo
c2VsZiwgdXJsKToKKyAgICAgICAgc2VsZi5vcGVuZWRfdXJscy5hcHBlbmQodXJsKQogICAgICAg
ICBpZiB1cmwuc3RhcnRzd2l0aCgiZmlsZTovLyIpOgogICAgICAgICAgICAgbG9nKCJNT0NLOiB1
c2VyLm9wZW5fdXJsOiBmaWxlOi8vLi4uIikKICAgICAgICAgICAgIHJldHVybgo=
</data>
<flag name="review"
          id="71438"
          type_id="1"
          status="+"
          setter="tony"
    />
          </attachment>
      

    </bug>

</bugzilla>