<?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>50305</bug_id>
          
          <creation_ts>2010-11-30 18:13:05 -0800</creation_ts>
          <short_desc>Rebaseline server: add updating of baselines</short_desc>
          <delta_ts>2010-12-02 14:53:59 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>47761</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mihai Parparita">mihaip</reporter>
          <assigned_to name="Mihai Parparita">mihaip</assigned_to>
          <cc>dpranke</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>315466</commentid>
    <comment_count>0</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2010-11-30 18:13:05 -0800</bug_when>
    <thetext>Rebaseline server: add updating of baselines</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315469</commentid>
    <comment_count>1</comment_count>
      <attachid>75239</attachid>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2010-11-30 18:16:55 -0800</bug_when>
    <thetext>Created attachment 75239
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315471</commentid>
    <comment_count>2</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2010-11-30 18:18:22 -0800</bug_when>
    <thetext>+Dirk since I&apos;m extending (Mock)FileSystem slightly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315490</commentid>
    <comment_count>3</comment_count>
      <attachid>75239</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-30 19:25:41 -0800</bug_when>
    <thetext>Comment on attachment 75239
Patch

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

I only stared in detail at the filesystem stuff. The non-filesystem stuff looked plausibly correct and stylistically fine, but someone else should probably give it a solid review (or let me know if there&apos;s a desire for me to review it more carefully).

&gt; WebKitTools/Scripts/webkitpy/common/system/filesystem.py:120
&gt; +    def copy(self, source, destination):

Is your intent for this to be copy() or copyfile() ? The mock version below only does copyfile()

&gt; WebKitTools/Scripts/webkitpy/common/system/filesystem_mock.py:44
&gt; +        self.files = files or {}

I&apos;m not seeing a reason for this change (or the change to the signature) over the previous version. Am I missing something?

&gt; WebKitTools/Scripts/webkitpy/common/system/filesystem_mock.py:62
&gt; +

I think this will fail if you list a directory containing files in subdirectories. (e.g. files={&apos;foo/bar/baz.html&apos;} fs.listdir(&apos;foo&apos;) will return &apos;baz.html&apos;.

In the patch to 48072 that I still haven&apos;t had time to break up and land, I have:


    def listdir(self, path):
        if not self.isdir(path):
            raise OSError(&quot;%s is not a directory&quot; % path)

        if not path.endswith(&apos;/&apos;):
            path += &apos;/&apos;

        dirs = []
        files = []
        for f in self.files:
            if self.exists(f) and f.startswith(path):
                remaining = f[len(path):]
                if &apos;/&apos; in remaining:
                    dir = remaining[:remaining.index(&apos;/&apos;)]
                    if not dir in dirs:
                        dirs.append(dir)
                else:
                    files.append(remaining)
        return dirs + files

which is probably better.

&gt; WebKitTools/Scripts/webkitpy/common/system/filesystem_mock.py:85
&gt; +        self.files[destination] = self.files[source]

This will not do the right thing if source is a directory (suggest adding:

        if self.isdir(source):
            raise IOError(errno.EISDIR, source, os.strerror(errno.ISDIR))

Of course, you&apos;d need isdir() for that to work ... :

    def isfile(self, path):
        return path in self.files and self.files[path] is not None

    def isdir(self, path):
        return self.exists(path) and not self.isfile(path)


Also, in 48072 I called this copyfile() for consistency w/ shutils (and to be explicit), but I don&apos;t feel strongly about the name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315951</commentid>
    <comment_count>4</comment_count>
      <attachid>75239</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-12-01 16:58:39 -0800</bug_when>
    <thetext>Comment on attachment 75239
Patch

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

&gt;&gt; WebKitTools/Scripts/webkitpy/common/system/filesystem_mock.py:44
&gt;&gt; +        self.files = files or {}
&gt; 
&gt; I&apos;m not seeing a reason for this change (or the change to the signature) over the previous version. Am I missing something?

class Foo(object):
  def __init__(self, files={}):
    self.files = files

a = Foo()
a.files[&apos;test&apos;] = 1
b = Foo()
print b.files  # prints {&apos;test&apos;: 1}

&gt; WebKitTools/Scripts/webkitpy/tool/commands/data/rebaselineserver/queue.js:176
&gt; +      if (xhr.status &lt; 400) {
&gt; +        handleSuccess();
&gt; +      } else {
&gt; +        handleFailure();
&gt; +      }

Nit: 4 space indents

&gt; WebKitTools/Scripts/webkitpy/tool/commands/rebaselineserver.py:141
&gt; +        self.send_response(success and 200 or 500)

I think with python 2.4+, you can do &quot;200 if success else 500&quot;, which seems clearer, but I would probably just merge with the if statement above.

&gt; WebKitTools/Scripts/webkitpy/tool/commands/rebaselineserver.py:242
&gt; +    (test_name, test_extension) = os.path.splitext(test_file)

Nit: drop () on the left side of =</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315958</commentid>
    <comment_count>5</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-12-01 17:21:49 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 75239 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=75239&amp;action=review
&gt; 
&gt; &gt;&gt; WebKitTools/Scripts/webkitpy/common/system/filesystem_mock.py:44
&gt; &gt;&gt; +        self.files = files or {}
&gt; &gt; 
&gt; &gt; I&apos;m not seeing a reason for this change (or the change to the signature) over the previous version. Am I missing something?
&gt; 
&gt; class Foo(object):
&gt;   def __init__(self, files={}):
&gt;     self.files = files
&gt; 
&gt; a = Foo()
&gt; a.files[&apos;test&apos;] = 1
&gt; b = Foo()
&gt; print b.files  # prints {&apos;test&apos;: 1}
&gt; 

Ah. I thought that object literals were safe for default values, but I guess this is actually assigning to an anonymous object instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315973</commentid>
    <comment_count>6</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2010-12-01 17:49:31 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; WebKitTools/Scripts/webkitpy/common/system/filesystem.py:120
&gt; &gt; +    def copy(self, source, destination):
&gt; 
&gt; Is your intent for this to be copy() or copyfile() ? The mock version below only does copyfile()

copyfile is all I need, I changed its name (and the shutil function that&apos;s used) to that.
 
&gt; I think this will fail if you list a directory containing files in subdirectories. (e.g. files={&apos;foo/bar/baz.html&apos;} fs.listdir(&apos;foo&apos;) will return &apos;baz.html&apos;.
&gt; 
&gt; In the patch to 48072 that I still haven&apos;t had time to break up and land, I have:
&lt;snip&gt;
&gt; which is probably better.

Switched to your implementation.

&gt; 
&gt; &gt; WebKitTools/Scripts/webkitpy/common/system/filesystem_mock.py:85
&gt; &gt; +        self.files[destination] = self.files[source]
&gt; 
&gt; This will not do the right thing if source is a directory (suggest adding:
&gt; 
&gt;         if self.isdir(source):
&gt;             raise IOError(errno.EISDIR, source, os.strerror(errno.ISDIR))
&gt; 
&gt; Of course, you&apos;d need isdir() for that to work ... :
&gt; 
&gt;     def isfile(self, path):
&gt;         return path in self.files and self.files[path] is not None
&gt; 
&gt;     def isdir(self, path):
&gt;         return self.exists(path) and not self.isfile(path)

Not sure I understand this, given that your isfile() implementation is the same as the current exists(), so I don&apos;t see how isdir could ever return true.

(In reply to comment #4)
&gt; &gt; WebKitTools/Scripts/webkitpy/tool/commands/data/rebaselineserver/queue.js:176
&gt; &gt; +      if (xhr.status &lt; 400) {
&gt; &gt; +        handleSuccess();
&gt; &gt; +      } else {
&gt; &gt; +        handleFailure();
&gt; &gt; +      }
&gt; 
&gt; Nit: 4 space indents

Fixed.

&gt; &gt; WebKitTools/Scripts/webkitpy/tool/commands/rebaselineserver.py:141
&gt; &gt; +        self.send_response(success and 200 or 500)
&gt; 
&gt; I think with python 2.4+, you can do &quot;200 if success else 500&quot;, which seems clearer, but I would probably just merge with the if statement above.

Merged with the if statement above.

&gt; 
&gt; &gt; WebKitTools/Scripts/webkitpy/tool/commands/rebaselineserver.py:242
&gt; &gt; +    (test_name, test_extension) = os.path.splitext(test_file)
&gt; 
&gt; Nit: drop () on the left side of =

Done. Also renamed test_extension to _ since it&apos;s not actually used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315976</commentid>
    <comment_count>7</comment_count>
      <attachid>75340</attachid>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2010-12-01 17:52:16 -0800</bug_when>
    <thetext>Created attachment 75340
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316236</commentid>
    <comment_count>8</comment_count>
      <attachid>75340</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-12-02 10:35:17 -0800</bug_when>
    <thetext>Comment on attachment 75340
Patch

LGTM.  Maybe dirk wants to make another pass at it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316413</commentid>
    <comment_count>9</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-12-02 14:12:44 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; &gt; &gt; WebKitTools/Scripts/webkitpy/common/system/filesystem_mock.py:85
&gt; &gt; &gt; +        self.files[destination] = self.files[source]
&gt; &gt; 
&gt; &gt; This will not do the right thing if source is a directory (suggest adding:
&gt; &gt; 
&gt; &gt;         if self.isdir(source):
&gt; &gt;             raise IOError(errno.EISDIR, source, os.strerror(errno.ISDIR))
&gt; &gt; 
&gt; &gt; Of course, you&apos;d need isdir() for that to work ... :
&gt; &gt; 
&gt; &gt;     def isfile(self, path):
&gt; &gt;         return path in self.files and self.files[path] is not None
&gt; &gt; 
&gt; &gt;     def isdir(self, path):
&gt; &gt;         return self.exists(path) and not self.isfile(path)
&gt; 
&gt; Not sure I understand this, given that your isfile() implementation is the same as the current exists(), so I don&apos;t see how isdir could ever return true.
&gt;

ah, sorry, I forgot that I had changed the exists() logic in that patch as well:

    def exists(self, path):
        if path in self.files:
            return self.files[path] is not None

        # Check to see if path refers to a &quot;directory&quot; in self.files.
        if not path.endswith(&apos;/&apos;):
            path = path + &apos;/&apos;
        return any([f.startswith(path) for f in self.files])

I think this code is correct but is perhaps a bit confusing. It might be better to rewrite this as:

def exists(self, path):
  return self.isfile(path) or self.isdir(path)

def isfile(self, path):
  return path in self.files and self.files[path] is not None

def isdir(self, path):
  if path in self.files:
    return False
  if not path.endswith(&apos;/&apos;):
   path += &apos;/&apos;
 return any(f.startswith(path) for f in self.files)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316414</commentid>
    <comment_count>10</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-12-02 14:17:23 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 75340 [details])
&gt; LGTM.  Maybe dirk wants to make another pass at it.

At some point the code in filesystem_mock / in_memory_filesystem should validate its arguments more carefully, but it doesn&apos;t have to be now. Patch LGTM otherwise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316428</commentid>
    <comment_count>11</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2010-12-02 14:50:17 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; I think this code is correct but is perhaps a bit confusing. It might be better to rewrite this as:
&gt; 
&gt; def exists(self, path):
&gt;   return self.isfile(path) or self.isdir(path)
&gt; 
&gt; def isfile(self, path):
&gt;   return path in self.files and self.files[path] is not None
&gt; 
&gt; def isdir(self, path):
&gt;   if path in self.files:
&gt;     return False
&gt;   if not path.endswith(&apos;/&apos;):
&gt;    path += &apos;/&apos;
&gt;  return any(f.startswith(path) for f in self.files)

Seems straightforward enough. I&apos;ll incorporate this and land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316431</commentid>
    <comment_count>12</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2010-12-02 14:53:59 -0800</bug_when>
    <thetext>Committed r73204: &lt;http://trac.webkit.org/changeset/73204&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75239</attachid>
            <date>2010-11-30 18:16:55 -0800</date>
            <delta_ts>2010-12-01 17:52:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-50305-20101130181654.patch</filename>
            <type>text/plain</type>
            <size>22937</size>
            <attacher name="Mihai Parparita">mihaip</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAwMDRhY2UyNzI1ZTA0YzFkYmJiZGJkZDc1NjgxNTRlMzliOWFkYTY3Li4zOWM4YzU1
YjRmOWMxYTJlNTJhODgwNmYwYjZjMmJjMGEyZWMyNzliIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzEgQEAK
KzIwMTAtMTEtMzAgIE1paGFpIFBhcnBhcml0YSAgPG1paGFpcEBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmViYXNlbGluZSBz
ZXJ2ZXI6IGFkZCB1cGRhdGluZyBvZiBiYXNlbGluZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwMzA1CisgICAgICAgIAorICAgICAgICBJbXBsZW1l
bnRzIHVwZGF0aW5nIG9mIGJhc2VsaW5lcywgd2hlcmUgd2UgY29weSAtYWN0dWFsLiogZmlsZXMg
b3ZlcgorICAgICAgICB0aGUgY3VycmVudCAtZXhwZWN0ZWQuKiBmaWxlcy4gVG8gZG8gdGhpcywg
d2UgbmVlZCBhCisgICAgICAgIF9nZXRfYWN0dWFsX3Jlc3VsdF9maWxlcyBtZXRob2QgdG8gZ2V0
IHRlc3QgcmVzdWx0cyBmaWxlcyBhbmQgYQorICAgICAgICBfcmViYXNlbGluZV90ZXN0IG1ldGhv
ZCB0byBhY3R1YWxseSBkbyB0aGUgZmlsZSBjb3B5IGFuZCBTQ00gb3BlcmF0aW9uLgorICAgICAg
ICBfcmViYXNlbGluZV90ZXN0IGxvZ3Mgb3V0cHV0IGludG8gYSBidWZmZXIsIHRoaXMgaXMgdXNl
ZnVsIGZvciBib3RoCisgICAgICAgIHNob3dpbmcgcmVzdWx0IGluIHRoZSBVSSBhbmQgZm9yIHVu
aXQgdGVzdHMuCisgICAgICAgIAorICAgICAgICBUbyBtYWtlIHBhc3NpbmcgYXJvdW5kIG9mIHRo
ZSB2YXJpb3VzIHRlc3QgZW52aXJvbm1lbnQgcHJvcGVydGllcworICAgICAgICAocmVzdWx0cyBk
aXJlY3RvcnksIGZpbGVzeXN0ZW0sIFNDTSwgZXRjKSBlYXNpZXIsIGFkZCBhIFRlc3RDb25maWcK
KyAgICAgICAgY2xhc3MgZm9yIHRoZW0uCisgICAgICAgIAorICAgICAgICBNb3Zpbmcgb2YgZXhp
c3RpbmcgYmFzZWxpbmVzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQsIHRoaXMgcGF0Y2ggaXMgYmln
CisgICAgICAgIGVub3VnaCBhcyBpdCBpcy4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3N5c3RlbS9maWxlc3lzdGVtLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3N5c3RlbS9maWxlc3lzdGVtX21vY2sucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS90b29sL2NvbW1hbmRzL2RhdGEvcmViYXNlbGluZXNlcnZlci9xdWV1ZS5qczoKKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcmViYXNlbGluZXNlcnZlci5weToK
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcmViYXNlbGluZXNlcnZl
cl91bml0dGVzdC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvbW9ja3Rvb2wu
cHk6CisKIDIwMTAtMTEtMzAgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IFRvbnkgQ2hhbmcuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmlsZXN5c3RlbS5weSBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtLnB5CmluZGV4IGM3ZWZkZTNh
NDI0Y2E0MjY4ZTE2MGFlM2Q1YTMyNjE4YzY0ZmMyM2IuLjU3OTBjZDI1YzA3MmU2ZTg1Yzk3ODBk
YjgzZDE3Zjg0YzU2OWZlN2MgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtLnB5CkBAIC0zMyw2ICszMyw3IEBAIGZy
b20gX19mdXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQKIGltcG9ydCBjb2RlY3MKIGltcG9y
dCBlcnJubwogaW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCiBpbXBvcnQgdGVtcGZpbGUKIAogCkBA
IC0xMTUsMyArMTE2LDcgQEAgY2xhc3MgRmlsZVN5c3RlbShvYmplY3QpOgogICAgICAgICBUaGUg
ZmlsZSBpcyB3cml0dGVuIGVuY29kZWQgYXMgVVRGLTggd2l0aCBubyBCT00uIiIiCiAgICAgICAg
IHdpdGggY29kZWNzLm9wZW4ocGF0aCwgJ3cnLCAndXRmOCcpIGFzIGY6CiAgICAgICAgICAgICBm
LndyaXRlKGNvbnRlbnRzKQorCisgICAgZGVmIGNvcHkoc2VsZiwgc291cmNlLCBkZXN0aW5hdGlv
bik6CisgICAgICAgICIiIkNvcGllcyB0aGUgZmlsZXMgYXQgdGhlIGdpdmVuIHBhdGggdG8gdGhl
IGRlc3RpbmF0aW9uIHBhdGguIiIiCisgICAgICAgIHNodXRpbC5jb3B5KHNvdXJjZSwgZGVzdGlu
YXRpb24pCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9z
eXN0ZW0vZmlsZXN5c3RlbV9tb2NrLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9j
b21tb24vc3lzdGVtL2ZpbGVzeXN0ZW1fbW9jay5weQppbmRleCAyZGJjMWU4Y2NjZWQzYWVhZDYw
MGEyYWMzZjNhMWIxNmRhMzE4NjMzLi45MDg4OGNlNmFjYmU4NDM4MzY4MzQ5MzRmZWIyNzQwYjgx
NGUyMTVjIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9z
eXN0ZW0vZmlsZXN5c3RlbV9tb2NrLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtX21vY2sucHkKQEAgLTMyLDcgKzMyLDcgQEAgaW1w
b3J0IHBhdGgKIAogCiBjbGFzcyBNb2NrRmlsZVN5c3RlbShvYmplY3QpOgotICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBmaWxlcz17fSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVzPU5vbmUp
OgogICAgICAgICAiIiJJbml0aWFsaXplcyBhICJtb2NrIiBmaWxlc3lzdGVtIHRoYXQgY2FuIGJl
IHVzZWQgdG8gY29tcGxldGVseQogICAgICAgICBzdHViIG91dCBhIGZpbGVzeXN0ZW0uCiAKQEAg
LTQxLDcgKzQxLDcgQEAgY2xhc3MgTW9ja0ZpbGVTeXN0ZW0ob2JqZWN0KToKICAgICAgICAgICAg
ICAgICB2YWx1ZSBvZiBOb25lIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgZmlsZSBzaG91
bGQKICAgICAgICAgICAgICAgICBub3QgZXhpc3QuCiAgICAgICAgICIiIgotICAgICAgICBzZWxm
LmZpbGVzID0gZmlsZXMKKyAgICAgICAgc2VsZi5maWxlcyA9IGZpbGVzIG9yIHt9CiAKICAgICBk
ZWYgZXhpc3RzKHNlbGYsIHBhdGgpOgogICAgICAgICBpZiBwYXRoIGluIHNlbGYuZmlsZXM6CkBA
IC01MSw2ICs1MSwxNSBAQCBjbGFzcyBNb2NrRmlsZVN5c3RlbShvYmplY3QpOgogICAgIGRlZiBq
b2luKHNlbGYsICpjb21wcyk6CiAgICAgICAgIHJldHVybiAnLycuam9pbihjb21wcykKIAorICAg
IGRlZiBsaXN0ZGlyKHNlbGYsIHBhdGgpOgorICAgICAgICBkaXJfZmlsZXMgPSBbXQorICAgICAg
ICBkaXJfcHJlZml4ID0gcGF0aCArICcvJworICAgICAgICBmb3IgZmlsZSBpbiBzZWxmLmZpbGVz
LmtleXMoKToKKyAgICAgICAgICAgIGlmIGZpbGUuc3RhcnRzd2l0aChkaXJfcHJlZml4KToKKyAg
ICAgICAgICAgICAgICBmaWxlX25hbWUgPSBmaWxlLnNwbGl0KCcvJylbLTFdCisgICAgICAgICAg
ICAgICAgZGlyX2ZpbGVzLmFwcGVuZChmaWxlX25hbWUpCisgICAgICAgIHJldHVybiBkaXJfZmls
ZXMKKwogICAgIGRlZiBtYXliZV9tYWtlX2RpcmVjdG9yeShzZWxmLCAqcGF0aCk6CiAgICAgICAg
ICMgRklYTUU6IEltcGxlbWVudCBzdWNoIHRoYXQgc3Vic2VxdWVudCBjYWxscyB0byBpc2Rpcigp
IHdvcms/CiAgICAgICAgIHBhc3MKQEAgLTY5LDMgKzc4LDggQEAgY2xhc3MgTW9ja0ZpbGVTeXN0
ZW0ob2JqZWN0KToKIAogICAgIGRlZiB3cml0ZV9iaW5hcnlfZmlsZShzZWxmLCBwYXRoLCBjb250
ZW50cyk6CiAgICAgICAgIHNlbGYuZmlsZXNbcGF0aF0gPSBjb250ZW50cworCisgICAgZGVmIGNv
cHkoc2VsZiwgc291cmNlLCBkZXN0aW5hdGlvbik6CisgICAgICAgIGlmIG5vdCBzZWxmLmV4aXN0
cyhzb3VyY2UpOgorICAgICAgICAgICAgcmFpc2UgSU9FcnJvcihlcnJuby5FTk9FTlQsIHNvdXJj
ZSwgb3Muc3RyZXJyb3IoZXJybm8uRU5PRU5UKSkKKyAgICAgICAgc2VsZi5maWxlc1tkZXN0aW5h
dGlvbl0gPSBzZWxmLmZpbGVzW3NvdXJjZV0KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9kYXRhL3JlYmFzZWxpbmVzZXJ2ZXIvcXVldWUuanMg
Yi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvZGF0YS9yZWJhc2Vs
aW5lc2VydmVyL3F1ZXVlLmpzCmluZGV4IGY1N2M5MTk1OTllMjc4MDBiODk4Y2Q5M2Y3Y2NhYzhh
ODg3NjlkOTkuLmM2NWNjYWMxOWIyNTFlMGYwYjI3YjJkMjRhZWIyMjllMWExOTE1NDggMTAwNjQ0
Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9kYXRhL3Jl
YmFzZWxpbmVzZXJ2ZXIvcXVldWUuanMKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRw
eS90b29sL2NvbW1hbmRzL2RhdGEvcmViYXNlbGluZXNlcnZlci9xdWV1ZS5qcwpAQCAtMTQ2LDEz
ICsxNDYsMzYgQEAgUmViYXNlbGluZVF1ZXVlLnByb3RvdHlwZS5fcmViYXNlbGluZVRlc3QgPSBm
dW5jdGlvbih0ZXN0TmFtZSkKICAgICB2YXIgYmFzZWxpbmVUYXJnZXQgPSBnZXRTZWxlY3RWYWx1
ZSgnYmFzZWxpbmUtdGFyZ2V0Jyk7CiAgICAgdmFyIGJhc2VsaW5lTW92ZVRvID0gZ2V0U2VsZWN0
VmFsdWUoJ2Jhc2VsaW5lLW1vdmUtdG8nKTsKIAotICAgIC8vIEZJWE1FOiBhY3R1YWxseSByZWJh
c2VsaW5lCi0gICAgbG9nKCdSZWJhc2VsaW5pbmcgJyArIHRlc3ROYW1lICsgJyBmb3IgcGxhdGZv
cm0gJyArIGJhc2VsaW5lVGFyZ2V0ICsgJy4uLicpOwotICAgIHZhciB0ZXN0ID0gcmVzdWx0cy50
ZXN0c1t0ZXN0TmFtZV07Ci0gICAgdGhpcy5fcmVtb3ZlVGVzdCh0ZXN0TmFtZSk7Ci0gICAgdGhp
cy5faW5Qcm9ncmVzc1JlYmFzZWxpbmVDb3VudC0tOwotICAgIHRlc3Quc3RhdGUgPSBTVEFURV9S
RUJBU0VMSU5FX1NVQ0NFRURFRDsKLSAgICB1cGRhdGVTdGF0ZSgpOwotICAgIGxvZygnUmViYXNl
bGluZWQgYWRkIHRlc3Qgd2l0aCBzdGF0ZSAnICsgdGVzdC5zdGF0ZSArICcgdG8gcXVldWUnLAot
ICAgICAgICBsb2cuU1VDQ0VTUyk7CisgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgp
OworICAgIHhoci5vcGVuKCdQT1NUJywKKyAgICAgICAgJy9yZWJhc2VsaW5lP3Rlc3Q9JyArIGVu
Y29kZVVSSUNvbXBvbmVudCh0ZXN0TmFtZSkgKworICAgICAgICAnJmJhc2VsaW5lLXRhcmdldD0n
ICsgZW5jb2RlVVJJQ29tcG9uZW50KGJhc2VsaW5lVGFyZ2V0KSArCisgICAgICAgICcmYmFzZWxp
bmUtbW92ZS10bz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGJhc2VsaW5lTW92ZVRvKSk7CisKKyAg
ICB2YXIgc2VsZiA9IHRoaXM7CisgICAgZnVuY3Rpb24gaGFuZGxlUmVzcG9uc2UobG9nVHlwZSwg
bmV3U3RhdGUpIHsKKyAgICAgICAgbG9nKHhoci5yZXNwb25zZVRleHQsIGxvZ1R5cGUpOworICAg
ICAgICBzZWxmLl9yZW1vdmVUZXN0KHRlc3ROYW1lKTsKKyAgICAgICAgc2VsZi5faW5Qcm9ncmVz
c1JlYmFzZWxpbmVDb3VudC0tOworICAgICAgICByZXN1bHRzLnRlc3RzW3Rlc3ROYW1lXS5zdGF0
ZSA9IG5ld1N0YXRlOworICAgICAgICB1cGRhdGVTdGF0ZSgpOworICAgIH0KKworICAgIGZ1bmN0
aW9uIGhhbmRsZVN1Y2Nlc3MoKSB7CisgICAgICAgIGhhbmRsZVJlc3BvbnNlKGxvZy5TVUNDRVNT
LCBTVEFURV9SRUJBU0VMSU5FX1NVQ0NFRURFRCk7CisgICAgfQorICAgIGZ1bmN0aW9uIGhhbmRs
ZUZhaWx1cmUoKSB7CisgICAgICAgIGhhbmRsZVJlc3BvbnNlKGxvZy5FUlJPUiwgU1RBVEVfUkVC
QVNFTElORV9GQUlMRUQpOworICAgIH0KKworICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdsb2Fk
JywgZnVuY3Rpb24oKSB7CisgICAgICBpZiAoeGhyLnN0YXR1cyA8IDQwMCkgeworICAgICAgICBo
YW5kbGVTdWNjZXNzKCk7CisgICAgICB9IGVsc2UgeworICAgICAgICBoYW5kbGVGYWlsdXJlKCk7
CisgICAgICB9CisgICAgfSk7CisgICAgeGhyLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgaGFu
ZGxlRmFpbHVyZSk7CisKKyAgICB4aHIuc2VuZCgpOwogfTsKZGlmZiAtLWdpdCBhL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9yZWJhc2VsaW5lc2VydmVyLnB5IGIv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3JlYmFzZWxpbmVzZXJ2
ZXIucHkKaW5kZXggMmRjYzU2NmI0OGM1YTEzYmJiZWFkNTdiNzMxOGViZTg1YTExYmY1YS4uZDJl
Y2JkMDgwY2I4MGYwMjI1MzM5Y2I0YjQzZTAxOTU5NWIyNWE1YyAxMDA2NDQKLS0tIGEvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3JlYmFzZWxpbmVzZXJ2ZXIucHkK
KysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3JlYmFzZWxp
bmVzZXJ2ZXIucHkKQEAgLTMzLDYgKzMzLDcgQEAgZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRo
X3N0YXRlbWVudAogCiBpbXBvcnQgY29kZWNzCiBpbXBvcnQgZGF0ZXRpbWUKK2ltcG9ydCBmbm1h
dGNoCiBpbXBvcnQgbWltZXR5cGVzCiBpbXBvcnQgb3MKIGltcG9ydCBvcy5wYXRoCkBAIC01Niw5
ICs1Nyw5IEBAIFNUQVRFX1JFQkFTRUxJTkVfRkFJTEVEID0gJ3JlYmFzZWxpbmVfZmFpbGVkJwog
U1RBVEVfUkVCQVNFTElORV9TVUNDRUVERUQgPSAncmViYXNlbGluZV9zdWNjZWVkZWQnCiAKIGNs
YXNzIFJlYmFzZWxpbmVIVFRQU2VydmVyKEJhc2VIVFRQU2VydmVyLkhUVFBTZXJ2ZXIpOgotICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBodHRwZF9wb3J0LCByZXN1bHRzX2RpcmVjdG9yeSwgcmVzdWx0
c19qc29uLCBwbGF0Zm9ybXNfanNvbik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGh0dHBkX3Bv
cnQsIHRlc3RfY29uZmlnLCByZXN1bHRzX2pzb24sIHBsYXRmb3Jtc19qc29uKToKICAgICAgICAg
QmFzZUhUVFBTZXJ2ZXIuSFRUUFNlcnZlci5fX2luaXRfXyhzZWxmLCAoIiIsIGh0dHBkX3BvcnQp
LCBSZWJhc2VsaW5lSFRUUFJlcXVlc3RIYW5kbGVyKQotICAgICAgICBzZWxmLnJlc3VsdHNfZGly
ZWN0b3J5ID0gcmVzdWx0c19kaXJlY3RvcnkKKyAgICAgICAgc2VsZi50ZXN0X2NvbmZpZyA9IHRl
c3RfY29uZmlnCiAgICAgICAgIHNlbGYucmVzdWx0c19qc29uID0gcmVzdWx0c19qc29uCiAgICAg
ICAgIHNlbGYucGxhdGZvcm1zX2pzb24gPSBwbGF0Zm9ybXNfanNvbgogCkBAIC0xMTMsNiArMTE0
LDM1IEBAIGNsYXNzIFJlYmFzZWxpbmVIVFRQUmVxdWVzdEhhbmRsZXIoQmFzZUhUVFBTZXJ2ZXIu
QmFzZUhUVFBSZXF1ZXN0SGFuZGxlcik6CiAgICAgICAgIHNlbGYuX3NlcnZlX2ZpbGUob3MucGF0
aC5qb2luKAogICAgICAgICAgICAgUmViYXNlbGluZUhUVFBSZXF1ZXN0SGFuZGxlci5TVEFUSUNf
RklMRV9ESVJFQ1RPUlksIHN0YXRpY19wYXRoKSkKIAorICAgIGRlZiByZWJhc2VsaW5lKHNlbGYp
OgorICAgICAgICB0ZXN0ID0gc2VsZi5xdWVyeVsndGVzdCddWzBdCisgICAgICAgIGJhc2VsaW5l
X3RhcmdldCA9IHNlbGYucXVlcnlbJ2Jhc2VsaW5lLXRhcmdldCddWzBdCisgICAgICAgIGJhc2Vs
aW5lX21vdmVfdG8gPSBzZWxmLnF1ZXJ5WydiYXNlbGluZS1tb3ZlLXRvJ11bMF0KKyAgICAgICAg
dGVzdF9qc29uID0gc2VsZi5zZXJ2ZXIucmVzdWx0c19qc29uWyd0ZXN0cyddW3Rlc3RdCisKKyAg
ICAgICAgaWYgdGVzdF9qc29uWydzdGF0ZSddICE9IFNUQVRFX05FRURTX1JFQkFTRUxJTkU6Cisg
ICAgICAgICAgICBzZWxmLnNlbmRfZXJyb3IoNDAwLCAiVGVzdCAlcyBpcyBpbiB1bmV4cGVjdGVk
IHN0YXRlOiAlcyIgJQorICAgICAgICAgICAgICAgICh0ZXN0LCB0ZXN0X2pzb25bInN0YXRlIl0p
KQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgbG9nID0gW10KKyAgICAgICAgc3VjY2Vz
cyA9IF9yZWJhc2VsaW5lX3Rlc3QoCisgICAgICAgICAgICB0ZXN0LAorICAgICAgICAgICAgYmFz
ZWxpbmVfdGFyZ2V0LAorICAgICAgICAgICAgYmFzZWxpbmVfbW92ZV90bywKKyAgICAgICAgICAg
IHNlbGYuc2VydmVyLnRlc3RfY29uZmlnLAorICAgICAgICAgICAgbG9nPWxhbWJkYSBsOiBsb2cu
YXBwZW5kKGwpKQorCisgICAgICAgIGlmIHN1Y2Nlc3M6CisgICAgICAgICAgICB0ZXN0X2pzb25b
J3N0YXRlJ10gPSBTVEFURV9SRUJBU0VMSU5FX1NVQ0NFRURFRAorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgdGVzdF9qc29uWydzdGF0ZSddID0gU1RBVEVfUkVCQVNFTElORV9GQUlMRUQKKwor
ICAgICAgICBzZWxmLnNlbmRfcmVzcG9uc2Uoc3VjY2VzcyBhbmQgMjAwIG9yIDUwMCkKKyAgICAg
ICAgc2VsZi5zZW5kX2hlYWRlcignQ29udGVudC10eXBlJywgJ3RleHQvcGxhaW4nKQorICAgICAg
ICBzZWxmLmVuZF9oZWFkZXJzKCkKKyAgICAgICAgc2VsZi53ZmlsZS53cml0ZSgnXG4nLmpvaW4o
bG9nKSkKKwogICAgIGRlZiBxdWl0cXVpdHF1aXQoc2VsZik6CiAgICAgICAgIHNlbGYuc2VuZF9y
ZXNwb25zZSgyMDApCiAgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoIkNvbnRlbnQtdHlwZSIsICJ0
ZXh0L3BsYWluIikKQEAgLTE0Myw3ICsxNzMsNyBAQCBjbGFzcyBSZWJhc2VsaW5lSFRUUFJlcXVl
c3RIYW5kbGVyKEJhc2VIVFRQU2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIpOgogICAgICAg
ICBlbGlmIG1vZGUgPT0gJ2RpZmYtdGV4dCc6CiAgICAgICAgICAgICBmaWxlX25hbWUgPSB0ZXN0
X25hbWUgKyAnLWRpZmYudHh0JwogCi0gICAgICAgIGZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihz
ZWxmLnNlcnZlci5yZXN1bHRzX2RpcmVjdG9yeSwgZmlsZV9uYW1lKQorICAgICAgICBmaWxlX3Bh
dGggPSBvcy5wYXRoLmpvaW4oc2VsZi5zZXJ2ZXIudGVzdF9jb25maWcucmVzdWx0c19kaXJlY3Rv
cnksIGZpbGVfbmFtZSkKIAogICAgICAgICAjIExldCByZXN1bHRzIGJlIGNhY2hlZCBmb3IgNjAg
c2Vjb25kcywgc28gdGhhdCB0aGV5IGNhbiBiZSBwcmUtZmV0Y2hlZAogICAgICAgICAjIGJ5IHRo
ZSBVSQpAQCAtMTgzLDEyICsyMTMsNzkgQEAgY2xhc3MgUmViYXNlbGluZUhUVFBSZXF1ZXN0SGFu
ZGxlcihCYXNlSFRUUFNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyKToKICAgICAgICAgICAg
IHNodXRpbC5jb3B5ZmlsZW9iaihzdGF0aWNfZmlsZSwgc2VsZi53ZmlsZSkKIAogCi1kZWYgX2dl
dF90ZXN0X2Jhc2VsaW5lcyh0ZXN0X2ZpbGUsIHRlc3RfcG9ydCwgbGF5b3V0X3Rlc3RzX2RpcmVj
dG9yeSwgcGxhdGZvcm1zLCBmaWxlc3lzdGVtKToKK2NsYXNzIFRlc3RDb25maWcob2JqZWN0KToK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdF9wb3J0LCBsYXlvdXRfdGVzdHNfZGlyZWN0b3J5
LCByZXN1bHRzX2RpcmVjdG9yeSwgcGxhdGZvcm1zLCBmaWxlc3lzdGVtLCBzY20pOgorICAgICAg
ICBzZWxmLnRlc3RfcG9ydCA9IHRlc3RfcG9ydAorICAgICAgICBzZWxmLmxheW91dF90ZXN0c19k
aXJlY3RvcnkgPSBsYXlvdXRfdGVzdHNfZGlyZWN0b3J5CisgICAgICAgIHNlbGYucmVzdWx0c19k
aXJlY3RvcnkgPSByZXN1bHRzX2RpcmVjdG9yeQorICAgICAgICBzZWxmLnBsYXRmb3JtcyA9IHBs
YXRmb3JtcworICAgICAgICBzZWxmLmZpbGVzeXN0ZW0gPSBmaWxlc3lzdGVtCisgICAgICAgIHNl
bGYuc2NtID0gc2NtCisKKworZGVmIF9nZXRfYWN0dWFsX3Jlc3VsdF9maWxlcyh0ZXN0X2ZpbGUs
IHRlc3RfY29uZmlnKToKKyAgICB0ZXN0X25hbWUsIF8gPSBvcy5wYXRoLnNwbGl0ZXh0KHRlc3Rf
ZmlsZSkKKyAgICB0ZXN0X2RpcmVjdG9yeSA9IG9zLnBhdGguZGlybmFtZSh0ZXN0X2ZpbGUpCisK
KyAgICB0ZXN0X3Jlc3VsdHNfZGlyZWN0b3J5ID0gdGVzdF9jb25maWcuZmlsZXN5c3RlbS5qb2lu
KAorICAgICAgICB0ZXN0X2NvbmZpZy5yZXN1bHRzX2RpcmVjdG9yeSwgdGVzdF9kaXJlY3Rvcnkp
CisgICAgYWN0dWFsX3BhdHRlcm4gPSBvcy5wYXRoLmJhc2VuYW1lKHRlc3RfbmFtZSkgKyAnLWFj
dHVhbC4qJworICAgIGFjdHVhbF9maWxlcyA9IFtdCisgICAgZm9yIGZpbGVuYW1lIGluIHRlc3Rf
Y29uZmlnLmZpbGVzeXN0ZW0ubGlzdGRpcih0ZXN0X3Jlc3VsdHNfZGlyZWN0b3J5KToKKyAgICAg
ICAgaWYgZm5tYXRjaC5mbm1hdGNoKGZpbGVuYW1lLCBhY3R1YWxfcGF0dGVybik6CisgICAgICAg
ICAgICBhY3R1YWxfZmlsZXMuYXBwZW5kKGZpbGVuYW1lKQorICAgIGFjdHVhbF9maWxlcy5zb3J0
KCkKKyAgICByZXR1cm4gdHVwbGUoYWN0dWFsX2ZpbGVzKQorCisKK2RlZiBfcmViYXNlbGluZV90
ZXN0KHRlc3RfZmlsZSwgYmFzZWxpbmVfdGFyZ2V0LCBiYXNlbGluZV9tb3ZlX3RvLCB0ZXN0X2Nv
bmZpZywgbG9nKToKKyAgICAodGVzdF9uYW1lLCB0ZXN0X2V4dGVuc2lvbikgPSBvcy5wYXRoLnNw
bGl0ZXh0KHRlc3RfZmlsZSkKKyAgICB0ZXN0X2RpcmVjdG9yeSA9IG9zLnBhdGguZGlybmFtZSh0
ZXN0X25hbWUpCisKKyAgICBsb2coJ1JlYmFzZWxpbmluZyAlcy4uLicgJSB0ZXN0X25hbWUpCisK
KyAgICBhY3R1YWxfcmVzdWx0X2ZpbGVzID0gX2dldF9hY3R1YWxfcmVzdWx0X2ZpbGVzKHRlc3Rf
ZmlsZSwgdGVzdF9jb25maWcpCisgICAgZmlsZXN5c3RlbSA9IHRlc3RfY29uZmlnLmZpbGVzeXN0
ZW0KKyAgICBzY20gPSB0ZXN0X2NvbmZpZy5zY20KKyAgICBsYXlvdXRfdGVzdHNfZGlyZWN0b3J5
ID0gdGVzdF9jb25maWcubGF5b3V0X3Rlc3RzX2RpcmVjdG9yeQorICAgIHJlc3VsdHNfZGlyZWN0
b3J5ID0gdGVzdF9jb25maWcucmVzdWx0c19kaXJlY3RvcnkKKyAgICB0YXJnZXRfZXhwZWN0YXRp
b25zX2RpcmVjdG9yeSA9IGZpbGVzeXN0ZW0uam9pbigKKyAgICAgICAgbGF5b3V0X3Rlc3RzX2Rp
cmVjdG9yeSwgJ3BsYXRmb3JtJywgYmFzZWxpbmVfdGFyZ2V0LCB0ZXN0X2RpcmVjdG9yeSkKKyAg
ICB0ZXN0X3Jlc3VsdHNfZGlyZWN0b3J5ID0gdGVzdF9jb25maWcuZmlsZXN5c3RlbS5qb2luKAor
ICAgICAgICB0ZXN0X2NvbmZpZy5yZXN1bHRzX2RpcmVjdG9yeSwgdGVzdF9kaXJlY3RvcnkpCisK
KyAgICAjIElmIHJlcXVlc3RlZCwgbW92ZSBjdXJyZW50IGJhc2VsaW5lcyBvdXQKKyAgICBjdXJy
ZW50X2Jhc2VsaW5lcyA9IF9nZXRfdGVzdF9iYXNlbGluZXModGVzdF9maWxlLCB0ZXN0X2NvbmZp
ZykKKyAgICBpZiBiYXNlbGluZV90YXJnZXQgaW4gY3VycmVudF9iYXNlbGluZXMgYW5kIGJhc2Vs
aW5lX21vdmVfdG8gIT0gJ25vbmUnOgorICAgICAgICBsb2coJyAgTW92aW5nIGN1cnJlbnQgJXMg
YmFzZWxpbmVzIHRvICVzJyAlCisgICAgICAgICAgICAoYmFzZWxpbmVfdGFyZ2V0LCBiYXNlbGlu
ZV9tb3ZlX3RvKSkKKyAgICAgICAgbG9nKCcgICAgRklYTUU6IEFkZCBzdXBwb3J0IGZvciBtb3Zp
bmcgZXhpc3RpbmcgYmFzZWxpbmVzJykKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBsb2co
JyAgVXBkYXRpbmcgYmFzZWxpbmVzIGZvciAlcycgJSBiYXNlbGluZV90YXJnZXQpCisgICAgZm9y
IHNvdXJjZV9maWxlIGluIGFjdHVhbF9yZXN1bHRfZmlsZXM6CisgICAgICAgIHNvdXJjZV9wYXRo
ID0gZmlsZXN5c3RlbS5qb2luKHRlc3RfcmVzdWx0c19kaXJlY3RvcnksIHNvdXJjZV9maWxlKQor
ICAgICAgICBkZXN0aW5hdGlvbl9maWxlID0gc291cmNlX2ZpbGUucmVwbGFjZSgnLWFjdHVhbCcs
ICctZXhwZWN0ZWQnKQorICAgICAgICBkZXN0aW5hdGlvbl9wYXRoID0gZmlsZXN5c3RlbS5qb2lu
KAorICAgICAgICAgICAgdGFyZ2V0X2V4cGVjdGF0aW9uc19kaXJlY3RvcnksIGRlc3RpbmF0aW9u
X2ZpbGUpCisgICAgICAgIGZpbGVzeXN0ZW0uY29weShzb3VyY2VfcGF0aCwgZGVzdGluYXRpb25f
cGF0aCkKKyAgICAgICAgZXhpdF9jb2RlID0gc2NtLmFkZChkZXN0aW5hdGlvbl9wYXRoLCByZXR1
cm5fZXhpdF9jb2RlPVRydWUpCisgICAgICAgIGlmIGV4aXRfY29kZToKKyAgICAgICAgICAgIGxv
ZygnICAgIENvdWxkIG5vdCB1cGRhdGUgJXMgaW4gU0NNLCBleGl0IGNvZGUgJWQnICUKKyAgICAg
ICAgICAgICAgICAoZGVzdGluYXRpb25fZmlsZSwgZXhpdF9jb2RlKSkKKyAgICAgICAgICAgIHJl
dHVybiBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nKCcgICAgVXBkYXRlZCAl
cycgJSBkZXN0aW5hdGlvbl9maWxlKQorCisgICAgcmV0dXJuIFRydWUKKworCitkZWYgX2dldF90
ZXN0X2Jhc2VsaW5lcyh0ZXN0X2ZpbGUsIHRlc3RfY29uZmlnKToKICAgICBjbGFzcyBBbGxQbGF0
Zm9ybXNQb3J0KFdlYktpdFBvcnQpOgogICAgICAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAg
ICAgICAgICBXZWJLaXRQb3J0Ll9faW5pdF9fKHNlbGYsIGZpbGVzeXN0ZW09ZmlsZXN5c3RlbSkK
KyAgICAgICAgICAgIFdlYktpdFBvcnQuX19pbml0X18oc2VsZiwgZmlsZXN5c3RlbT10ZXN0X2Nv
bmZpZy5maWxlc3lzdGVtKQogICAgICAgICAgICAgc2VsZi5fcGxhdGZvcm1zX2J5X2RpcmVjdG9y
eSA9IGRpY3QoCi0gICAgICAgICAgICAgICAgWyhzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aChw
KSwgcCkgZm9yIHAgaW4gcGxhdGZvcm1zXSkKKyAgICAgICAgICAgICAgICBbKHNlbGYuX3dlYmtp
dF9iYXNlbGluZV9wYXRoKHApLCBwKSBmb3IgcCBpbiB0ZXN0X2NvbmZpZy5wbGF0Zm9ybXNdKQog
CiAgICAgICAgIGRlZiBiYXNlbGluZV9zZWFyY2hfcGF0aChzZWxmKToKICAgICAgICAgICAgIHJl
dHVybiBzZWxmLl9wbGF0Zm9ybXNfYnlfZGlyZWN0b3J5LmtleXMoKQpAQCAtMTk2LDIwICsyOTMs
MjEgQEAgZGVmIF9nZXRfdGVzdF9iYXNlbGluZXModGVzdF9maWxlLCB0ZXN0X3BvcnQsIGxheW91
dF90ZXN0c19kaXJlY3RvcnksIHBsYXRmb3JtcywKICAgICAgICAgZGVmIHBsYXRmb3JtX2Zyb21f
ZGlyZWN0b3J5KHNlbGYsIGRpcmVjdG9yeSk6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcGxh
dGZvcm1zX2J5X2RpcmVjdG9yeVtkaXJlY3RvcnldCiAKLSAgICB0ZXN0X3BhdGggPSBmaWxlc3lz
dGVtLmpvaW4obGF5b3V0X3Rlc3RzX2RpcmVjdG9yeSwgdGVzdF9maWxlKQorICAgIHRlc3RfcGF0
aCA9IHRlc3RfY29uZmlnLmZpbGVzeXN0ZW0uam9pbigKKyAgICAgICAgdGVzdF9jb25maWcubGF5
b3V0X3Rlc3RzX2RpcmVjdG9yeSwgdGVzdF9maWxlKQogCiAgICAgYWxsX3BsYXRmb3Jtc19wb3J0
ID0gQWxsUGxhdGZvcm1zUG9ydCgpCiAKICAgICBhbGxfdGVzdF9iYXNlbGluZXMgPSB7fQogICAg
IGZvciBiYXNlbGluZV9leHRlbnNpb24gaW4gKCcudHh0JywgJy5jaGVja3N1bScsICcucG5nJyk6
Ci0gICAgICAgIHRlc3RfYmFzZWxpbmVzID0gdGVzdF9wb3J0LmV4cGVjdGVkX2Jhc2VsaW5lcygK
KyAgICAgICAgdGVzdF9iYXNlbGluZXMgPSB0ZXN0X2NvbmZpZy50ZXN0X3BvcnQuZXhwZWN0ZWRf
YmFzZWxpbmVzKAogICAgICAgICAgICAgdGVzdF9wYXRoLCBiYXNlbGluZV9leHRlbnNpb24pCiAg
ICAgICAgIGJhc2VsaW5lcyA9IGFsbF9wbGF0Zm9ybXNfcG9ydC5leHBlY3RlZF9iYXNlbGluZXMo
CiAgICAgICAgICAgICB0ZXN0X3BhdGgsIGJhc2VsaW5lX2V4dGVuc2lvbiwgYWxsX2Jhc2VsaW5l
cz1UcnVlKQogICAgICAgICBmb3IgcGxhdGZvcm1fZGlyZWN0b3J5LCBleHBlY3RlZF9maWxlbmFt
ZSBpbiBiYXNlbGluZXM6CiAgICAgICAgICAgICBpZiBub3QgcGxhdGZvcm1fZGlyZWN0b3J5Ogog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBpZiBwbGF0Zm9ybV9kaXJlY3Rv
cnkgPT0gbGF5b3V0X3Rlc3RzX2RpcmVjdG9yeToKKyAgICAgICAgICAgIGlmIHBsYXRmb3JtX2Rp
cmVjdG9yeSA9PSB0ZXN0X2NvbmZpZy5sYXlvdXRfdGVzdHNfZGlyZWN0b3J5OgogICAgICAgICAg
ICAgICAgIHBsYXRmb3JtID0gJ2Jhc2UnCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAg
ICAgIHBsYXRmb3JtID0gYWxsX3BsYXRmb3Jtc19wb3J0LnBsYXRmb3JtX2Zyb21fZGlyZWN0b3J5
KApAQCAtMjE4LDcgKzMxNiw3IEBAIGRlZiBfZ2V0X3Rlc3RfYmFzZWxpbmVzKHRlc3RfZmlsZSwg
dGVzdF9wb3J0LCBsYXlvdXRfdGVzdHNfZGlyZWN0b3J5LCBwbGF0Zm9ybXMsCiAgICAgICAgICAg
ICB3YXNfdXNlZF9mb3JfdGVzdCA9ICgKICAgICAgICAgICAgICAgICBwbGF0Zm9ybV9kaXJlY3Rv
cnksIGV4cGVjdGVkX2ZpbGVuYW1lKSBpbiB0ZXN0X2Jhc2VsaW5lcwogICAgICAgICAgICAgcGxh
dGZvcm1fYmFzZWxpbmVzW2Jhc2VsaW5lX2V4dGVuc2lvbl0gPSB3YXNfdXNlZF9mb3JfdGVzdAot
ICAgICAgICAKKwogICAgIHJldHVybiBhbGxfdGVzdF9iYXNlbGluZXMKIAogY2xhc3MgUmViYXNl
bGluZVNlcnZlcihBYnN0cmFjdERlY2xhcmF0aXZlQ29tbWFuZCk6CkBAIC0yNDcsMTMgKzM0NSwx
OSBAQCBjbGFzcyBSZWJhc2VsaW5lU2VydmVyKEFic3RyYWN0RGVjbGFyYXRpdmVDb21tYW5kKToK
ICAgICAgICAgbGF5b3V0X3Rlc3RzX2RpcmVjdG9yeSA9IHBvcnQubGF5b3V0X3Rlc3RzX2Rpcigp
CiAgICAgICAgIHBsYXRmb3JtcyA9IGZpbGVzeXN0ZW0ubGlzdGRpcigKICAgICAgICAgICAgIGZp
bGVzeXN0ZW0uam9pbihsYXlvdXRfdGVzdHNfZGlyZWN0b3J5LCAncGxhdGZvcm0nKSkKKyAgICAg
ICAgdGVzdF9jb25maWcgPSBUZXN0Q29uZmlnKAorICAgICAgICAgICAgcG9ydCwKKyAgICAgICAg
ICAgIGxheW91dF90ZXN0c19kaXJlY3RvcnksCisgICAgICAgICAgICByZXN1bHRzX2RpcmVjdG9y
eSwKKyAgICAgICAgICAgIHBsYXRmb3JtcywKKyAgICAgICAgICAgIGZpbGVzeXN0ZW0sCisgICAg
ICAgICAgICBzZWxmLl90b29sLnNjbSgpKQogCiAgICAgICAgIHByaW50ICdHYXRoZXJpbmcgY3Vy
cmVudCBiYXNlbGluZXMuLi4nCiAgICAgICAgIGZvciB0ZXN0X2ZpbGUsIHRlc3RfanNvbiBpbiBy
ZXN1bHRzX2pzb25bJ3Rlc3RzJ10uaXRlbXMoKToKICAgICAgICAgICAgIHRlc3RfanNvblsnc3Rh
dGUnXSA9IFNUQVRFX05FRURTX1JFQkFTRUxJTkUKICAgICAgICAgICAgIHRlc3RfcGF0aCA9IGZp
bGVzeXN0ZW0uam9pbihsYXlvdXRfdGVzdHNfZGlyZWN0b3J5LCB0ZXN0X2ZpbGUpCi0gICAgICAg
ICAgICB0ZXN0X2pzb25bJ2Jhc2VsaW5lcyddID0gX2dldF90ZXN0X2Jhc2VsaW5lcygKLSAgICAg
ICAgICAgICAgICB0ZXN0X2ZpbGUsIHBvcnQsIGxheW91dF90ZXN0c19kaXJlY3RvcnksIHBsYXRm
b3JtcywgZmlsZXN5c3RlbSkKKyAgICAgICAgICAgIHRlc3RfanNvblsnYmFzZWxpbmVzJ10gPSBf
Z2V0X3Rlc3RfYmFzZWxpbmVzKHRlc3RfZmlsZSwgdGVzdF9jb25maWcpCiAKICAgICAgICAgc2Vy
dmVyX3VybCA9ICJodHRwOi8vbG9jYWxob3N0OiVkLyIgJSBvcHRpb25zLmh0dHBkX3BvcnQKICAg
ICAgICAgcHJpbnQgIlN0YXJ0aW5nIHNlcnZlciBhdCAlcyIgJSBzZXJ2ZXJfdXJsCkBAIC0yNjUs
NyArMzY5LDcgQEAgY2xhc3MgUmViYXNlbGluZVNlcnZlcihBYnN0cmFjdERlY2xhcmF0aXZlQ29t
bWFuZCk6CiAKICAgICAgICAgaHR0cGQgPSBSZWJhc2VsaW5lSFRUUFNlcnZlcigKICAgICAgICAg
ICAgIGh0dHBkX3BvcnQ9b3B0aW9ucy5odHRwZF9wb3J0LAotICAgICAgICAgICAgcmVzdWx0c19k
aXJlY3Rvcnk9cmVzdWx0c19kaXJlY3RvcnksCisgICAgICAgICAgICB0ZXN0X2NvbmZpZz10ZXN0
X2NvbmZpZywKICAgICAgICAgICAgIHJlc3VsdHNfanNvbj1yZXN1bHRzX2pzb24sCiAgICAgICAg
ICAgICBwbGF0Zm9ybXNfanNvbj17CiAgICAgICAgICAgICAgICAgJ3BsYXRmb3Jtcyc6IHBsYXRm
b3JtcywKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21t
YW5kcy9yZWJhc2VsaW5lc2VydmVyX3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRweS90b29sL2NvbW1hbmRzL3JlYmFzZWxpbmVzZXJ2ZXJfdW5pdHRlc3QucHkKaW5kZXgg
YjM3ZGEzZDYxZTZhZGYyMmVmMWVjMTI4YWRjMmYzZWNjNGJlNGQ1My4uNWNmYjYyOWNmZTljYjVm
OGQ3YzAzMzY3NmJmM2IzMmU1YjBlYmM0NSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3JlYmFzZWxpbmVzZXJ2ZXJfdW5pdHRlc3QucHkKKysr
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3JlYmFzZWxpbmVz
ZXJ2ZXJfdW5pdHRlc3QucHkKQEAgLTMyLDYgKzMyLDExNCBAQCBmcm9tIHdlYmtpdHB5LmNvbW1v
bi5zeXN0ZW0gaW1wb3J0IGZpbGVzeXN0ZW1fbW9jawogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVz
dHMucG9ydCBpbXBvcnQgYmFzZQogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC53ZWJr
aXQgaW1wb3J0IFdlYktpdFBvcnQKIGZyb20gd2Via2l0cHkudG9vbC5jb21tYW5kcyBpbXBvcnQg
cmViYXNlbGluZXNlcnZlcgorZnJvbSB3ZWJraXRweS50b29sLm1vY2t0b29sIGltcG9ydCBNb2Nr
U0NNCisKKworY2xhc3MgUmViYXNlbGluZVRlc3RUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAg
ICBkZWYgdGVzdF90ZXh0X3JlYmFzZWxpbmUoc2VsZik6CisgICAgICAgIHNlbGYuX2Fzc2VydFJl
YmFzZWxpbmUoCisgICAgICAgICAgICB0ZXN0X2ZpbGVzPSgKKyAgICAgICAgICAgICAgICAnZmFz
dC90ZXh0LWV4cGVjdGVkLnR4dCcsCisgICAgICAgICAgICAgICAgJ3BsYXRmb3JtL21hYy9mYXN0
L3RleHQtZXhwZWN0ZWQudHh0JywKKyAgICAgICAgICAgICksCisgICAgICAgICAgICByZXN1bHRz
X2ZpbGVzPSgKKyAgICAgICAgICAgICAgICAnZmFzdC90ZXh0LWFjdHVhbC50eHQnLAorICAgICAg
ICAgICAgKSwKKyAgICAgICAgICAgIHRlc3RfbmFtZT0nZmFzdC90ZXh0Lmh0bWwnLAorICAgICAg
ICAgICAgYmFzZWxpbmVfdGFyZ2V0PSdtYWMnLAorICAgICAgICAgICAgYmFzZWxpbmVfbW92ZV90
bz0nbm9uZScsCisgICAgICAgICAgICBleHBlY3RlZF9zdWNjZXNzPVRydWUsCisgICAgICAgICAg
ICBleHBlY3RlZF9sb2c9WworICAgICAgICAgICAgICAgICdSZWJhc2VsaW5pbmcgZmFzdC90ZXh0
Li4uJywKKyAgICAgICAgICAgICAgICAnICBVcGRhdGluZyBiYXNlbGluZXMgZm9yIG1hYycsCisg
ICAgICAgICAgICAgICAgJyAgICBVcGRhdGVkIHRleHQtZXhwZWN0ZWQudHh0JywKKyAgICAgICAg
ICAgIF0pCisKKyAgICBkZWYgdGVzdF90ZXh0X3JlYmFzZWxpbmVfbW92ZV9ub19vcChzZWxmKToK
KyAgICAgICAgc2VsZi5fYXNzZXJ0UmViYXNlbGluZSgKKyAgICAgICAgICAgIHRlc3RfZmlsZXM9
KAorICAgICAgICAgICAgICAgICdmYXN0L3RleHQtZXhwZWN0ZWQudHh0JywKKyAgICAgICAgICAg
ICAgICAncGxhdGZvcm0vd2luL2Zhc3QvdGV4dC1leHBlY3RlZC50eHQnLAorICAgICAgICAgICAg
KSwKKyAgICAgICAgICAgIHJlc3VsdHNfZmlsZXM9KAorICAgICAgICAgICAgICAgICdmYXN0L3Rl
eHQtYWN0dWFsLnR4dCcsCisgICAgICAgICAgICApLAorICAgICAgICAgICAgdGVzdF9uYW1lPSdm
YXN0L3RleHQuaHRtbCcsCisgICAgICAgICAgICBiYXNlbGluZV90YXJnZXQ9J21hYycsCisgICAg
ICAgICAgICBiYXNlbGluZV9tb3ZlX3RvPSdtYWMtbGVvcGFyZCcsCisgICAgICAgICAgICBleHBl
Y3RlZF9zdWNjZXNzPVRydWUsCisgICAgICAgICAgICBleHBlY3RlZF9sb2c9WworICAgICAgICAg
ICAgICAgICdSZWJhc2VsaW5pbmcgZmFzdC90ZXh0Li4uJywKKyAgICAgICAgICAgICAgICAnICBV
cGRhdGluZyBiYXNlbGluZXMgZm9yIG1hYycsCisgICAgICAgICAgICAgICAgJyAgICBVcGRhdGVk
IHRleHQtZXhwZWN0ZWQudHh0JywKKyAgICAgICAgICAgIF0pCisKKyAgICBkZWYgdGVzdF90ZXh0
X3JlYmFzZWxpbmVfbW92ZShzZWxmKToKKyAgICAgICAgc2VsZi5fYXNzZXJ0UmViYXNlbGluZSgK
KyAgICAgICAgICAgIHRlc3RfZmlsZXM9KAorICAgICAgICAgICAgICAgICdmYXN0L3RleHQtZXhw
ZWN0ZWQudHh0JywKKyAgICAgICAgICAgICAgICAncGxhdGZvcm0vbWFjL2Zhc3QvdGV4dC1leHBl
Y3RlZC50eHQnLAorICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIHJlc3VsdHNfZmlsZXM9KAor
ICAgICAgICAgICAgICAgICdmYXN0L3RleHQtYWN0dWFsLnR4dCcsCisgICAgICAgICAgICApLAor
ICAgICAgICAgICAgdGVzdF9uYW1lPSdmYXN0L3RleHQuaHRtbCcsCisgICAgICAgICAgICBiYXNl
bGluZV90YXJnZXQ9J21hYycsCisgICAgICAgICAgICBiYXNlbGluZV9tb3ZlX3RvPSdtYWMtbGVv
cGFyZCcsCisgICAgICAgICAgICBleHBlY3RlZF9zdWNjZXNzPUZhbHNlLAorICAgICAgICAgICAg
ZXhwZWN0ZWRfbG9nPVsKKyAgICAgICAgICAgICAgICAnUmViYXNlbGluaW5nIGZhc3QvdGV4dC4u
LicsCisgICAgICAgICAgICAgICAgJyAgTW92aW5nIGN1cnJlbnQgbWFjIGJhc2VsaW5lcyB0byBt
YWMtbGVvcGFyZCcsCisgICAgICAgICAgICAgICAgJyAgICBGSVhNRTogQWRkIHN1cHBvcnQgZm9y
IG1vdmluZyBleGlzdGluZyBiYXNlbGluZXMnLAorICAgICAgICAgICAgXSkKKworICAgIGRlZiB0
ZXN0X2ltYWdlX3JlYmFzZWxpbmUoc2VsZik6CisgICAgICAgIHNlbGYuX2Fzc2VydFJlYmFzZWxp
bmUoCisgICAgICAgICAgICB0ZXN0X2ZpbGVzPSgKKyAgICAgICAgICAgICAgICAnZmFzdC9pbWFn
ZS1leHBlY3RlZC50eHQnLAorICAgICAgICAgICAgICAgICdwbGF0Zm9ybS9tYWMvZmFzdC9pbWFn
ZS1leHBlY3RlZC5wbmcnLAorICAgICAgICAgICAgICAgICdwbGF0Zm9ybS9tYWMvZmFzdC9pbWFn
ZS1leHBlY3RlZC5jaGVja3N1bScsCisgICAgICAgICAgICApLAorICAgICAgICAgICAgcmVzdWx0
c19maWxlcz0oCisgICAgICAgICAgICAgICAgJ2Zhc3QvaW1hZ2UtYWN0dWFsLnBuZycsCisgICAg
ICAgICAgICAgICAgJ2Zhc3QvaW1hZ2UtYWN0dWFsLmNoZWNrc3VtJywKKyAgICAgICAgICAgICks
CisgICAgICAgICAgICB0ZXN0X25hbWU9J2Zhc3QvaW1hZ2UuaHRtbCcsCisgICAgICAgICAgICBi
YXNlbGluZV90YXJnZXQ9J21hYycsCisgICAgICAgICAgICBiYXNlbGluZV9tb3ZlX3RvPSdub25l
JywKKyAgICAgICAgICAgIGV4cGVjdGVkX3N1Y2Nlc3M9VHJ1ZSwKKyAgICAgICAgICAgIGV4cGVj
dGVkX2xvZz1bCisgICAgICAgICAgICAgICAgJ1JlYmFzZWxpbmluZyBmYXN0L2ltYWdlLi4uJywK
KyAgICAgICAgICAgICAgICAnICBVcGRhdGluZyBiYXNlbGluZXMgZm9yIG1hYycsCisgICAgICAg
ICAgICAgICAgJyAgICBVcGRhdGVkIGltYWdlLWV4cGVjdGVkLmNoZWNrc3VtJywKKyAgICAgICAg
ICAgICAgICAnICAgIFVwZGF0ZWQgaW1hZ2UtZXhwZWN0ZWQucG5nJywKKyAgICAgICAgICAgIF0p
CisKKyAgICBkZWYgX2Fzc2VydFJlYmFzZWxpbmUoc2VsZiwgdGVzdF9maWxlcywgcmVzdWx0c19m
aWxlcywgdGVzdF9uYW1lLCBiYXNlbGluZV90YXJnZXQsIGJhc2VsaW5lX21vdmVfdG8sIGV4cGVj
dGVkX3N1Y2Nlc3MsIGV4cGVjdGVkX2xvZyk6CisgICAgICAgIGxvZyA9IFtdCisgICAgICAgIHRl
c3RfY29uZmlnID0gZ2V0X3Rlc3RfY29uZmlnKHRlc3RfZmlsZXMsIHJlc3VsdHNfZmlsZXMpCisg
ICAgICAgIHN1Y2Nlc3MgPSByZWJhc2VsaW5lc2VydmVyLl9yZWJhc2VsaW5lX3Rlc3QoCisgICAg
ICAgICAgICB0ZXN0X25hbWUsCisgICAgICAgICAgICBiYXNlbGluZV90YXJnZXQsCisgICAgICAg
ICAgICBiYXNlbGluZV9tb3ZlX3RvLAorICAgICAgICAgICAgdGVzdF9jb25maWcsCisgICAgICAg
ICAgICBsb2c9bGFtYmRhIGw6IGxvZy5hcHBlbmQobCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoZXhwZWN0ZWRfbG9nLCBsb2cpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRf
c3VjY2Vzcywgc3VjY2VzcykKKworCitjbGFzcyBHZXRBY3R1YWxSZXN1bHRGaWxlc1Rlc3QodW5p
dHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICB0ZXN0X2NvbmZp
ZyA9IGdldF90ZXN0X2NvbmZpZyhyZXN1bHRfZmlsZXM9KAorICAgICAgICAgICAgJ2Zhc3QvdGV4
dC1hY3R1YWwudHh0JywKKyAgICAgICAgICAgICdmYXN0Mi90ZXh0LWFjdHVhbC50eHQnLAorICAg
ICAgICAgICAgJ2Zhc3QvdGV4dDItYWN0dWFsLnR4dCcsCisgICAgICAgICAgICAnZmFzdC90ZXh0
LW5vdGFjdHVhbC50eHQnLAorICAgICAgICApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAor
ICAgICAgICAgICAgKCd0ZXh0LWFjdHVhbC50eHQnLCksCisgICAgICAgICAgICByZWJhc2VsaW5l
c2VydmVyLl9nZXRfYWN0dWFsX3Jlc3VsdF9maWxlcygKKyAgICAgICAgICAgICAgICAnZmFzdC90
ZXh0Lmh0bWwnLCB0ZXN0X2NvbmZpZykpCiAKIAogY2xhc3MgR2V0QmFzZWxpbmVzVGVzdCh1bml0
dGVzdC5UZXN0Q2FzZSk6CkBAIC03OSwyMSArMTg3LDMxIEBAIGNsYXNzIEdldEJhc2VsaW5lc1Rl
c3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAgICAgZXhwZWN0ZWRfYmFzZWxpbmVzPXsn
YmFzZSc6IHsnLnR4dCc6IFRydWV9fSkKIAogICAgIGRlZiBfYXNzZXJ0QmFzZWxpbmVzKHNlbGYs
IHRlc3RfZmlsZXMsIHRlc3RfbmFtZSwgZXhwZWN0ZWRfYmFzZWxpbmVzKToKLSAgICAgICAgbGF5
b3V0X3Rlc3RzX2RpcmVjdG9yeSA9IGJhc2UuUG9ydCgpLmxheW91dF90ZXN0c19kaXIoKQotICAg
ICAgICBtb2NrX2ZpbGVzeXN0ZW0gPSBmaWxlc3lzdGVtX21vY2suTW9ja0ZpbGVTeXN0ZW0oKQot
ICAgICAgICBmb3IgZmlsZSBpbiB0ZXN0X2ZpbGVzICsgKHRlc3RfbmFtZSwpOgotICAgICAgICAg
ICAgZmlsZV9wYXRoID0gbW9ja19maWxlc3lzdGVtLmpvaW4obGF5b3V0X3Rlc3RzX2RpcmVjdG9y
eSwgZmlsZSkKLSAgICAgICAgICAgIG1vY2tfZmlsZXN5c3RlbS5maWxlc1tmaWxlX3BhdGhdID0g
JycKLQotICAgICAgICBjbGFzcyBUZXN0TWFjUG9ydChXZWJLaXRQb3J0KToKLSAgICAgICAgICAg
IGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgICAgICAgICBXZWJLaXRQb3J0Ll9faW5pdF9f
KHNlbGYsIGZpbGVzeXN0ZW09bW9ja19maWxlc3lzdGVtKQotICAgICAgICAgICAgICAgIHNlbGYu
X25hbWUgPSAnbWFjJwotCiAgICAgICAgIGFjdHVhbF9iYXNlbGluZXMgPSByZWJhc2VsaW5lc2Vy
dmVyLl9nZXRfdGVzdF9iYXNlbGluZXMoCi0gICAgICAgICAgICB0ZXN0X25hbWUsCi0gICAgICAg
ICAgICBUZXN0TWFjUG9ydCgpLAotICAgICAgICAgICAgbGF5b3V0X3Rlc3RzX2RpcmVjdG9yeSwK
LSAgICAgICAgICAgICgnbWFjJywgJ3dpbicsICdsaW51eCcpLAotICAgICAgICAgICAgbW9ja19m
aWxlc3lzdGVtKQorICAgICAgICAgICAgdGVzdF9uYW1lLCBnZXRfdGVzdF9jb25maWcodGVzdF9m
aWxlcykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfYmFzZWxpbmVzLCBhY3R1
YWxfYmFzZWxpbmVzKQorCisKK2RlZiBnZXRfdGVzdF9jb25maWcodGVzdF9maWxlcz1bXSwgcmVz
dWx0X2ZpbGVzPVtdKToKKyAgICBsYXlvdXRfdGVzdHNfZGlyZWN0b3J5ID0gYmFzZS5Qb3J0KCku
bGF5b3V0X3Rlc3RzX2RpcigpCisgICAgcmVzdWx0c19kaXJlY3RvcnkgPSAnL1dlYktpdEJ1aWxk
L0RlYnVnL2xheW91dC10ZXN0LXJlc3VsdHMnCisgICAgbW9ja19maWxlc3lzdGVtID0gZmlsZXN5
c3RlbV9tb2NrLk1vY2tGaWxlU3lzdGVtKCkKKyAgICBmb3IgZmlsZSBpbiB0ZXN0X2ZpbGVzOgor
ICAgICAgICBmaWxlX3BhdGggPSBtb2NrX2ZpbGVzeXN0ZW0uam9pbihsYXlvdXRfdGVzdHNfZGly
ZWN0b3J5LCBmaWxlKQorICAgICAgICBtb2NrX2ZpbGVzeXN0ZW0uZmlsZXNbZmlsZV9wYXRoXSA9
ICcnCisgICAgZm9yIGZpbGUgaW4gcmVzdWx0X2ZpbGVzOgorICAgICAgICBmaWxlX3BhdGggPSBt
b2NrX2ZpbGVzeXN0ZW0uam9pbihyZXN1bHRzX2RpcmVjdG9yeSwgZmlsZSkKKyAgICAgICAgbW9j
a19maWxlc3lzdGVtLmZpbGVzW2ZpbGVfcGF0aF0gPSAnJworCisgICAgY2xhc3MgVGVzdE1hY1Bv
cnQoV2ViS2l0UG9ydCk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAg
IFdlYktpdFBvcnQuX19pbml0X18oc2VsZiwgZmlsZXN5c3RlbT1tb2NrX2ZpbGVzeXN0ZW0pCisg
ICAgICAgICAgICBzZWxmLl9uYW1lID0gJ21hYycKKworICAgIHJldHVybiByZWJhc2VsaW5lc2Vy
dmVyLlRlc3RDb25maWcoCisgICAgICAgIFRlc3RNYWNQb3J0KCksCisgICAgICAgIGxheW91dF90
ZXN0c19kaXJlY3RvcnksCisgICAgICAgIHJlc3VsdHNfZGlyZWN0b3J5LAorICAgICAgICAoJ21h
YycsICd3aW4nLCAnbGludXgnKSwKKyAgICAgICAgbW9ja19maWxlc3lzdGVtLAorICAgICAgICBN
b2NrU0NNKCkpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wv
bW9ja3Rvb2wucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvbW9ja3Rvb2wu
cHkKaW5kZXggNzE5ZjliMWJiYzgyMzU1NjlkODUxZThmMjQyMTZkOGZjMzQ0MmU5ZS4uMDA0MGIx
ZjY5MTQ0MmFkMjBkZjcyMjNiNjg2N2RjNjg0NDU0ZTE0ZCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9v
bHMvU2NyaXB0cy93ZWJraXRweS90b29sL21vY2t0b29sLnB5CisrKyBiL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdG9vbC9tb2NrdG9vbC5weQpAQCAtNDQ5LDYgKzQ0OSwxMCBAQCBjbGFz
cyBNb2NrU0NNKE1vY2spOgogICAgIGRlZiBzdm5fcmV2aXNpb25fZnJvbV9jb21taXRfdGV4dChz
ZWxmLCBjb21taXRfdGV4dCk6CiAgICAgICAgIHJldHVybiAiNDk4MjQiCiAKKyAgICBkZWYgYWRk
KHNlbGYsIGRlc3RpbmF0aW9uX3BhdGgsIHJldHVybl9leGl0X2NvZGU9RmFsc2UpOgorICAgICAg
ICBpZiByZXR1cm5fZXhpdF9jb2RlOgorICAgICAgICAgICAgcmV0dXJuIDAKKwogCiBjbGFzcyBN
b2NrQ2hlY2tvdXQob2JqZWN0KToKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75340</attachid>
            <date>2010-12-01 17:52:16 -0800</date>
            <delta_ts>2010-12-02 10:35:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-50305-20101201175215.patch</filename>
            <type>text/plain</type>
            <size>23242</size>
            <attacher name="Mihai Parparita">mihaip</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBkYjQ0N2EwNmU0YTNlMjg4Mzg0MjU4ZGFlZWIwMDM1Y2ZkNzY4M2I5Li5lY2E1MjQy
YjY5NWQxZDU5NWM4YTBjZDE2MDljMDZiOGQ2NjIzM2E3IDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzEgQEAK
KzIwMTAtMTEtMzAgIE1paGFpIFBhcnBhcml0YSAgPG1paGFpcEBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmViYXNlbGluZSBz
ZXJ2ZXI6IGFkZCB1cGRhdGluZyBvZiBiYXNlbGluZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwMzA1CisgICAgICAgIAorICAgICAgICBJbXBsZW1l
bnRzIHVwZGF0aW5nIG9mIGJhc2VsaW5lcywgd2hlcmUgd2UgY29weSAtYWN0dWFsLiogZmlsZXMg
b3ZlcgorICAgICAgICB0aGUgY3VycmVudCAtZXhwZWN0ZWQuKiBmaWxlcy4gVG8gZG8gdGhpcywg
d2UgbmVlZCBhCisgICAgICAgIF9nZXRfYWN0dWFsX3Jlc3VsdF9maWxlcyBtZXRob2QgdG8gZ2V0
IHRlc3QgcmVzdWx0cyBmaWxlcyBhbmQgYQorICAgICAgICBfcmViYXNlbGluZV90ZXN0IG1ldGhv
ZCB0byBhY3R1YWxseSBkbyB0aGUgZmlsZSBjb3B5IGFuZCBTQ00gb3BlcmF0aW9uLgorICAgICAg
ICBfcmViYXNlbGluZV90ZXN0IGxvZ3Mgb3V0cHV0IGludG8gYSBidWZmZXIsIHRoaXMgaXMgdXNl
ZnVsIGZvciBib3RoCisgICAgICAgIHNob3dpbmcgcmVzdWx0IGluIHRoZSBVSSBhbmQgZm9yIHVu
aXQgdGVzdHMuCisgICAgICAgIAorICAgICAgICBUbyBtYWtlIHBhc3NpbmcgYXJvdW5kIG9mIHRo
ZSB2YXJpb3VzIHRlc3QgZW52aXJvbm1lbnQgcHJvcGVydGllcworICAgICAgICAocmVzdWx0cyBk
aXJlY3RvcnksIGZpbGVzeXN0ZW0sIFNDTSwgZXRjKSBlYXNpZXIsIGFkZCBhIFRlc3RDb25maWcK
KyAgICAgICAgY2xhc3MgZm9yIHRoZW0uCisgICAgICAgIAorICAgICAgICBNb3Zpbmcgb2YgZXhp
c3RpbmcgYmFzZWxpbmVzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQsIHRoaXMgcGF0Y2ggaXMgYmln
CisgICAgICAgIGVub3VnaCBhcyBpdCBpcy4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3N5c3RlbS9maWxlc3lzdGVtLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3N5c3RlbS9maWxlc3lzdGVtX21vY2sucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS90b29sL2NvbW1hbmRzL2RhdGEvcmViYXNlbGluZXNlcnZlci9xdWV1ZS5qczoKKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcmViYXNlbGluZXNlcnZlci5weToK
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcmViYXNlbGluZXNlcnZl
cl91bml0dGVzdC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvbW9ja3Rvb2wu
cHk6CisKIDIwMTAtMTItMDEgIE1paGFpIFBhcnBhcml0YSAgPG1paGFpcEBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KZGlmZiAtLWdpdCBhL1dlYktpdFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxlc3lzdGVtLnB5IGIvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW0ucHkKaW5kZXgg
YzdlZmRlM2E0MjRjYTQyNjhlMTYwYWUzZDVhMzI2MThjNjRmYzIzYi4uYzdiYmIzOGEyZjY5Y2Jk
OTc1M2ZiMmFlNjc5OTJkYmZiNzFmZmU3OCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW0ucHkKKysrIGIvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW0ucHkKQEAgLTMzLDYgKzMz
LDcgQEAgZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAogaW1wb3J0IGNvZGVj
cwogaW1wb3J0IGVycm5vCiBpbXBvcnQgb3MKK2ltcG9ydCBzaHV0aWwKIGltcG9ydCB0ZW1wZmls
ZQogCiAKQEAgLTExNSwzICsxMTYsOCBAQCBjbGFzcyBGaWxlU3lzdGVtKG9iamVjdCk6CiAgICAg
ICAgIFRoZSBmaWxlIGlzIHdyaXR0ZW4gZW5jb2RlZCBhcyBVVEYtOCB3aXRoIG5vIEJPTS4iIiIK
ICAgICAgICAgd2l0aCBjb2RlY3Mub3BlbihwYXRoLCAndycsICd1dGY4JykgYXMgZjoKICAgICAg
ICAgICAgIGYud3JpdGUoY29udGVudHMpCisKKyAgICBkZWYgY29weWZpbGUoc2VsZiwgc291cmNl
LCBkZXN0aW5hdGlvbik6CisgICAgICAgICIiIkNvcGllcyB0aGUgY29udGVudHMgb2YgdGhlIGZp
bGUgYXQgdGhlIGdpdmVuIHBhdGggdG8gdGhlIGRlc3RpbmF0aW9uCisgICAgICAgIHBhdGguIiIi
CisgICAgICAgIHNodXRpbC5jb3B5ZmlsZShzb3VyY2UsIGRlc3RpbmF0aW9uKQpkaWZmIC0tZ2l0
IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW1f
bW9jay5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9maWxl
c3lzdGVtX21vY2sucHkKaW5kZXggMmRiYzFlOGNjY2VkM2FlYWQ2MDBhMmFjM2YzYTFiMTZkYTMx
ODYzMy4uMGE1ZGU5MDc4MzA4MTlkYzA5ZjkyMmQwZjJmNWZmOWUyZTAzZTc1OCAxMDA2NDQKLS0t
IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2ZpbGVzeXN0ZW1f
bW9jay5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0v
ZmlsZXN5c3RlbV9tb2NrLnB5CkBAIC0zMiw3ICszMiw3IEBAIGltcG9ydCBwYXRoCiAKIAogY2xh
c3MgTW9ja0ZpbGVTeXN0ZW0ob2JqZWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZXM9
e30pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlcz1Ob25lKToKICAgICAgICAgIiIiSW5p
dGlhbGl6ZXMgYSAibW9jayIgZmlsZXN5c3RlbSB0aGF0IGNhbiBiZSB1c2VkIHRvIGNvbXBsZXRl
bHkKICAgICAgICAgc3R1YiBvdXQgYSBmaWxlc3lzdGVtLgogCkBAIC00MSw3ICs0MSw3IEBAIGNs
YXNzIE1vY2tGaWxlU3lzdGVtKG9iamVjdCk6CiAgICAgICAgICAgICAgICAgdmFsdWUgb2YgTm9u
ZSBpcyB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlIGZpbGUgc2hvdWxkCiAgICAgICAgICAgICAg
ICAgbm90IGV4aXN0LgogICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5maWxlcyA9IGZpbGVzCisg
ICAgICAgIHNlbGYuZmlsZXMgPSBmaWxlcyBvciB7fQogCiAgICAgZGVmIGV4aXN0cyhzZWxmLCBw
YXRoKToKICAgICAgICAgaWYgcGF0aCBpbiBzZWxmLmZpbGVzOgpAQCAtNTEsNiArNTEsMjMgQEAg
Y2xhc3MgTW9ja0ZpbGVTeXN0ZW0ob2JqZWN0KToKICAgICBkZWYgam9pbihzZWxmLCAqY29tcHMp
OgogICAgICAgICByZXR1cm4gJy8nLmpvaW4oY29tcHMpCiAKKyAgICBkZWYgbGlzdGRpcihzZWxm
LCBwYXRoKToKKyAgICAgICAgaWYgbm90IHBhdGguZW5kc3dpdGgoJy8nKToKKyAgICAgICAgICAg
IHBhdGggKz0gJy8nCisKKyAgICAgICAgZGlycyA9IFtdCisgICAgICAgIGZpbGVzID0gW10KKyAg
ICAgICAgZm9yIGYgaW4gc2VsZi5maWxlczoKKyAgICAgICAgICAgIGlmIHNlbGYuZXhpc3RzKGYp
IGFuZCBmLnN0YXJ0c3dpdGgocGF0aCk6CisgICAgICAgICAgICAgICAgcmVtYWluaW5nID0gZlts
ZW4ocGF0aCk6XQorICAgICAgICAgICAgICAgIGlmICcvJyBpbiByZW1haW5pbmc6CisgICAgICAg
ICAgICAgICAgICAgIGRpciA9IHJlbWFpbmluZ1s6cmVtYWluaW5nLmluZGV4KCcvJyldCisgICAg
ICAgICAgICAgICAgICAgIGlmIG5vdCBkaXIgaW4gZGlyczoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRpcnMuYXBwZW5kKGRpcikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAg
ICAgICAgICBmaWxlcy5hcHBlbmQocmVtYWluaW5nKQorICAgICAgICByZXR1cm4gZGlycyArIGZp
bGVzCisKICAgICBkZWYgbWF5YmVfbWFrZV9kaXJlY3Rvcnkoc2VsZiwgKnBhdGgpOgogICAgICAg
ICAjIEZJWE1FOiBJbXBsZW1lbnQgc3VjaCB0aGF0IHN1YnNlcXVlbnQgY2FsbHMgdG8gaXNkaXIo
KSB3b3JrPwogICAgICAgICBwYXNzCkBAIC02OSwzICs4Niw4IEBAIGNsYXNzIE1vY2tGaWxlU3lz
dGVtKG9iamVjdCk6CiAKICAgICBkZWYgd3JpdGVfYmluYXJ5X2ZpbGUoc2VsZiwgcGF0aCwgY29u
dGVudHMpOgogICAgICAgICBzZWxmLmZpbGVzW3BhdGhdID0gY29udGVudHMKKworICAgIGRlZiBj
b3B5ZmlsZShzZWxmLCBzb3VyY2UsIGRlc3RpbmF0aW9uKToKKyAgICAgICAgaWYgbm90IHNlbGYu
ZXhpc3RzKHNvdXJjZSk6CisgICAgICAgICAgICByYWlzZSBJT0Vycm9yKGVycm5vLkVOT0VOVCwg
c291cmNlLCBvcy5zdHJlcnJvcihlcnJuby5FTk9FTlQpKQorICAgICAgICBzZWxmLmZpbGVzW2Rl
c3RpbmF0aW9uXSA9IHNlbGYuZmlsZXNbc291cmNlXQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2RhdGEvcmViYXNlbGluZXNlcnZlci9xdWV1
ZS5qcyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9kYXRhL3Jl
YmFzZWxpbmVzZXJ2ZXIvcXVldWUuanMKaW5kZXggZjU3YzkxOTU5OWUyNzgwMGI4OThjZDkzZjdj
Y2FjOGE4ODc2OWQ5OS4uNGMwOTRmYzZmMjkzY2EwMDVjZjRkOGIyMmQwYTk1NmJhZTFkMjFkNiAx
MDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2Rh
dGEvcmViYXNlbGluZXNlcnZlci9xdWV1ZS5qcworKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L3Rvb2wvY29tbWFuZHMvZGF0YS9yZWJhc2VsaW5lc2VydmVyL3F1ZXVlLmpzCkBAIC0x
NDYsMTMgKzE0NiwzNiBAQCBSZWJhc2VsaW5lUXVldWUucHJvdG90eXBlLl9yZWJhc2VsaW5lVGVz
dCA9IGZ1bmN0aW9uKHRlc3ROYW1lKQogICAgIHZhciBiYXNlbGluZVRhcmdldCA9IGdldFNlbGVj
dFZhbHVlKCdiYXNlbGluZS10YXJnZXQnKTsKICAgICB2YXIgYmFzZWxpbmVNb3ZlVG8gPSBnZXRT
ZWxlY3RWYWx1ZSgnYmFzZWxpbmUtbW92ZS10bycpOwogCi0gICAgLy8gRklYTUU6IGFjdHVhbGx5
IHJlYmFzZWxpbmUKLSAgICBsb2coJ1JlYmFzZWxpbmluZyAnICsgdGVzdE5hbWUgKyAnIGZvciBw
bGF0Zm9ybSAnICsgYmFzZWxpbmVUYXJnZXQgKyAnLi4uJyk7Ci0gICAgdmFyIHRlc3QgPSByZXN1
bHRzLnRlc3RzW3Rlc3ROYW1lXTsKLSAgICB0aGlzLl9yZW1vdmVUZXN0KHRlc3ROYW1lKTsKLSAg
ICB0aGlzLl9pblByb2dyZXNzUmViYXNlbGluZUNvdW50LS07Ci0gICAgdGVzdC5zdGF0ZSA9IFNU
QVRFX1JFQkFTRUxJTkVfU1VDQ0VFREVEOwotICAgIHVwZGF0ZVN0YXRlKCk7Ci0gICAgbG9nKCdS
ZWJhc2VsaW5lZCBhZGQgdGVzdCB3aXRoIHN0YXRlICcgKyB0ZXN0LnN0YXRlICsgJyB0byBxdWV1
ZScsCi0gICAgICAgIGxvZy5TVUNDRVNTKTsKKyAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1
ZXN0KCk7CisgICAgeGhyLm9wZW4oJ1BPU1QnLAorICAgICAgICAnL3JlYmFzZWxpbmU/dGVzdD0n
ICsgZW5jb2RlVVJJQ29tcG9uZW50KHRlc3ROYW1lKSArCisgICAgICAgICcmYmFzZWxpbmUtdGFy
Z2V0PScgKyBlbmNvZGVVUklDb21wb25lbnQoYmFzZWxpbmVUYXJnZXQpICsKKyAgICAgICAgJyZi
YXNlbGluZS1tb3ZlLXRvPScgKyBlbmNvZGVVUklDb21wb25lbnQoYmFzZWxpbmVNb3ZlVG8pKTsK
KworICAgIHZhciBzZWxmID0gdGhpczsKKyAgICBmdW5jdGlvbiBoYW5kbGVSZXNwb25zZShsb2dU
eXBlLCBuZXdTdGF0ZSkgeworICAgICAgICBsb2coeGhyLnJlc3BvbnNlVGV4dCwgbG9nVHlwZSk7
CisgICAgICAgIHNlbGYuX3JlbW92ZVRlc3QodGVzdE5hbWUpOworICAgICAgICBzZWxmLl9pblBy
b2dyZXNzUmViYXNlbGluZUNvdW50LS07CisgICAgICAgIHJlc3VsdHMudGVzdHNbdGVzdE5hbWVd
LnN0YXRlID0gbmV3U3RhdGU7CisgICAgICAgIHVwZGF0ZVN0YXRlKCk7CisgICAgfQorCisgICAg
ZnVuY3Rpb24gaGFuZGxlU3VjY2VzcygpIHsKKyAgICAgICAgaGFuZGxlUmVzcG9uc2UobG9nLlNV
Q0NFU1MsIFNUQVRFX1JFQkFTRUxJTkVfU1VDQ0VFREVEKTsKKyAgICB9CisgICAgZnVuY3Rpb24g
aGFuZGxlRmFpbHVyZSgpIHsKKyAgICAgICAgaGFuZGxlUmVzcG9uc2UobG9nLkVSUk9SLCBTVEFU
RV9SRUJBU0VMSU5FX0ZBSUxFRCk7CisgICAgfQorCisgICAgeGhyLmFkZEV2ZW50TGlzdGVuZXIo
J2xvYWQnLCBmdW5jdGlvbigpIHsKKyAgICAgIGlmICh4aHIuc3RhdHVzIDwgNDAwKSB7CisgICAg
ICAgICAgaGFuZGxlU3VjY2VzcygpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBoYW5kbGVG
YWlsdXJlKCk7CisgICAgICB9CisgICAgfSk7CisgICAgeGhyLmFkZEV2ZW50TGlzdGVuZXIoJ2Vy
cm9yJywgaGFuZGxlRmFpbHVyZSk7CisKKyAgICB4aHIuc2VuZCgpOwogfTsKZGlmZiAtLWdpdCBh
L1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9yZWJhc2VsaW5lc2Vy
dmVyLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3JlYmFz
ZWxpbmVzZXJ2ZXIucHkKaW5kZXggMmRjYzU2NmI0OGM1YTEzYmJiZWFkNTdiNzMxOGViZTg1YTEx
YmY1YS4uZDBkYjliYzA1MWM5ZTBkOGYxYTBjNTg5NDgxNTBlZmM1MTI5OTU1NyAxMDA2NDQKLS0t
IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3JlYmFzZWxpbmVz
ZXJ2ZXIucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRz
L3JlYmFzZWxpbmVzZXJ2ZXIucHkKQEAgLTMzLDYgKzMzLDcgQEAgZnJvbSBfX2Z1dHVyZV9fIGlt
cG9ydCB3aXRoX3N0YXRlbWVudAogCiBpbXBvcnQgY29kZWNzCiBpbXBvcnQgZGF0ZXRpbWUKK2lt
cG9ydCBmbm1hdGNoCiBpbXBvcnQgbWltZXR5cGVzCiBpbXBvcnQgb3MKIGltcG9ydCBvcy5wYXRo
CkBAIC01Niw5ICs1Nyw5IEBAIFNUQVRFX1JFQkFTRUxJTkVfRkFJTEVEID0gJ3JlYmFzZWxpbmVf
ZmFpbGVkJwogU1RBVEVfUkVCQVNFTElORV9TVUNDRUVERUQgPSAncmViYXNlbGluZV9zdWNjZWVk
ZWQnCiAKIGNsYXNzIFJlYmFzZWxpbmVIVFRQU2VydmVyKEJhc2VIVFRQU2VydmVyLkhUVFBTZXJ2
ZXIpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBodHRwZF9wb3J0LCByZXN1bHRzX2RpcmVjdG9y
eSwgcmVzdWx0c19qc29uLCBwbGF0Zm9ybXNfanNvbik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IGh0dHBkX3BvcnQsIHRlc3RfY29uZmlnLCByZXN1bHRzX2pzb24sIHBsYXRmb3Jtc19qc29uKToK
ICAgICAgICAgQmFzZUhUVFBTZXJ2ZXIuSFRUUFNlcnZlci5fX2luaXRfXyhzZWxmLCAoIiIsIGh0
dHBkX3BvcnQpLCBSZWJhc2VsaW5lSFRUUFJlcXVlc3RIYW5kbGVyKQotICAgICAgICBzZWxmLnJl
c3VsdHNfZGlyZWN0b3J5ID0gcmVzdWx0c19kaXJlY3RvcnkKKyAgICAgICAgc2VsZi50ZXN0X2Nv
bmZpZyA9IHRlc3RfY29uZmlnCiAgICAgICAgIHNlbGYucmVzdWx0c19qc29uID0gcmVzdWx0c19q
c29uCiAgICAgICAgIHNlbGYucGxhdGZvcm1zX2pzb24gPSBwbGF0Zm9ybXNfanNvbgogCkBAIC0x
MTMsNiArMTE0LDM2IEBAIGNsYXNzIFJlYmFzZWxpbmVIVFRQUmVxdWVzdEhhbmRsZXIoQmFzZUhU
VFBTZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlcik6CiAgICAgICAgIHNlbGYuX3NlcnZlX2Zp
bGUob3MucGF0aC5qb2luKAogICAgICAgICAgICAgUmViYXNlbGluZUhUVFBSZXF1ZXN0SGFuZGxl
ci5TVEFUSUNfRklMRV9ESVJFQ1RPUlksIHN0YXRpY19wYXRoKSkKIAorICAgIGRlZiByZWJhc2Vs
aW5lKHNlbGYpOgorICAgICAgICB0ZXN0ID0gc2VsZi5xdWVyeVsndGVzdCddWzBdCisgICAgICAg
IGJhc2VsaW5lX3RhcmdldCA9IHNlbGYucXVlcnlbJ2Jhc2VsaW5lLXRhcmdldCddWzBdCisgICAg
ICAgIGJhc2VsaW5lX21vdmVfdG8gPSBzZWxmLnF1ZXJ5WydiYXNlbGluZS1tb3ZlLXRvJ11bMF0K
KyAgICAgICAgdGVzdF9qc29uID0gc2VsZi5zZXJ2ZXIucmVzdWx0c19qc29uWyd0ZXN0cyddW3Rl
c3RdCisKKyAgICAgICAgaWYgdGVzdF9qc29uWydzdGF0ZSddICE9IFNUQVRFX05FRURTX1JFQkFT
RUxJTkU6CisgICAgICAgICAgICBzZWxmLnNlbmRfZXJyb3IoNDAwLCAiVGVzdCAlcyBpcyBpbiB1
bmV4cGVjdGVkIHN0YXRlOiAlcyIgJQorICAgICAgICAgICAgICAgICh0ZXN0LCB0ZXN0X2pzb25b
InN0YXRlIl0pKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgbG9nID0gW10KKyAgICAg
ICAgc3VjY2VzcyA9IF9yZWJhc2VsaW5lX3Rlc3QoCisgICAgICAgICAgICB0ZXN0LAorICAgICAg
ICAgICAgYmFzZWxpbmVfdGFyZ2V0LAorICAgICAgICAgICAgYmFzZWxpbmVfbW92ZV90bywKKyAg
ICAgICAgICAgIHNlbGYuc2VydmVyLnRlc3RfY29uZmlnLAorICAgICAgICAgICAgbG9nPWxhbWJk
YSBsOiBsb2cuYXBwZW5kKGwpKQorCisgICAgICAgIGlmIHN1Y2Nlc3M6CisgICAgICAgICAgICB0
ZXN0X2pzb25bJ3N0YXRlJ10gPSBTVEFURV9SRUJBU0VMSU5FX1NVQ0NFRURFRAorICAgICAgICAg
ICAgc2VsZi5zZW5kX3Jlc3BvbnNlKDIwMCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRl
c3RfanNvblsnc3RhdGUnXSA9IFNUQVRFX1JFQkFTRUxJTkVfRkFJTEVECisgICAgICAgICAgICBz
ZWxmLnNlbmRfcmVzcG9uc2UoNTAwKQorCisgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoJ0NvbnRl
bnQtdHlwZScsICd0ZXh0L3BsYWluJykKKyAgICAgICAgc2VsZi5lbmRfaGVhZGVycygpCisgICAg
ICAgIHNlbGYud2ZpbGUud3JpdGUoJ1xuJy5qb2luKGxvZykpCisKICAgICBkZWYgcXVpdHF1aXRx
dWl0KHNlbGYpOgogICAgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoMjAwKQogICAgICAgICBzZWxm
LnNlbmRfaGVhZGVyKCJDb250ZW50LXR5cGUiLCAidGV4dC9wbGFpbiIpCkBAIC0xNDMsNyArMTc0
LDcgQEAgY2xhc3MgUmViYXNlbGluZUhUVFBSZXF1ZXN0SGFuZGxlcihCYXNlSFRUUFNlcnZlci5C
YXNlSFRUUFJlcXVlc3RIYW5kbGVyKToKICAgICAgICAgZWxpZiBtb2RlID09ICdkaWZmLXRleHQn
OgogICAgICAgICAgICAgZmlsZV9uYW1lID0gdGVzdF9uYW1lICsgJy1kaWZmLnR4dCcKIAotICAg
ICAgICBmaWxlX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5zZXJ2ZXIucmVzdWx0c19kaXJlY3Rv
cnksIGZpbGVfbmFtZSkKKyAgICAgICAgZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuc2Vy
dmVyLnRlc3RfY29uZmlnLnJlc3VsdHNfZGlyZWN0b3J5LCBmaWxlX25hbWUpCiAKICAgICAgICAg
IyBMZXQgcmVzdWx0cyBiZSBjYWNoZWQgZm9yIDYwIHNlY29uZHMsIHNvIHRoYXQgdGhleSBjYW4g
YmUgcHJlLWZldGNoZWQKICAgICAgICAgIyBieSB0aGUgVUkKQEAgLTE4MywxMiArMjE0LDc5IEBA
IGNsYXNzIFJlYmFzZWxpbmVIVFRQUmVxdWVzdEhhbmRsZXIoQmFzZUhUVFBTZXJ2ZXIuQmFzZUhU
VFBSZXF1ZXN0SGFuZGxlcik6CiAgICAgICAgICAgICBzaHV0aWwuY29weWZpbGVvYmooc3RhdGlj
X2ZpbGUsIHNlbGYud2ZpbGUpCiAKIAotZGVmIF9nZXRfdGVzdF9iYXNlbGluZXModGVzdF9maWxl
LCB0ZXN0X3BvcnQsIGxheW91dF90ZXN0c19kaXJlY3RvcnksIHBsYXRmb3JtcywgZmlsZXN5c3Rl
bSk6CitjbGFzcyBUZXN0Q29uZmlnKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRl
c3RfcG9ydCwgbGF5b3V0X3Rlc3RzX2RpcmVjdG9yeSwgcmVzdWx0c19kaXJlY3RvcnksIHBsYXRm
b3JtcywgZmlsZXN5c3RlbSwgc2NtKToKKyAgICAgICAgc2VsZi50ZXN0X3BvcnQgPSB0ZXN0X3Bv
cnQKKyAgICAgICAgc2VsZi5sYXlvdXRfdGVzdHNfZGlyZWN0b3J5ID0gbGF5b3V0X3Rlc3RzX2Rp
cmVjdG9yeQorICAgICAgICBzZWxmLnJlc3VsdHNfZGlyZWN0b3J5ID0gcmVzdWx0c19kaXJlY3Rv
cnkKKyAgICAgICAgc2VsZi5wbGF0Zm9ybXMgPSBwbGF0Zm9ybXMKKyAgICAgICAgc2VsZi5maWxl
c3lzdGVtID0gZmlsZXN5c3RlbQorICAgICAgICBzZWxmLnNjbSA9IHNjbQorCisKK2RlZiBfZ2V0
X2FjdHVhbF9yZXN1bHRfZmlsZXModGVzdF9maWxlLCB0ZXN0X2NvbmZpZyk6CisgICAgdGVzdF9u
YW1lLCBfID0gb3MucGF0aC5zcGxpdGV4dCh0ZXN0X2ZpbGUpCisgICAgdGVzdF9kaXJlY3Rvcnkg
PSBvcy5wYXRoLmRpcm5hbWUodGVzdF9maWxlKQorCisgICAgdGVzdF9yZXN1bHRzX2RpcmVjdG9y
eSA9IHRlc3RfY29uZmlnLmZpbGVzeXN0ZW0uam9pbigKKyAgICAgICAgdGVzdF9jb25maWcucmVz
dWx0c19kaXJlY3RvcnksIHRlc3RfZGlyZWN0b3J5KQorICAgIGFjdHVhbF9wYXR0ZXJuID0gb3Mu
cGF0aC5iYXNlbmFtZSh0ZXN0X25hbWUpICsgJy1hY3R1YWwuKicKKyAgICBhY3R1YWxfZmlsZXMg
PSBbXQorICAgIGZvciBmaWxlbmFtZSBpbiB0ZXN0X2NvbmZpZy5maWxlc3lzdGVtLmxpc3RkaXIo
dGVzdF9yZXN1bHRzX2RpcmVjdG9yeSk6CisgICAgICAgIGlmIGZubWF0Y2guZm5tYXRjaChmaWxl
bmFtZSwgYWN0dWFsX3BhdHRlcm4pOgorICAgICAgICAgICAgYWN0dWFsX2ZpbGVzLmFwcGVuZChm
aWxlbmFtZSkKKyAgICBhY3R1YWxfZmlsZXMuc29ydCgpCisgICAgcmV0dXJuIHR1cGxlKGFjdHVh
bF9maWxlcykKKworCitkZWYgX3JlYmFzZWxpbmVfdGVzdCh0ZXN0X2ZpbGUsIGJhc2VsaW5lX3Rh
cmdldCwgYmFzZWxpbmVfbW92ZV90bywgdGVzdF9jb25maWcsIGxvZyk6CisgICAgdGVzdF9uYW1l
LCBfID0gb3MucGF0aC5zcGxpdGV4dCh0ZXN0X2ZpbGUpCisgICAgdGVzdF9kaXJlY3RvcnkgPSBv
cy5wYXRoLmRpcm5hbWUodGVzdF9uYW1lKQorCisgICAgbG9nKCdSZWJhc2VsaW5pbmcgJXMuLi4n
ICUgdGVzdF9uYW1lKQorCisgICAgYWN0dWFsX3Jlc3VsdF9maWxlcyA9IF9nZXRfYWN0dWFsX3Jl
c3VsdF9maWxlcyh0ZXN0X2ZpbGUsIHRlc3RfY29uZmlnKQorICAgIGZpbGVzeXN0ZW0gPSB0ZXN0
X2NvbmZpZy5maWxlc3lzdGVtCisgICAgc2NtID0gdGVzdF9jb25maWcuc2NtCisgICAgbGF5b3V0
X3Rlc3RzX2RpcmVjdG9yeSA9IHRlc3RfY29uZmlnLmxheW91dF90ZXN0c19kaXJlY3RvcnkKKyAg
ICByZXN1bHRzX2RpcmVjdG9yeSA9IHRlc3RfY29uZmlnLnJlc3VsdHNfZGlyZWN0b3J5CisgICAg
dGFyZ2V0X2V4cGVjdGF0aW9uc19kaXJlY3RvcnkgPSBmaWxlc3lzdGVtLmpvaW4oCisgICAgICAg
IGxheW91dF90ZXN0c19kaXJlY3RvcnksICdwbGF0Zm9ybScsIGJhc2VsaW5lX3RhcmdldCwgdGVz
dF9kaXJlY3RvcnkpCisgICAgdGVzdF9yZXN1bHRzX2RpcmVjdG9yeSA9IHRlc3RfY29uZmlnLmZp
bGVzeXN0ZW0uam9pbigKKyAgICAgICAgdGVzdF9jb25maWcucmVzdWx0c19kaXJlY3RvcnksIHRl
c3RfZGlyZWN0b3J5KQorCisgICAgIyBJZiByZXF1ZXN0ZWQsIG1vdmUgY3VycmVudCBiYXNlbGlu
ZXMgb3V0CisgICAgY3VycmVudF9iYXNlbGluZXMgPSBfZ2V0X3Rlc3RfYmFzZWxpbmVzKHRlc3Rf
ZmlsZSwgdGVzdF9jb25maWcpCisgICAgaWYgYmFzZWxpbmVfdGFyZ2V0IGluIGN1cnJlbnRfYmFz
ZWxpbmVzIGFuZCBiYXNlbGluZV9tb3ZlX3RvICE9ICdub25lJzoKKyAgICAgICAgbG9nKCcgIE1v
dmluZyBjdXJyZW50ICVzIGJhc2VsaW5lcyB0byAlcycgJQorICAgICAgICAgICAgKGJhc2VsaW5l
X3RhcmdldCwgYmFzZWxpbmVfbW92ZV90bykpCisgICAgICAgIGxvZygnICAgIEZJWE1FOiBBZGQg
c3VwcG9ydCBmb3IgbW92aW5nIGV4aXN0aW5nIGJhc2VsaW5lcycpCisgICAgICAgIHJldHVybiBG
YWxzZQorCisgICAgbG9nKCcgIFVwZGF0aW5nIGJhc2VsaW5lcyBmb3IgJXMnICUgYmFzZWxpbmVf
dGFyZ2V0KQorICAgIGZvciBzb3VyY2VfZmlsZSBpbiBhY3R1YWxfcmVzdWx0X2ZpbGVzOgorICAg
ICAgICBzb3VyY2VfcGF0aCA9IGZpbGVzeXN0ZW0uam9pbih0ZXN0X3Jlc3VsdHNfZGlyZWN0b3J5
LCBzb3VyY2VfZmlsZSkKKyAgICAgICAgZGVzdGluYXRpb25fZmlsZSA9IHNvdXJjZV9maWxlLnJl
cGxhY2UoJy1hY3R1YWwnLCAnLWV4cGVjdGVkJykKKyAgICAgICAgZGVzdGluYXRpb25fcGF0aCA9
IGZpbGVzeXN0ZW0uam9pbigKKyAgICAgICAgICAgIHRhcmdldF9leHBlY3RhdGlvbnNfZGlyZWN0
b3J5LCBkZXN0aW5hdGlvbl9maWxlKQorICAgICAgICBmaWxlc3lzdGVtLmNvcHlmaWxlKHNvdXJj
ZV9wYXRoLCBkZXN0aW5hdGlvbl9wYXRoKQorICAgICAgICBleGl0X2NvZGUgPSBzY20uYWRkKGRl
c3RpbmF0aW9uX3BhdGgsIHJldHVybl9leGl0X2NvZGU9VHJ1ZSkKKyAgICAgICAgaWYgZXhpdF9j
b2RlOgorICAgICAgICAgICAgbG9nKCcgICAgQ291bGQgbm90IHVwZGF0ZSAlcyBpbiBTQ00sIGV4
aXQgY29kZSAlZCcgJQorICAgICAgICAgICAgICAgIChkZXN0aW5hdGlvbl9maWxlLCBleGl0X2Nv
ZGUpKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICBsb2coJyAgICBVcGRhdGVkICVzJyAlIGRlc3RpbmF0aW9uX2ZpbGUpCisKKyAgICByZXR1cm4g
VHJ1ZQorCisKK2RlZiBfZ2V0X3Rlc3RfYmFzZWxpbmVzKHRlc3RfZmlsZSwgdGVzdF9jb25maWcp
OgogICAgIGNsYXNzIEFsbFBsYXRmb3Jtc1BvcnQoV2ViS2l0UG9ydCk6CiAgICAgICAgIGRlZiBf
X2luaXRfXyhzZWxmKToKLSAgICAgICAgICAgIFdlYktpdFBvcnQuX19pbml0X18oc2VsZiwgZmls
ZXN5c3RlbT1maWxlc3lzdGVtKQorICAgICAgICAgICAgV2ViS2l0UG9ydC5fX2luaXRfXyhzZWxm
LCBmaWxlc3lzdGVtPXRlc3RfY29uZmlnLmZpbGVzeXN0ZW0pCiAgICAgICAgICAgICBzZWxmLl9w
bGF0Zm9ybXNfYnlfZGlyZWN0b3J5ID0gZGljdCgKLSAgICAgICAgICAgICAgICBbKHNlbGYuX3dl
YmtpdF9iYXNlbGluZV9wYXRoKHApLCBwKSBmb3IgcCBpbiBwbGF0Zm9ybXNdKQorICAgICAgICAg
ICAgICAgIFsoc2VsZi5fd2Via2l0X2Jhc2VsaW5lX3BhdGgocCksIHApIGZvciBwIGluIHRlc3Rf
Y29uZmlnLnBsYXRmb3Jtc10pCiAKICAgICAgICAgZGVmIGJhc2VsaW5lX3NlYXJjaF9wYXRoKHNl
bGYpOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3BsYXRmb3Jtc19ieV9kaXJlY3Rvcnkua2V5
cygpCkBAIC0xOTYsMjAgKzI5NCwyMSBAQCBkZWYgX2dldF90ZXN0X2Jhc2VsaW5lcyh0ZXN0X2Zp
bGUsIHRlc3RfcG9ydCwgbGF5b3V0X3Rlc3RzX2RpcmVjdG9yeSwgcGxhdGZvcm1zLAogICAgICAg
ICBkZWYgcGxhdGZvcm1fZnJvbV9kaXJlY3Rvcnkoc2VsZiwgZGlyZWN0b3J5KToKICAgICAgICAg
ICAgIHJldHVybiBzZWxmLl9wbGF0Zm9ybXNfYnlfZGlyZWN0b3J5W2RpcmVjdG9yeV0KIAotICAg
IHRlc3RfcGF0aCA9IGZpbGVzeXN0ZW0uam9pbihsYXlvdXRfdGVzdHNfZGlyZWN0b3J5LCB0ZXN0
X2ZpbGUpCisgICAgdGVzdF9wYXRoID0gdGVzdF9jb25maWcuZmlsZXN5c3RlbS5qb2luKAorICAg
ICAgICB0ZXN0X2NvbmZpZy5sYXlvdXRfdGVzdHNfZGlyZWN0b3J5LCB0ZXN0X2ZpbGUpCiAKICAg
ICBhbGxfcGxhdGZvcm1zX3BvcnQgPSBBbGxQbGF0Zm9ybXNQb3J0KCkKIAogICAgIGFsbF90ZXN0
X2Jhc2VsaW5lcyA9IHt9CiAgICAgZm9yIGJhc2VsaW5lX2V4dGVuc2lvbiBpbiAoJy50eHQnLCAn
LmNoZWNrc3VtJywgJy5wbmcnKToKLSAgICAgICAgdGVzdF9iYXNlbGluZXMgPSB0ZXN0X3BvcnQu
ZXhwZWN0ZWRfYmFzZWxpbmVzKAorICAgICAgICB0ZXN0X2Jhc2VsaW5lcyA9IHRlc3RfY29uZmln
LnRlc3RfcG9ydC5leHBlY3RlZF9iYXNlbGluZXMoCiAgICAgICAgICAgICB0ZXN0X3BhdGgsIGJh
c2VsaW5lX2V4dGVuc2lvbikKICAgICAgICAgYmFzZWxpbmVzID0gYWxsX3BsYXRmb3Jtc19wb3J0
LmV4cGVjdGVkX2Jhc2VsaW5lcygKICAgICAgICAgICAgIHRlc3RfcGF0aCwgYmFzZWxpbmVfZXh0
ZW5zaW9uLCBhbGxfYmFzZWxpbmVzPVRydWUpCiAgICAgICAgIGZvciBwbGF0Zm9ybV9kaXJlY3Rv
cnksIGV4cGVjdGVkX2ZpbGVuYW1lIGluIGJhc2VsaW5lczoKICAgICAgICAgICAgIGlmIG5vdCBw
bGF0Zm9ybV9kaXJlY3Rvcnk6CiAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAg
IGlmIHBsYXRmb3JtX2RpcmVjdG9yeSA9PSBsYXlvdXRfdGVzdHNfZGlyZWN0b3J5OgorICAgICAg
ICAgICAgaWYgcGxhdGZvcm1fZGlyZWN0b3J5ID09IHRlc3RfY29uZmlnLmxheW91dF90ZXN0c19k
aXJlY3Rvcnk6CiAgICAgICAgICAgICAgICAgcGxhdGZvcm0gPSAnYmFzZScKICAgICAgICAgICAg
IGVsc2U6CiAgICAgICAgICAgICAgICAgcGxhdGZvcm0gPSBhbGxfcGxhdGZvcm1zX3BvcnQucGxh
dGZvcm1fZnJvbV9kaXJlY3RvcnkoCkBAIC0yMTgsNyArMzE3LDcgQEAgZGVmIF9nZXRfdGVzdF9i
YXNlbGluZXModGVzdF9maWxlLCB0ZXN0X3BvcnQsIGxheW91dF90ZXN0c19kaXJlY3RvcnksIHBs
YXRmb3JtcywKICAgICAgICAgICAgIHdhc191c2VkX2Zvcl90ZXN0ID0gKAogICAgICAgICAgICAg
ICAgIHBsYXRmb3JtX2RpcmVjdG9yeSwgZXhwZWN0ZWRfZmlsZW5hbWUpIGluIHRlc3RfYmFzZWxp
bmVzCiAgICAgICAgICAgICBwbGF0Zm9ybV9iYXNlbGluZXNbYmFzZWxpbmVfZXh0ZW5zaW9uXSA9
IHdhc191c2VkX2Zvcl90ZXN0Ci0gICAgICAgIAorCiAgICAgcmV0dXJuIGFsbF90ZXN0X2Jhc2Vs
aW5lcwogCiBjbGFzcyBSZWJhc2VsaW5lU2VydmVyKEFic3RyYWN0RGVjbGFyYXRpdmVDb21tYW5k
KToKQEAgLTI0NywxMyArMzQ2LDE5IEBAIGNsYXNzIFJlYmFzZWxpbmVTZXJ2ZXIoQWJzdHJhY3RE
ZWNsYXJhdGl2ZUNvbW1hbmQpOgogICAgICAgICBsYXlvdXRfdGVzdHNfZGlyZWN0b3J5ID0gcG9y
dC5sYXlvdXRfdGVzdHNfZGlyKCkKICAgICAgICAgcGxhdGZvcm1zID0gZmlsZXN5c3RlbS5saXN0
ZGlyKAogICAgICAgICAgICAgZmlsZXN5c3RlbS5qb2luKGxheW91dF90ZXN0c19kaXJlY3Rvcnks
ICdwbGF0Zm9ybScpKQorICAgICAgICB0ZXN0X2NvbmZpZyA9IFRlc3RDb25maWcoCisgICAgICAg
ICAgICBwb3J0LAorICAgICAgICAgICAgbGF5b3V0X3Rlc3RzX2RpcmVjdG9yeSwKKyAgICAgICAg
ICAgIHJlc3VsdHNfZGlyZWN0b3J5LAorICAgICAgICAgICAgcGxhdGZvcm1zLAorICAgICAgICAg
ICAgZmlsZXN5c3RlbSwKKyAgICAgICAgICAgIHNlbGYuX3Rvb2wuc2NtKCkpCiAKICAgICAgICAg
cHJpbnQgJ0dhdGhlcmluZyBjdXJyZW50IGJhc2VsaW5lcy4uLicKICAgICAgICAgZm9yIHRlc3Rf
ZmlsZSwgdGVzdF9qc29uIGluIHJlc3VsdHNfanNvblsndGVzdHMnXS5pdGVtcygpOgogICAgICAg
ICAgICAgdGVzdF9qc29uWydzdGF0ZSddID0gU1RBVEVfTkVFRFNfUkVCQVNFTElORQogICAgICAg
ICAgICAgdGVzdF9wYXRoID0gZmlsZXN5c3RlbS5qb2luKGxheW91dF90ZXN0c19kaXJlY3Rvcnks
IHRlc3RfZmlsZSkKLSAgICAgICAgICAgIHRlc3RfanNvblsnYmFzZWxpbmVzJ10gPSBfZ2V0X3Rl
c3RfYmFzZWxpbmVzKAotICAgICAgICAgICAgICAgIHRlc3RfZmlsZSwgcG9ydCwgbGF5b3V0X3Rl
c3RzX2RpcmVjdG9yeSwgcGxhdGZvcm1zLCBmaWxlc3lzdGVtKQorICAgICAgICAgICAgdGVzdF9q
c29uWydiYXNlbGluZXMnXSA9IF9nZXRfdGVzdF9iYXNlbGluZXModGVzdF9maWxlLCB0ZXN0X2Nv
bmZpZykKIAogICAgICAgICBzZXJ2ZXJfdXJsID0gImh0dHA6Ly9sb2NhbGhvc3Q6JWQvIiAlIG9w
dGlvbnMuaHR0cGRfcG9ydAogICAgICAgICBwcmludCAiU3RhcnRpbmcgc2VydmVyIGF0ICVzIiAl
IHNlcnZlcl91cmwKQEAgLTI2NSw3ICszNzAsNyBAQCBjbGFzcyBSZWJhc2VsaW5lU2VydmVyKEFi
c3RyYWN0RGVjbGFyYXRpdmVDb21tYW5kKToKIAogICAgICAgICBodHRwZCA9IFJlYmFzZWxpbmVI
VFRQU2VydmVyKAogICAgICAgICAgICAgaHR0cGRfcG9ydD1vcHRpb25zLmh0dHBkX3BvcnQsCi0g
ICAgICAgICAgICByZXN1bHRzX2RpcmVjdG9yeT1yZXN1bHRzX2RpcmVjdG9yeSwKKyAgICAgICAg
ICAgIHRlc3RfY29uZmlnPXRlc3RfY29uZmlnLAogICAgICAgICAgICAgcmVzdWx0c19qc29uPXJl
c3VsdHNfanNvbiwKICAgICAgICAgICAgIHBsYXRmb3Jtc19qc29uPXsKICAgICAgICAgICAgICAg
ICAncGxhdGZvcm1zJzogcGxhdGZvcm1zLApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3JlYmFzZWxpbmVzZXJ2ZXJfdW5pdHRlc3QucHkgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcmViYXNlbGluZXNlcnZl
cl91bml0dGVzdC5weQppbmRleCBiMzdkYTNkNjFlNmFkZjIyZWYxZWMxMjhhZGMyZjNlY2M0YmU0
ZDUzLi41Y2ZiNjI5Y2ZlOWNiNWY4ZDdjMDMzNjc2YmYzYjMyZTViMGViYzQ1IDEwMDY0NAotLS0g
YS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcmViYXNlbGluZXNl
cnZlcl91bml0dGVzdC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wv
Y29tbWFuZHMvcmViYXNlbGluZXNlcnZlcl91bml0dGVzdC5weQpAQCAtMzIsNiArMzIsMTE0IEBA
IGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgZmlsZXN5c3RlbV9tb2NrCiBmcm9t
IHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBiYXNlCiBmcm9tIHdlYmtpdHB5Lmxh
eW91dF90ZXN0cy5wb3J0LndlYmtpdCBpbXBvcnQgV2ViS2l0UG9ydAogZnJvbSB3ZWJraXRweS50
b29sLmNvbW1hbmRzIGltcG9ydCByZWJhc2VsaW5lc2VydmVyCitmcm9tIHdlYmtpdHB5LnRvb2wu
bW9ja3Rvb2wgaW1wb3J0IE1vY2tTQ00KKworCitjbGFzcyBSZWJhc2VsaW5lVGVzdFRlc3QodW5p
dHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3RleHRfcmViYXNlbGluZShzZWxmKToKKyAg
ICAgICAgc2VsZi5fYXNzZXJ0UmViYXNlbGluZSgKKyAgICAgICAgICAgIHRlc3RfZmlsZXM9KAor
ICAgICAgICAgICAgICAgICdmYXN0L3RleHQtZXhwZWN0ZWQudHh0JywKKyAgICAgICAgICAgICAg
ICAncGxhdGZvcm0vbWFjL2Zhc3QvdGV4dC1leHBlY3RlZC50eHQnLAorICAgICAgICAgICAgKSwK
KyAgICAgICAgICAgIHJlc3VsdHNfZmlsZXM9KAorICAgICAgICAgICAgICAgICdmYXN0L3RleHQt
YWN0dWFsLnR4dCcsCisgICAgICAgICAgICApLAorICAgICAgICAgICAgdGVzdF9uYW1lPSdmYXN0
L3RleHQuaHRtbCcsCisgICAgICAgICAgICBiYXNlbGluZV90YXJnZXQ9J21hYycsCisgICAgICAg
ICAgICBiYXNlbGluZV9tb3ZlX3RvPSdub25lJywKKyAgICAgICAgICAgIGV4cGVjdGVkX3N1Y2Nl
c3M9VHJ1ZSwKKyAgICAgICAgICAgIGV4cGVjdGVkX2xvZz1bCisgICAgICAgICAgICAgICAgJ1Jl
YmFzZWxpbmluZyBmYXN0L3RleHQuLi4nLAorICAgICAgICAgICAgICAgICcgIFVwZGF0aW5nIGJh
c2VsaW5lcyBmb3IgbWFjJywKKyAgICAgICAgICAgICAgICAnICAgIFVwZGF0ZWQgdGV4dC1leHBl
Y3RlZC50eHQnLAorICAgICAgICAgICAgXSkKKworICAgIGRlZiB0ZXN0X3RleHRfcmViYXNlbGlu
ZV9tb3ZlX25vX29wKHNlbGYpOgorICAgICAgICBzZWxmLl9hc3NlcnRSZWJhc2VsaW5lKAorICAg
ICAgICAgICAgdGVzdF9maWxlcz0oCisgICAgICAgICAgICAgICAgJ2Zhc3QvdGV4dC1leHBlY3Rl
ZC50eHQnLAorICAgICAgICAgICAgICAgICdwbGF0Zm9ybS93aW4vZmFzdC90ZXh0LWV4cGVjdGVk
LnR4dCcsCisgICAgICAgICAgICApLAorICAgICAgICAgICAgcmVzdWx0c19maWxlcz0oCisgICAg
ICAgICAgICAgICAgJ2Zhc3QvdGV4dC1hY3R1YWwudHh0JywKKyAgICAgICAgICAgICksCisgICAg
ICAgICAgICB0ZXN0X25hbWU9J2Zhc3QvdGV4dC5odG1sJywKKyAgICAgICAgICAgIGJhc2VsaW5l
X3RhcmdldD0nbWFjJywKKyAgICAgICAgICAgIGJhc2VsaW5lX21vdmVfdG89J21hYy1sZW9wYXJk
JywKKyAgICAgICAgICAgIGV4cGVjdGVkX3N1Y2Nlc3M9VHJ1ZSwKKyAgICAgICAgICAgIGV4cGVj
dGVkX2xvZz1bCisgICAgICAgICAgICAgICAgJ1JlYmFzZWxpbmluZyBmYXN0L3RleHQuLi4nLAor
ICAgICAgICAgICAgICAgICcgIFVwZGF0aW5nIGJhc2VsaW5lcyBmb3IgbWFjJywKKyAgICAgICAg
ICAgICAgICAnICAgIFVwZGF0ZWQgdGV4dC1leHBlY3RlZC50eHQnLAorICAgICAgICAgICAgXSkK
KworICAgIGRlZiB0ZXN0X3RleHRfcmViYXNlbGluZV9tb3ZlKHNlbGYpOgorICAgICAgICBzZWxm
Ll9hc3NlcnRSZWJhc2VsaW5lKAorICAgICAgICAgICAgdGVzdF9maWxlcz0oCisgICAgICAgICAg
ICAgICAgJ2Zhc3QvdGV4dC1leHBlY3RlZC50eHQnLAorICAgICAgICAgICAgICAgICdwbGF0Zm9y
bS9tYWMvZmFzdC90ZXh0LWV4cGVjdGVkLnR4dCcsCisgICAgICAgICAgICApLAorICAgICAgICAg
ICAgcmVzdWx0c19maWxlcz0oCisgICAgICAgICAgICAgICAgJ2Zhc3QvdGV4dC1hY3R1YWwudHh0
JywKKyAgICAgICAgICAgICksCisgICAgICAgICAgICB0ZXN0X25hbWU9J2Zhc3QvdGV4dC5odG1s
JywKKyAgICAgICAgICAgIGJhc2VsaW5lX3RhcmdldD0nbWFjJywKKyAgICAgICAgICAgIGJhc2Vs
aW5lX21vdmVfdG89J21hYy1sZW9wYXJkJywKKyAgICAgICAgICAgIGV4cGVjdGVkX3N1Y2Nlc3M9
RmFsc2UsCisgICAgICAgICAgICBleHBlY3RlZF9sb2c9WworICAgICAgICAgICAgICAgICdSZWJh
c2VsaW5pbmcgZmFzdC90ZXh0Li4uJywKKyAgICAgICAgICAgICAgICAnICBNb3ZpbmcgY3VycmVu
dCBtYWMgYmFzZWxpbmVzIHRvIG1hYy1sZW9wYXJkJywKKyAgICAgICAgICAgICAgICAnICAgIEZJ
WE1FOiBBZGQgc3VwcG9ydCBmb3IgbW92aW5nIGV4aXN0aW5nIGJhc2VsaW5lcycsCisgICAgICAg
ICAgICBdKQorCisgICAgZGVmIHRlc3RfaW1hZ2VfcmViYXNlbGluZShzZWxmKToKKyAgICAgICAg
c2VsZi5fYXNzZXJ0UmViYXNlbGluZSgKKyAgICAgICAgICAgIHRlc3RfZmlsZXM9KAorICAgICAg
ICAgICAgICAgICdmYXN0L2ltYWdlLWV4cGVjdGVkLnR4dCcsCisgICAgICAgICAgICAgICAgJ3Bs
YXRmb3JtL21hYy9mYXN0L2ltYWdlLWV4cGVjdGVkLnBuZycsCisgICAgICAgICAgICAgICAgJ3Bs
YXRmb3JtL21hYy9mYXN0L2ltYWdlLWV4cGVjdGVkLmNoZWNrc3VtJywKKyAgICAgICAgICAgICks
CisgICAgICAgICAgICByZXN1bHRzX2ZpbGVzPSgKKyAgICAgICAgICAgICAgICAnZmFzdC9pbWFn
ZS1hY3R1YWwucG5nJywKKyAgICAgICAgICAgICAgICAnZmFzdC9pbWFnZS1hY3R1YWwuY2hlY2tz
dW0nLAorICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIHRlc3RfbmFtZT0nZmFzdC9pbWFnZS5o
dG1sJywKKyAgICAgICAgICAgIGJhc2VsaW5lX3RhcmdldD0nbWFjJywKKyAgICAgICAgICAgIGJh
c2VsaW5lX21vdmVfdG89J25vbmUnLAorICAgICAgICAgICAgZXhwZWN0ZWRfc3VjY2Vzcz1UcnVl
LAorICAgICAgICAgICAgZXhwZWN0ZWRfbG9nPVsKKyAgICAgICAgICAgICAgICAnUmViYXNlbGlu
aW5nIGZhc3QvaW1hZ2UuLi4nLAorICAgICAgICAgICAgICAgICcgIFVwZGF0aW5nIGJhc2VsaW5l
cyBmb3IgbWFjJywKKyAgICAgICAgICAgICAgICAnICAgIFVwZGF0ZWQgaW1hZ2UtZXhwZWN0ZWQu
Y2hlY2tzdW0nLAorICAgICAgICAgICAgICAgICcgICAgVXBkYXRlZCBpbWFnZS1leHBlY3RlZC5w
bmcnLAorICAgICAgICAgICAgXSkKKworICAgIGRlZiBfYXNzZXJ0UmViYXNlbGluZShzZWxmLCB0
ZXN0X2ZpbGVzLCByZXN1bHRzX2ZpbGVzLCB0ZXN0X25hbWUsIGJhc2VsaW5lX3RhcmdldCwgYmFz
ZWxpbmVfbW92ZV90bywgZXhwZWN0ZWRfc3VjY2VzcywgZXhwZWN0ZWRfbG9nKToKKyAgICAgICAg
bG9nID0gW10KKyAgICAgICAgdGVzdF9jb25maWcgPSBnZXRfdGVzdF9jb25maWcodGVzdF9maWxl
cywgcmVzdWx0c19maWxlcykKKyAgICAgICAgc3VjY2VzcyA9IHJlYmFzZWxpbmVzZXJ2ZXIuX3Jl
YmFzZWxpbmVfdGVzdCgKKyAgICAgICAgICAgIHRlc3RfbmFtZSwKKyAgICAgICAgICAgIGJhc2Vs
aW5lX3RhcmdldCwKKyAgICAgICAgICAgIGJhc2VsaW5lX21vdmVfdG8sCisgICAgICAgICAgICB0
ZXN0X2NvbmZpZywKKyAgICAgICAgICAgIGxvZz1sYW1iZGEgbDogbG9nLmFwcGVuZChsKSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9sb2csIGxvZykKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChleHBlY3RlZF9zdWNjZXNzLCBzdWNjZXNzKQorCisKK2NsYXNzIEdldEFjdHVh
bFJlc3VsdEZpbGVzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Qoc2VsZik6
CisgICAgICAgIHRlc3RfY29uZmlnID0gZ2V0X3Rlc3RfY29uZmlnKHJlc3VsdF9maWxlcz0oCisg
ICAgICAgICAgICAnZmFzdC90ZXh0LWFjdHVhbC50eHQnLAorICAgICAgICAgICAgJ2Zhc3QyL3Rl
eHQtYWN0dWFsLnR4dCcsCisgICAgICAgICAgICAnZmFzdC90ZXh0Mi1hY3R1YWwudHh0JywKKyAg
ICAgICAgICAgICdmYXN0L3RleHQtbm90YWN0dWFsLnR4dCcsCisgICAgICAgICkpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAoJ3RleHQtYWN0dWFsLnR4dCcsKSwKKyAg
ICAgICAgICAgIHJlYmFzZWxpbmVzZXJ2ZXIuX2dldF9hY3R1YWxfcmVzdWx0X2ZpbGVzKAorICAg
ICAgICAgICAgICAgICdmYXN0L3RleHQuaHRtbCcsIHRlc3RfY29uZmlnKSkKIAogCiBjbGFzcyBH
ZXRCYXNlbGluZXNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTc5LDIxICsxODcsMzEgQEAg
Y2xhc3MgR2V0QmFzZWxpbmVzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICAgICBl
eHBlY3RlZF9iYXNlbGluZXM9eydiYXNlJzogeycudHh0JzogVHJ1ZX19KQogCiAgICAgZGVmIF9h
c3NlcnRCYXNlbGluZXMoc2VsZiwgdGVzdF9maWxlcywgdGVzdF9uYW1lLCBleHBlY3RlZF9iYXNl
bGluZXMpOgotICAgICAgICBsYXlvdXRfdGVzdHNfZGlyZWN0b3J5ID0gYmFzZS5Qb3J0KCkubGF5
b3V0X3Rlc3RzX2RpcigpCi0gICAgICAgIG1vY2tfZmlsZXN5c3RlbSA9IGZpbGVzeXN0ZW1fbW9j
ay5Nb2NrRmlsZVN5c3RlbSgpCi0gICAgICAgIGZvciBmaWxlIGluIHRlc3RfZmlsZXMgKyAodGVz
dF9uYW1lLCk6Ci0gICAgICAgICAgICBmaWxlX3BhdGggPSBtb2NrX2ZpbGVzeXN0ZW0uam9pbihs
YXlvdXRfdGVzdHNfZGlyZWN0b3J5LCBmaWxlKQotICAgICAgICAgICAgbW9ja19maWxlc3lzdGVt
LmZpbGVzW2ZpbGVfcGF0aF0gPSAnJwotCi0gICAgICAgIGNsYXNzIFRlc3RNYWNQb3J0KFdlYktp
dFBvcnQpOgotICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICAgICAgICAg
IFdlYktpdFBvcnQuX19pbml0X18oc2VsZiwgZmlsZXN5c3RlbT1tb2NrX2ZpbGVzeXN0ZW0pCi0g
ICAgICAgICAgICAgICAgc2VsZi5fbmFtZSA9ICdtYWMnCi0KICAgICAgICAgYWN0dWFsX2Jhc2Vs
aW5lcyA9IHJlYmFzZWxpbmVzZXJ2ZXIuX2dldF90ZXN0X2Jhc2VsaW5lcygKLSAgICAgICAgICAg
IHRlc3RfbmFtZSwKLSAgICAgICAgICAgIFRlc3RNYWNQb3J0KCksCi0gICAgICAgICAgICBsYXlv
dXRfdGVzdHNfZGlyZWN0b3J5LAotICAgICAgICAgICAgKCdtYWMnLCAnd2luJywgJ2xpbnV4Jyks
Ci0gICAgICAgICAgICBtb2NrX2ZpbGVzeXN0ZW0pCisgICAgICAgICAgICB0ZXN0X25hbWUsIGdl
dF90ZXN0X2NvbmZpZyh0ZXN0X2ZpbGVzKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBl
Y3RlZF9iYXNlbGluZXMsIGFjdHVhbF9iYXNlbGluZXMpCisKKworZGVmIGdldF90ZXN0X2NvbmZp
Zyh0ZXN0X2ZpbGVzPVtdLCByZXN1bHRfZmlsZXM9W10pOgorICAgIGxheW91dF90ZXN0c19kaXJl
Y3RvcnkgPSBiYXNlLlBvcnQoKS5sYXlvdXRfdGVzdHNfZGlyKCkKKyAgICByZXN1bHRzX2RpcmVj
dG9yeSA9ICcvV2ViS2l0QnVpbGQvRGVidWcvbGF5b3V0LXRlc3QtcmVzdWx0cycKKyAgICBtb2Nr
X2ZpbGVzeXN0ZW0gPSBmaWxlc3lzdGVtX21vY2suTW9ja0ZpbGVTeXN0ZW0oKQorICAgIGZvciBm
aWxlIGluIHRlc3RfZmlsZXM6CisgICAgICAgIGZpbGVfcGF0aCA9IG1vY2tfZmlsZXN5c3RlbS5q
b2luKGxheW91dF90ZXN0c19kaXJlY3RvcnksIGZpbGUpCisgICAgICAgIG1vY2tfZmlsZXN5c3Rl
bS5maWxlc1tmaWxlX3BhdGhdID0gJycKKyAgICBmb3IgZmlsZSBpbiByZXN1bHRfZmlsZXM6Cisg
ICAgICAgIGZpbGVfcGF0aCA9IG1vY2tfZmlsZXN5c3RlbS5qb2luKHJlc3VsdHNfZGlyZWN0b3J5
LCBmaWxlKQorICAgICAgICBtb2NrX2ZpbGVzeXN0ZW0uZmlsZXNbZmlsZV9wYXRoXSA9ICcnCisK
KyAgICBjbGFzcyBUZXN0TWFjUG9ydChXZWJLaXRQb3J0KToKKyAgICAgICAgZGVmIF9faW5pdF9f
KHNlbGYpOgorICAgICAgICAgICAgV2ViS2l0UG9ydC5fX2luaXRfXyhzZWxmLCBmaWxlc3lzdGVt
PW1vY2tfZmlsZXN5c3RlbSkKKyAgICAgICAgICAgIHNlbGYuX25hbWUgPSAnbWFjJworCisgICAg
cmV0dXJuIHJlYmFzZWxpbmVzZXJ2ZXIuVGVzdENvbmZpZygKKyAgICAgICAgVGVzdE1hY1BvcnQo
KSwKKyAgICAgICAgbGF5b3V0X3Rlc3RzX2RpcmVjdG9yeSwKKyAgICAgICAgcmVzdWx0c19kaXJl
Y3RvcnksCisgICAgICAgICgnbWFjJywgJ3dpbicsICdsaW51eCcpLAorICAgICAgICBtb2NrX2Zp
bGVzeXN0ZW0sCisgICAgICAgIE1vY2tTQ00oKSkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdG9vbC9tb2NrdG9vbC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvdG9vbC9tb2NrdG9vbC5weQppbmRleCA3MTlmOWIxYmJjODIzNTU2OWQ4NTFlOGYyNDIx
NmQ4ZmMzNDQyZTllLi4wMDQwYjFmNjkxNDQyYWQyMGRmNzIyM2I2ODY3ZGM2ODQ0NTRlMTRkIDEw
MDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvbW9ja3Rvb2wucHkK
KysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL21vY2t0b29sLnB5CkBAIC00
NDksNiArNDQ5LDEwIEBAIGNsYXNzIE1vY2tTQ00oTW9jayk6CiAgICAgZGVmIHN2bl9yZXZpc2lv
bl9mcm9tX2NvbW1pdF90ZXh0KHNlbGYsIGNvbW1pdF90ZXh0KToKICAgICAgICAgcmV0dXJuICI0
OTgyNCIKIAorICAgIGRlZiBhZGQoc2VsZiwgZGVzdGluYXRpb25fcGF0aCwgcmV0dXJuX2V4aXRf
Y29kZT1GYWxzZSk6CisgICAgICAgIGlmIHJldHVybl9leGl0X2NvZGU6CisgICAgICAgICAgICBy
ZXR1cm4gMAorCiAKIGNsYXNzIE1vY2tDaGVja291dChvYmplY3QpOgogCg==
</data>
<flag name="review"
          id="66126"
          type_id="1"
          status="+"
          setter="tony"
    />
          </attachment>
      

    </bug>

</bugzilla>