<?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>83348</bug_id>
          
          <creation_ts>2012-04-05 20:45:56 -0700</creation_ts>
          <short_desc>add a webkit-patch print-baselines command</short_desc>
          <delta_ts>2012-04-09 16:28:39 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Pranke">dpranke</reporter>
          <assigned_to name="Dirk Pranke">dpranke</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>597178</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-04-05 20:45:56 -0700</bug_when>
    <thetext>See bug 64426 and bug 83347 for backstory ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>597712</commentid>
    <comment_count>1</comment_count>
      <attachid>136071</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-04-06 15:16:06 -0700</bug_when>
    <thetext>Created attachment 136071
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>597714</commentid>
    <comment_count>2</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-04-06 15:18:27 -0700</bug_when>
    <thetext>Note in this case I didn&apos;t create a separate &apos;view&apos; for the output since the usage is highly specialized and only a couple of lines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>597724</commentid>
    <comment_count>3</comment_count>
      <attachid>136071</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-04-06 15:23:22 -0700</bug_when>
    <thetext>Comment on attachment 136071
Patch

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

&gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:320
&gt; +        for extension in (&apos;wav&apos;, &apos;webarchive&apos;, &apos;txt&apos;, &apos;png&apos;):

Can we centralize this list of extensions?  I think we have another copy of in rebaseline.py.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>597726</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-04-06 15:24:17 -0700</bug_when>
    <thetext>Makes sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>597730</commentid>
    <comment_count>5</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-04-06 15:27:32 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 136071 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=136071&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:320
&gt; &gt; +        for extension in (&apos;wav&apos;, &apos;webarchive&apos;, &apos;txt&apos;, &apos;png&apos;):
&gt; 
&gt; Can we centralize this list of extensions?  I think we have another copy of in rebaseline.py.

Sure, I can publish this as a public method ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>597888</commentid>
    <comment_count>6</comment_count>
      <attachid>136117</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-04-06 18:33:38 -0700</bug_when>
    <thetext>Created attachment 136117
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598054</commentid>
    <comment_count>7</comment_count>
      <attachid>136117</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-04-08 12:56:06 -0700</bug_when>
    <thetext>Comment on attachment 136117
Patch

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

&gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:324
&gt; +    def expected_baseline_dict(self, test_name):
&gt; +        &quot;&quot;&quot;Returns a dict mapping baseline suffix to relative path for each baseline in
&gt; +        a test. For reftests, it returns &quot;.==&quot; or &quot;.!=&quot; instead of the suffix.&quot;&quot;&quot;
&gt; +        # FIXME: The name similarity between this and expected_baselines() below, is unfortunate.
&gt; +        # We should probably rename them both.
&gt; +        baseline_dict = {}
&gt; +        reference_files = self.reference_files(test_name)
&gt; +        if reference_files:
&gt; +            # FIXME: How should this handle more than one type of reftest?
&gt; +            baseline_dict[&apos;.&apos; + reference_files[0][0]] = self.relative_test_filename(reference_files[0][1])
&gt; +
&gt; +        for extension in self.baseline_extensions():
&gt; +            path = self.expected_filename(test_name, extension, return_default=False)
&gt; +            baseline_dict[extension] = self.relative_test_filename(path) if path else path
&gt; +
&gt; +        return baseline_dict

So, if png is missing, then this will map PNG to none?  Interesting.  The reftest part of this seems like an odd special case that might bite us in the future.

If you&apos;re looking for another name for this function, you might consider expected_baselines_by_extension.  That&apos;s a naming convention we used a bit in garden-o-matic to keep track of which dictionaries mapped what to what.

&gt; Tools/Scripts/webkitpy/tool/commands/queries.py:509
&gt; +            make_option(&apos;-p&apos;, &apos;--platform&apos;, action=&apos;store&apos;,
&gt; +                        help=&apos;platform/port(s) to display expectations for. Use glob-style wildcards for multiple ports (note that that will imply --csv)&apos;),
&gt; +            make_option(&apos;--all&apos;, action=&apos;store_true&apos;, default=False,
&gt; +                        help=&apos;display the baselines for *all* tests&apos;),
&gt; +            make_option(&apos;--csv&apos;, action=&apos;store_true&apos;, default=False,
&gt; +                        help=&apos;Print a CSV-style report that includes the port name, test_name, test platform, baseline type, baseline location, and baseline platform&apos;),
&gt; +            make_option(&apos;--include-virtual-tests&apos;, action=&apos;store_true&apos;,
&gt; +                        help=&apos;Include virtual tests&apos;),

You mention above that you&apos;re planning to write a followup patch that refactors the port-factory make_option calls to be shared rather than copy/pasted.

&gt; Tools/Scripts/webkitpy/tool/commands/queries.py:555
&gt; +        m = self._platform_regexp.match(relpath)

Can we use a more descriptive variable name than m ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598575</commentid>
    <comment_count>8</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-04-09 13:37:04 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 136117 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=136117&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:324
&gt; &gt; +    def expected_baseline_dict(self, test_name):
&gt; &gt; +        &quot;&quot;&quot;Returns a dict mapping baseline suffix to relative path for each baseline in
&gt; &gt; +        a test. For reftests, it returns &quot;.==&quot; or &quot;.!=&quot; instead of the suffix.&quot;&quot;&quot;
&gt; &gt; +        # FIXME: The name similarity between this and expected_baselines() below, is unfortunate.
&gt; &gt; +        # We should probably rename them both.
&gt; &gt; +        baseline_dict = {}
&gt; &gt; +        reference_files = self.reference_files(test_name)
&gt; &gt; +        if reference_files:
&gt; &gt; +            # FIXME: How should this handle more than one type of reftest?
&gt; &gt; +            baseline_dict[&apos;.&apos; + reference_files[0][0]] = self.relative_test_filename(reference_files[0][1])
&gt; &gt; +
&gt; &gt; +        for extension in self.baseline_extensions():
&gt; &gt; +            path = self.expected_filename(test_name, extension, return_default=False)
&gt; &gt; +            baseline_dict[extension] = self.relative_test_filename(path) if path else path
&gt; &gt; +
&gt; &gt; +        return baseline_dict
&gt; 
&gt; So, if png is missing, then this will map PNG to none?  Interesting.

Yes, unfortunately, the tool (like the rest of webkitpy) doesn&apos;t know whether a test *should* emit PNG/WAV/etc. We could do a bit more work to see if the baselines exist on any port, but that didn&apos;t seem worth it at this point.

&gt;  The reftest part of this seems like an odd special case that might bite us in the future.

Yup, I expect I&apos;ll have to do something about this at some point if this command ends up being useful.

&gt; If you&apos;re looking for another name for this function, you might consider expected_baselines_by_extension.  That&apos;s a naming convention we used a bit in garden-o-matic to keep track of which dictionaries mapped what to what.

Good idea.

&gt; 
&gt; &gt; Tools/Scripts/webkitpy/tool/commands/queries.py:509
&gt; &gt; +            make_option(&apos;-p&apos;, &apos;--platform&apos;, action=&apos;store&apos;,
&gt; &gt; +                        help=&apos;platform/port(s) to display expectations for. Use glob-style wildcards for multiple ports (note that that will imply --csv)&apos;),
&gt; &gt; +            make_option(&apos;--all&apos;, action=&apos;store_true&apos;, default=False,
&gt; &gt; +                        help=&apos;display the baselines for *all* tests&apos;),
&gt; &gt; +            make_option(&apos;--csv&apos;, action=&apos;store_true&apos;, default=False,
&gt; &gt; +                        help=&apos;Print a CSV-style report that includes the port name, test_name, test platform, baseline type, baseline location, and baseline platform&apos;),
&gt; &gt; +            make_option(&apos;--include-virtual-tests&apos;, action=&apos;store_true&apos;,
&gt; &gt; +                        help=&apos;Include virtual tests&apos;),
&gt; 
&gt; You mention above that you&apos;re planning to write a followup patch that refactors the port-factory make_option calls to be shared rather than copy/pasted.
&gt; 

Right, will do.

&gt; &gt; Tools/Scripts/webkitpy/tool/commands/queries.py:555
&gt; &gt; +        m = self._platform_regexp.match(relpath)
&gt; 
&gt; Can we use a more descriptive variable name than m ?

Sure, will fix. Thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598728</commentid>
    <comment_count>9</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-04-09 16:28:39 -0700</bug_when>
    <thetext>Committed r113639: &lt;http://trac.webkit.org/changeset/113639&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>136071</attachid>
            <date>2012-04-06 15:16:06 -0700</date>
            <delta_ts>2012-04-06 18:33:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-83348-20120406151605.patch</filename>
            <type>text/plain</type>
            <size>11187</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEzMzk5CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNjQyMDg4NTY1OTYwMzFhYzBkYWIxMDliY2ZlYmU3YTU1
NzMzMTkxZS4uZDdiNTQ1N2M3Yjc1YmY1MTBkYjM0OGE2YTA4OWQ4OWU3ZWJiMjIxNyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4
IEBACisyMDEyLTA0LTA2ICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIGFkZCBhIHdlYmtpdC1wYXRjaCBwcmludC1iYXNlbGluZXMgY29tbWFuZAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODMzNDgKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGFkZHMgYSBzaW1w
bGUgJ3ByaW50LWJhc2VsaW5lcycgY29tbWFuZCB0byB3ZWJraXQtcGF0Y2gKKyAgICAgICAgdGhh
dCBjYW4gYmUgdXNlZCBpbiBvbmUgb2YgdHdvIGZvcm1zOiB0byBwcmludCB3aGVyZSB0aGUKKyAg
ICAgICAgYmFzZWxpbmVzIGZvciBhIGdpdmVuIHRlc3QgKG9yIHNldCBvZiB0ZXN0cykgb24gYSBz
aW5nbGUgcG9ydAorICAgICAgICB3aWxsIGJlIGZvdW5kLCBvciB0byBnZW5lcmF0ZSBhIHJlcG9y
dCBmb3IgbXVsdGlwbGUgcG9ydHMuCisKKyAgICAgICAgRXhhbXBsZSBvZiB0aGUgZm9ybWVyOgor
CisgICAgICAgICQgd2Via2l0LXBhdGNoIHByaW50LWJhc2VsaW5lcyBmYXN0L2h0bWwva2V5Z2Vu
Lmh0bWwKKyAgICAgICAgLy8gRm9yIG1hYy1zbm93bGVvcGFyZAorICAgICAgICBwbGF0Zm9ybS9t
YWMvZmFzdC9odG1sL2tleWdlbi1leHBlY3RlZC50eHQKKyAgICAgICAgcGxhdGZvcm0vbWFjL2Zh
c3QvaHRtbC9rZXlnZW4tZXhwZWN0ZWQucG5nCisgICAgICAgICQKKworICAgICAgICBUaGUgbGF0
dGVyIGlzIG1vc3QgdXNlZnVsIGZvciBmaW5kaW5nIG91dCB3aGljaCBmYWxsYmFjayBkaXJzIGFy
ZQorICAgICAgICB1c2VkIGJ5IHdoaWNoIHBvcnRzIGZvciB3aGljaCB0ZXN0cywgZm9yIGV4YW1w
bGUsCisgICAgICAgICdjaHJvbWl1bS1tYWMtbGVvcGFyZCcgdXNlcyAxMDAgcmVzdWx0cyBmcm9t
ICdwbGF0Zm9ybS9tYWMvbGVvcGFyZCcuCisgICAgICAgIE5vIGV4YW1wbGUgb3V0cHV0IGlzIGdp
dmVuIGJlY2F1c2UgdGhlIHJlcG9ydHMgYXJlIHByZXR0eSB3b3JkeSA6KS4KKworICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weToKKyAgICAgICAgKFBv
cnQuZXhwZWN0ZWRfYmFzZWxpbmVfZGljdCk6IEFkZHMgYSBtZXRob2QgdG8gZXh0cmFjdCBpbiBv
bmUKKyAgICAgICAgICAgY2FsbCBhbGwgdGhlIGJhc2VsaW5lcyB3ZSBleHBlY3QgdG8gdXNlIGZv
ciBhIGdpdmVuIHRlc3QuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRz
L3F1ZXJpZXMucHk6CisgICAgICAgIChQcmludEJhc2VsaW5lcyk6CisgICAgICAgIChQcmludEJh
c2VsaW5lcy5fX2luaXRfXyk6CisgICAgICAgIChQcmludEJhc2VsaW5lcy5leGVjdXRlKToKKyAg
ICAgICAgKFByaW50QmFzZWxpbmVzLl9wcmludF9iYXNlbGluZXMpOgorICAgICAgICAoUHJpbnRC
YXNlbGluZXMuX3BsYXRmb3JtX2Zvcl9wYXRoKToKKwogMjAxMi0wNC0wNSAgRGlyayBQcmFua2Ug
IDxkcHJhbmtlQGNocm9taXVtLm9yZz4KIAogICAgICAgICB3ZWJraXQtcGF0Y2g6IGFkZCBhIHBy
aW50LWV4cGVjdGF0aW9ucyBjb21tYW5kCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2Jhc2UucHkKaW5kZXggY2VlZmVjNzViZDZkZDkxZWUyNDQwNWE0OGNj
YmVjZTBhOGQwMzg1OS4uZWQ1ZTEyZmFkMmZkZWVkYTYzM2E1YTFkZjhiYjMyMzk2OGY0NzBmZSAx
MDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNl
LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5w
eQpAQCAtMzA2LDYgKzMwNiwyMyBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgICAgICMgRklY
TUU6IFNlZW1zIHdlIHNob3VsZCBnZXQgdGhpcyBmcm9tIHRoZSBQb3J0J3MgRHJpdmVyIGNsYXNz
LgogICAgICAgICByZXR1cm4gIkR1bXBSZW5kZXJUcmVlIgogCisgICAgZGVmIGV4cGVjdGVkX2Jh
c2VsaW5lX2RpY3Qoc2VsZiwgdGVzdF9uYW1lKToKKyAgICAgICAgIiIiUmV0dXJucyBhIGRpY3Qg
bWFwcGluZyBiYXNlbGluZSBzdWZmaXggdG8gcmVsYXRpdmUgcGF0aCBmb3IgZWFjaCBiYXNlbGlu
ZSBpbgorICAgICAgICBhIHRlc3QuIEZvciByZWZ0ZXN0cywgaXQgcmV0dXJucyAiPT0iIG9yICIh
PSIgaW5zdGVhZCBvZiB0aGUgc3VmZml4LiIiIgorICAgICAgICAjIEZJWE1FOiBUaGUgbmFtZSBz
aW1pbGFyaXR5IGJldHdlZW4gdGhpcyBhbmQgZXhwZWN0ZWRfYmFzZWxpbmVzKCkgYmVsb3csIGlz
IHVuZm9ydHVuYXRlLgorICAgICAgICAjIFdlIHNob3VsZCBwcm9iYWJseSByZW5hbWUgdGhlbSBi
b3RoLgorICAgICAgICBiYXNlbGluZV9kaWN0ID0ge30KKyAgICAgICAgcmVmZXJlbmNlX2ZpbGVz
ID0gc2VsZi5yZWZlcmVuY2VfZmlsZXModGVzdF9uYW1lKQorICAgICAgICBpZiByZWZlcmVuY2Vf
ZmlsZXM6CisgICAgICAgICAgICAjIEZJWE1FOiBIb3cgc2hvdWxkIHRoaXMgaGFuZGxlIG1vcmUg
dGhhbiBvbmUgdHlwZSBvZiByZWZ0ZXN0PworICAgICAgICAgICAgYmFzZWxpbmVfZGljdFtyZWZl
cmVuY2VfZmlsZXNbMF1bMF1dID0gc2VsZi5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKHJlZmVyZW5j
ZV9maWxlc1swXVsxXSkKKworICAgICAgICBmb3IgZXh0ZW5zaW9uIGluICgnd2F2JywgJ3dlYmFy
Y2hpdmUnLCAndHh0JywgJ3BuZycpOgorICAgICAgICAgICAgcGF0aCA9IHNlbGYuZXhwZWN0ZWRf
ZmlsZW5hbWUodGVzdF9uYW1lLCAnLicgKyBleHRlbnNpb24sIHJldHVybl9kZWZhdWx0PUZhbHNl
KQorICAgICAgICAgICAgYmFzZWxpbmVfZGljdFtleHRlbnNpb25dID0gc2VsZi5yZWxhdGl2ZV90
ZXN0X2ZpbGVuYW1lKHBhdGgpIGlmIHBhdGggZWxzZSBwYXRoCisKKyAgICAgICAgcmV0dXJuIGJh
c2VsaW5lX2RpY3QKKwogICAgIGRlZiBleHBlY3RlZF9iYXNlbGluZXMoc2VsZiwgdGVzdF9uYW1l
LCBzdWZmaXgsIGFsbF9iYXNlbGluZXM9RmFsc2UpOgogICAgICAgICAiIiJHaXZlbiBhIHRlc3Qg
bmFtZSwgZmluZHMgd2hlcmUgdGhlIGJhc2VsaW5lIHJlc3VsdHMgYXJlIGxvY2F0ZWQuCiAKQEAg
LTM1NSw3ICszNzIsNyBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAKICAgICAgICAgcmV0dXJuIFso
Tm9uZSwgYmFzZWxpbmVfZmlsZW5hbWUpXQogCi0gICAgZGVmIGV4cGVjdGVkX2ZpbGVuYW1lKHNl
bGYsIHRlc3RfbmFtZSwgc3VmZml4KToKKyAgICBkZWYgZXhwZWN0ZWRfZmlsZW5hbWUoc2VsZiwg
dGVzdF9uYW1lLCBzdWZmaXgsIHJldHVybl9kZWZhdWx0PVRydWUpOgogICAgICAgICAiIiJHaXZl
biBhIHRlc3QgbmFtZSwgcmV0dXJucyBhbiBhYnNvbHV0ZSBwYXRoIHRvIGl0cyBleHBlY3RlZCBy
ZXN1bHRzLgogCiAgICAgICAgIElmIG5vIGV4cGVjdGVkIHJlc3VsdHMgYXJlIGZvdW5kIGluIGFu
eSBvZiB0aGUgc2VhcmNoZWQgZGlyZWN0b3JpZXMsCkBAIC0zNzAsNiArMzg3LDggQEAgY2xhc3Mg
UG9ydChvYmplY3QpOgogICAgICAgICBwbGF0Zm9ybTogdGhlIG1vc3Qtc3BlY2lmaWMgZGlyZWN0
b3J5IG5hbWUgdG8gdXNlIHRvIGJ1aWxkIHRoZQogICAgICAgICAgICAgc2VhcmNoIGxpc3Qgb2Yg
ZGlyZWN0b3JpZXMsIGUuZy4sICdjaHJvbWl1bS13aW4nLCBvcgogICAgICAgICAgICAgJ2Nocm9t
aXVtLWNnLW1hYy1sZW9wYXJkJyAod2UgZm9sbG93IHRoZSBXZWJLaXQgZm9ybWF0KQorICAgICAg
ICByZXR1cm5fZGVmYXVsdDogaWYgVHJ1ZSwgcmV0dXJucyB0aGUgcGF0aCB0byB0aGUgZ2VuZXJp
YyBleHBlY3RhdGlvbiBpZiBub3RoaW5nCisgICAgICAgICAgICBlbHNlIGlzIGZvdW5kOyBpZiBG
YWxzZSwgcmV0dXJucyBOb25lLgogCiAgICAgICAgIFRoaXMgcm91dGluZSBpcyBnZW5lcmljIGJ1
dCBpcyBpbXBsZW1lbnRlZCBoZXJlIHRvIGxpdmUgYWxvbmdzaWRlCiAgICAgICAgIHRoZSBvdGhl
ciBiYXNlbGluZSBhbmQgZmlsZW5hbWUgbWFuaXB1bGF0aW9uIHJvdXRpbmVzLgpAQCAtMzgzLDcg
KzQwMiw5IEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICAgICAgaWYgYWN0dWFsX3Rlc3RfbmFt
ZToKICAgICAgICAgICAgIHJldHVybiBzZWxmLmV4cGVjdGVkX2ZpbGVuYW1lKGFjdHVhbF90ZXN0
X25hbWUsIHN1ZmZpeCkKIAotICAgICAgICByZXR1cm4gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNl
bGYubGF5b3V0X3Rlc3RzX2RpcigpLCBiYXNlbGluZV9maWxlbmFtZSkKKyAgICAgICAgaWYgcmV0
dXJuX2RlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNl
bGYubGF5b3V0X3Rlc3RzX2RpcigpLCBiYXNlbGluZV9maWxlbmFtZSkKKyAgICAgICAgcmV0dXJu
IE5vbmUKIAogICAgIGRlZiBleHBlY3RlZF9jaGVja3N1bShzZWxmLCB0ZXN0X25hbWUpOgogICAg
ICAgICAiIiJSZXR1cm5zIHRoZSBjaGVja3N1bSBvZiB0aGUgaW1hZ2Ugd2UgZXhwZWN0IHRoZSB0
ZXN0IHRvIHByb2R1Y2UsIG9yIE5vbmUgaWYgaXQgaXMgYSB0ZXh0LW9ubHkgdGVzdC4iIiIKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWVyaWVzLnB5
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXJpZXMucHkKaW5kZXgg
M2MxMzc1ZTRjM2I3ZWEyYThhZjllYTA4YTI0NjllOWFlMzk0Y2FmMy4uYjYxY2U5ZTg4ODhlNTI5
N2Y0ODE4NTU2OTk0ZGMwYjNhYTY1ZDRhYSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS90b29sL2NvbW1hbmRzL3F1ZXJpZXMucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS90b29sL2NvbW1hbmRzL3F1ZXJpZXMucHkKQEAgLTI5LDYgKzI5LDcgQEAKIAogCiBpbXBvcnQg
Zm5tYXRjaAoraW1wb3J0IHJlCiAKIGZyb20gb3B0cGFyc2UgaW1wb3J0IG1ha2Vfb3B0aW9uCiAK
QEAgLTQ4OCwzICs0ODksNjcgQEAgY2xhc3MgUHJpbnRFeHBlY3RhdGlvbnMoQWJzdHJhY3REZWNs
YXJhdGl2ZUNvbW1hbmQpOgogICAgICAgICAgICAgaWYgc2VsZi5zaG91bGRfcHJpbnRfZXhwZWN0
YXRpb24ob3B0aW9ucyk6CiAgICAgICAgICAgICAgICAgcmVzICs9ICcgPSAnICsgZXhwZWN0YXRp
b25zLmdldF9leHBlY3RhdGlvbnNfc3RyaW5nKHRlc3RfbmFtZSkKICAgICAgICAgICAgIHByaW50
IHJlcworCisKK2NsYXNzIFByaW50QmFzZWxpbmVzKEFic3RyYWN0RGVjbGFyYXRpdmVDb21tYW5k
KToKKyAgICBuYW1lID0gJ3ByaW50LWJhc2VsaW5lcycKKyAgICBoZWxwX3RleHQgPSAnUHJpbnRz
IHRoZSBiYXNlbGluZSBsb2NhdGlvbnMgZm9yIGdpdmVuIHRlc3Qocykgb24gdGhlIGdpdmVuIHBv
cnQocyknCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIG9wdGlvbnMgPSBbCisg
ICAgICAgICAgICBtYWtlX29wdGlvbignLXAnLCAnLS1wbGF0Zm9ybScsIGFjdGlvbj0nc3RvcmUn
LAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncGxhdGZvcm0vcG9ydChzKSB0byBkaXNw
bGF5IGV4cGVjdGF0aW9ucyBmb3IuIFVzZSBnbG9iLXN0eWxlIHdpbGRjYXJkcyBmb3IgbXVsdGlw
bGUgcG9ydHMgKG5vdGUgdGhhdCB0aGF0IHdpbGwgaW1wbHkgLS1jc3YpJyksCisgICAgICAgICAg
ICBtYWtlX29wdGlvbignLS1hbGwnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNl
LAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nZGlzcGxheSB0aGUgYmFzZWxpbmVzIGZv
ciAqYWxsKiB0ZXN0cycpLAorICAgICAgICAgICAgbWFrZV9vcHRpb24oJy0tY3N2JywgYWN0aW9u
PSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhl
bHA9J1ByaW50IGEgQ1NWLXN0eWxlIHJlcG9ydCB0aGF0IGluY2x1ZGVzIHRoZSBwb3J0IG5hbWUs
IHRlc3RfbmFtZSwgdGVzdCBwbGF0Zm9ybSwgYmFzZWxpbmUgdHlwZSwgYmFzZWxpbmUgbG9jYXRp
b24sIGFuZCBiYXNlbGluZSBwbGF0Zm9ybScpLAorICAgICAgICAgICAgbWFrZV9vcHRpb24oJy0t
aW5jbHVkZS12aXJ0dWFsLXRlc3RzJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGhlbHA9J0luY2x1ZGUgdmlydHVhbCB0ZXN0cycpLAorICAgICAgICBdCisg
ICAgICAgIEFic3RyYWN0RGVjbGFyYXRpdmVDb21tYW5kLl9faW5pdF9fKHNlbGYsIG9wdGlvbnM9
b3B0aW9ucykKKyAgICAgICAgc2VsZi5fcGxhdGZvcm1fcmVnZXhwID0gcmUuY29tcGlsZSgncGxh
dGZvcm0vKFteXC9dKykvKC4rKScpCisKKyAgICBkZWYgZXhlY3V0ZShzZWxmLCBvcHRpb25zLCBh
cmdzLCB0b29sKToKKyAgICAgICAgaWYgbm90IGFyZ3MgYW5kIG5vdCBvcHRpb25zLmFsbDoKKyAg
ICAgICAgICAgIHByaW50ICJZb3UgbXVzdCBlaXRoZXIgc3BlY2lmeSBvbmUgb3IgbW9yZSB0ZXN0
IHBhdGhzIG9yIC0tYWxsLiIKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGRlZmF1bHRf
cG9ydCA9IHRvb2wucG9ydF9mYWN0b3J5LmdldCgpCisgICAgICAgIGlmIG9wdGlvbnMucGxhdGZv
cm06CisgICAgICAgICAgICBwb3J0X25hbWVzID0gZm5tYXRjaC5maWx0ZXIodG9vbC5wb3J0X2Zh
Y3RvcnkuYWxsX3BvcnRfbmFtZXMoKSwgb3B0aW9ucy5wbGF0Zm9ybSkKKyAgICAgICAgICAgIGlm
IG5vdCBwb3J0X25hbWVzOgorICAgICAgICAgICAgICAgIHByaW50ICJObyBwb3J0IG5hbWVzIG1h
dGNoICclcyciICUgb3B0aW9ucy5wbGF0Zm9ybQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
cG9ydF9uYW1lcyA9IFtkZWZhdWx0X3BvcnQubmFtZSgpXQorCisgICAgICAgIGlmIGxlbihwb3J0
X25hbWVzKSA+IDE6CisgICAgICAgICAgICBvcHRpb25zLmNzdiA9IFRydWUKKworICAgICAgICBp
ZiBvcHRpb25zLmluY2x1ZGVfdmlydHVhbF90ZXN0czoKKyAgICAgICAgICAgIHRlc3RzID0gc29y
dGVkKGRlZmF1bHRfcG9ydC50ZXN0cyhhcmdzKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
ICMgRklYTUU6IG1ha2UgcmVhbF90ZXN0cygpIGEgcHVibGljIG1ldGhvZC4KKyAgICAgICAgICAg
IHRlc3RzID0gc29ydGVkKGRlZmF1bHRfcG9ydC5fcmVhbF90ZXN0cyhhcmdzKSkKKworICAgICAg
ICBpZiBub3Qgb3B0aW9ucy5jc3Y6CisgICAgICAgICAgICBwcmludCAiLy8gRm9yICVzIiAlIHBv
cnRfbmFtZXNbMF0KKworICAgICAgICBmb3IgcG9ydF9uYW1lIGluIHBvcnRfbmFtZXM6CisgICAg
ICAgICAgICBwb3J0ID0gdG9vbC5wb3J0X2ZhY3RvcnkuZ2V0KHBvcnRfbmFtZSkKKyAgICAgICAg
ICAgIGZvciB0ZXN0X25hbWUgaW4gdGVzdHM6CisgICAgICAgICAgICAgICAgc2VsZi5fcHJpbnRf
YmFzZWxpbmVzKG9wdGlvbnMsIHBvcnRfbmFtZSwgdGVzdF9uYW1lLCBwb3J0LmV4cGVjdGVkX2Jh
c2VsaW5lX2RpY3QodGVzdF9uYW1lKSkKKworICAgIGRlZiBfcHJpbnRfYmFzZWxpbmVzKHNlbGYs
IG9wdGlvbnMsIHBvcnRfbmFtZSwgdGVzdF9uYW1lLCBiYXNlbGluZXMpOgorICAgICAgICBmb3Ig
ZXh0ZW5zaW9uLCBiYXNlbGluZV9sb2NhdGlvbiBpbiBiYXNlbGluZXMuaXRlcml0ZW1zKCk6Cisg
ICAgICAgICAgICBpZiBiYXNlbGluZV9sb2NhdGlvbjoKKyAgICAgICAgICAgICAgICBpZiBvcHRp
b25zLmNzdjoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIiVzLCVzLCVzLCVzLCVzLCVzIiAl
IChwb3J0X25hbWUsIHRlc3RfbmFtZSwgc2VsZi5fcGxhdGZvcm1fZm9yX3BhdGgodGVzdF9uYW1l
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRl
bnNpb24sIGJhc2VsaW5lX2xvY2F0aW9uLCBzZWxmLl9wbGF0Zm9ybV9mb3JfcGF0aChiYXNlbGlu
ZV9sb2NhdGlvbikpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAg
cHJpbnQgYmFzZWxpbmVfbG9jYXRpb24KKworICAgIGRlZiBfcGxhdGZvcm1fZm9yX3BhdGgoc2Vs
ZiwgcmVscGF0aCk6CisgICAgICAgIG0gPSBzZWxmLl9wbGF0Zm9ybV9yZWdleHAubWF0Y2gocmVs
cGF0aCkKKyAgICAgICAgaWYgbToKKyAgICAgICAgICAgIHJldHVybiBtLmdyb3VwKDEpCisgICAg
ICAgIHJldHVybiBOb25lCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wv
Y29tbWFuZHMvcXVlcmllc191bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9v
bC9jb21tYW5kcy9xdWVyaWVzX3VuaXR0ZXN0LnB5CmluZGV4IGZlMTNhNGM1NDgwOTQzZTFhNGNl
M2M5ODU1MjQxMTQ2YTFiNGU1NzUuLmVmMmUyZDEwMTkzNWU0YzVjZTc1NWIxNWNmODc4MzdhMzNj
ODFjYTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9x
dWVyaWVzX3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21t
YW5kcy9xdWVyaWVzX3VuaXR0ZXN0LnB5CkBAIC0yOSwxMCArMjksMTEgQEAKIGltcG9ydCB1bml0
dGVzdAogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5uZXQuYnVnemlsbGEgaW1wb3J0IEJ1Z3ppbGxh
Citmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ub3V0cHV0Y2FwdHVyZSBpbXBvcnQgT3V0cHV0
Q2FwdHVyZQogZnJvbSB3ZWJraXRweS50aGlyZHBhcnR5Lm1vY2sgaW1wb3J0IE1vY2sKIGZyb20g
d2Via2l0cHkudG9vbC5jb21tYW5kcy5jb21tYW5kdGVzdCBpbXBvcnQgQ29tbWFuZHNUZXN0CiBm
cm9tIHdlYmtpdHB5LnRvb2wuY29tbWFuZHMucXVlcmllcyBpbXBvcnQgKgotZnJvbSB3ZWJraXRw
eS50b29sLm1vY2t0b29sIGltcG9ydCBNb2NrVG9vbAorZnJvbSB3ZWJraXRweS50b29sLm1vY2t0
b29sIGltcG9ydCBNb2NrVG9vbCwgTW9ja09wdGlvbnMKIAogCiBjbGFzcyBNb2NrVGVzdFBvcnQx
KG9iamVjdCk6CkBAIC0xMTUsMyArMTE2LDQ2IEBAIGNsYXNzIEZhaWx1cmVSZWFzb25UZXN0KHVu
aXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiTUVTU0FHRSIp
CiAgICAgICAgIHRvb2wuY2hlY2tvdXQoKS5jb21taXRfaW5mb19mb3JfcmV2aXNpb24gPSByYWlz
aW5nX21vY2sKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoY29tbWFuZC5fYmxhbWVfbGluZV9m
b3JfcmV2aXNpb24oTm9uZSksICJGQUlMRUQgdG8gZmV0Y2ggQ29tbWl0SW5mbyBmb3Igck5vbmUs
IGV4Y2VwdGlvbjogTUVTU0FHRSIpCisKKworY2xhc3MgUHJpbnRCYXNlbGluZXNUZXN0KHVuaXR0
ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYub2MgPSBO
b25lCisgICAgICAgIHNlbGYudG9vbCA9IE1vY2tUb29sKCkKKyAgICAgICAgc2VsZi50ZXN0X3Bv
cnQgPSBzZWxmLnRvb2wucG9ydF9mYWN0b3J5LmdldCgndGVzdC13aW4teHAnKQorICAgICAgICBz
ZWxmLnRvb2wucG9ydF9mYWN0b3J5LmdldCA9IGxhbWJkYSBwb3J0X25hbWU9Tm9uZTogc2VsZi50
ZXN0X3BvcnQKKyAgICAgICAgc2VsZi50b29sLnBvcnRfZmFjdG9yeS5hbGxfcG9ydF9uYW1lcyA9
IGxhbWJkYTogWyd0ZXN0LXdpbi14cCddCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAg
ICAgIGlmIHNlbGYub2M6CisgICAgICAgICAgICBzZWxmLnJlc3RvcmVfb3V0cHV0KCkKKworICAg
IGRlZiBjYXB0dXJlX291dHB1dChzZWxmKToKKyAgICAgICAgc2VsZi5vYyA9IE91dHB1dENhcHR1
cmUoKQorICAgICAgICBzZWxmLm9jLmNhcHR1cmVfb3V0cHV0KCkKKworICAgIGRlZiByZXN0b3Jl
X291dHB1dChzZWxmKToKKyAgICAgICAgc3Rkb3V0LCBzdGRlcnIsIGxvZ3MgPSBzZWxmLm9jLnJl
c3RvcmVfb3V0cHV0KCkKKyAgICAgICAgc2VsZi5vYyA9IE5vbmUKKyAgICAgICAgcmV0dXJuIChz
dGRvdXQsIHN0ZGVyciwgbG9ncykKKworICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgorICAgICAg
ICBjb21tYW5kID0gUHJpbnRCYXNlbGluZXMoKQorICAgICAgICBjb21tYW5kLmJpbmRfdG9fdG9v
bChzZWxmLnRvb2wpCisgICAgICAgIHNlbGYuY2FwdHVyZV9vdXRwdXQoKQorICAgICAgICBjb21t
YW5kLmV4ZWN1dGUoTW9ja09wdGlvbnMoYWxsPUZhbHNlLCBpbmNsdWRlX3ZpcnR1YWxfdGVzdHM9
RmFsc2UsIGNzdj1GYWxzZSwgcGxhdGZvcm09Tm9uZSksIFsncGFzc2VzL3RleHQuaHRtbCddLCBz
ZWxmLnRvb2wpCisgICAgICAgIHN0ZG91dCwgXywgXyA9IHNlbGYucmVzdG9yZV9vdXRwdXQoKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzdGRvdXQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICgnLy8gRm9yIHRlc3Qtd2luLXhwXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAn
cGFzc2VzL3RleHQtZXhwZWN0ZWQudHh0XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAn
cGFzc2VzL3RleHQtZXhwZWN0ZWQucG5nXG4nKSkKKworICAgIGRlZiB0ZXN0X2NzdihzZWxmKToK
KyAgICAgICAgY29tbWFuZCA9IFByaW50QmFzZWxpbmVzKCkKKyAgICAgICAgY29tbWFuZC5iaW5k
X3RvX3Rvb2woc2VsZi50b29sKQorICAgICAgICBzZWxmLmNhcHR1cmVfb3V0cHV0KCkKKyAgICAg
ICAgY29tbWFuZC5leGVjdXRlKE1vY2tPcHRpb25zKGFsbD1GYWxzZSwgcGxhdGZvcm09Jyp4cCcs
IGNzdj1UcnVlLCBpbmNsdWRlX3ZpcnR1YWxfdGVzdHM9RmFsc2UpLCBbJ3Bhc3Nlcy90ZXh0Lmh0
bWwnXSwgc2VsZi50b29sKQorICAgICAgICBzdGRvdXQsIF8sIF8gPSBzZWxmLnJlc3RvcmVfb3V0
cHV0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc3Rkb3V0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAoJ3Rlc3Qtd2luLXhwLHBhc3Nlcy90ZXh0Lmh0bWwsTm9uZSx0eHQscGFzc2Vz
L3RleHQtZXhwZWN0ZWQudHh0LE5vbmVcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICd0
ZXN0LXdpbi14cCxwYXNzZXMvdGV4dC5odG1sLE5vbmUscG5nLHBhc3Nlcy90ZXh0LWV4cGVjdGVk
LnBuZyxOb25lXG4nKSkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>136117</attachid>
            <date>2012-04-06 18:33:38 -0700</date>
            <delta_ts>2012-04-08 12:56:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-83348-20120406183337.patch</filename>
            <type>text/plain</type>
            <size>11453</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEzNTA3CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYzM2ZmVjMDBiNWNjZmY0Mzc0Y2QyNTM0OTljNDBhZmY4
YjkxNDBjMi4uMmU2ODAxZmRjZDczYjI0OGJmYWEyNGZiYTY1YzdiMmYyODMxM2Q2YSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQw
IEBACiAyMDEyLTA0LTA2ICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgogCisg
ICAgICAgIGFkZCBhIHdlYmtpdC1wYXRjaCBwcmludC1iYXNlbGluZXMgY29tbWFuZAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODMzNDgKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGFkZHMgYSBzaW1w
bGUgJ3ByaW50LWJhc2VsaW5lcycgY29tbWFuZCB0byB3ZWJraXQtcGF0Y2gKKyAgICAgICAgdGhh
dCBjYW4gYmUgdXNlZCBpbiBvbmUgb2YgdHdvIGZvcm1zOiB0byBwcmludCB3aGVyZSB0aGUKKyAg
ICAgICAgYmFzZWxpbmVzIGZvciBhIGdpdmVuIHRlc3QgKG9yIHNldCBvZiB0ZXN0cykgb24gYSBz
aW5nbGUgcG9ydAorICAgICAgICB3aWxsIGJlIGZvdW5kLCBvciB0byBnZW5lcmF0ZSBhIHJlcG9y
dCBmb3IgbXVsdGlwbGUgcG9ydHMuCisKKyAgICAgICAgRXhhbXBsZSBvZiB0aGUgZm9ybWVyOgor
CisgICAgICAgICQgd2Via2l0LXBhdGNoIHByaW50LWJhc2VsaW5lcyBmYXN0L2h0bWwva2V5Z2Vu
Lmh0bWwKKyAgICAgICAgLy8gRm9yIG1hYy1zbm93bGVvcGFyZAorICAgICAgICBwbGF0Zm9ybS9t
YWMvZmFzdC9odG1sL2tleWdlbi1leHBlY3RlZC50eHQKKyAgICAgICAgcGxhdGZvcm0vbWFjL2Zh
c3QvaHRtbC9rZXlnZW4tZXhwZWN0ZWQucG5nCisgICAgICAgICQKKworICAgICAgICBUaGUgbGF0
dGVyIGlzIG1vc3QgdXNlZnVsIGZvciBmaW5kaW5nIG91dCB3aGljaCBmYWxsYmFjayBkaXJzIGFy
ZQorICAgICAgICB1c2VkIGJ5IHdoaWNoIHBvcnRzIGZvciB3aGljaCB0ZXN0cywgZm9yIGV4YW1w
bGUsCisgICAgICAgICdjaHJvbWl1bS1tYWMtbGVvcGFyZCcgdXNlcyAxMDAgcmVzdWx0cyBmcm9t
ICdwbGF0Zm9ybS9tYWMvbGVvcGFyZCcuCisgICAgICAgIE5vIGV4YW1wbGUgb3V0cHV0IGlzIGdp
dmVuIGJlY2F1c2UgdGhlIHJlcG9ydHMgYXJlIHByZXR0eSB3b3JkeSA6KS4KKworICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weToKKyAgICAgICAgKFBv
cnQuYmFzZWxpbmVfZXh0ZW5zaW9ucyk6IEFkZGVkLgorICAgICAgICAoUG9ydC5leHBlY3RlZF9i
YXNlbGluZV9kaWN0KTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL2Nv
bW1hbmRzL3F1ZXJpZXMucHk6CisgICAgICAgIChQcmludEJhc2VsaW5lcyk6CisgICAgICAgIChQ
cmludEJhc2VsaW5lcy5fX2luaXRfXyk6CisgICAgICAgIChQcmludEJhc2VsaW5lcy5leGVjdXRl
KToKKyAgICAgICAgKFByaW50QmFzZWxpbmVzLl9wcmludF9iYXNlbGluZXMpOgorICAgICAgICAo
UHJpbnRCYXNlbGluZXMuX3BsYXRmb3JtX2Zvcl9wYXRoKToKKworMjAxMi0wNC0wNiAgRGlyayBQ
cmFua2UgIDxkcHJhbmtlQGNocm9taXVtLm9yZz4KKwogICAgICAgICB3ZWJraXQtcGF0Y2g6IGFk
ZCBhIHByaW50LWV4cGVjdGF0aW9ucyBjb21tYW5kCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MzM0NwogCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkKaW5kZXggY2VlZmVjNzViZDZkZDkxZWUyNDQw
NWE0OGNjYmVjZTBhOGQwMzg1OS4uOTA5MWQ0ZDRjMDI0OGU4MTI4Njc3OWRiNzZjZjk4NzcxYmVk
ZGY3OCAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9y
dC9iYXNlLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
YmFzZS5weQpAQCAtMzA2LDYgKzMwNiwyNyBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgICAg
ICMgRklYTUU6IFNlZW1zIHdlIHNob3VsZCBnZXQgdGhpcyBmcm9tIHRoZSBQb3J0J3MgRHJpdmVy
IGNsYXNzLgogICAgICAgICByZXR1cm4gIkR1bXBSZW5kZXJUcmVlIgogCisgICAgZGVmIGV4cGVj
dGVkX2Jhc2VsaW5lX2RpY3Qoc2VsZiwgdGVzdF9uYW1lKToKKyAgICAgICAgIiIiUmV0dXJucyBh
IGRpY3QgbWFwcGluZyBiYXNlbGluZSBzdWZmaXggdG8gcmVsYXRpdmUgcGF0aCBmb3IgZWFjaCBi
YXNlbGluZSBpbgorICAgICAgICBhIHRlc3QuIEZvciByZWZ0ZXN0cywgaXQgcmV0dXJucyAiLj09
IiBvciAiLiE9IiBpbnN0ZWFkIG9mIHRoZSBzdWZmaXguIiIiCisgICAgICAgICMgRklYTUU6IFRo
ZSBuYW1lIHNpbWlsYXJpdHkgYmV0d2VlbiB0aGlzIGFuZCBleHBlY3RlZF9iYXNlbGluZXMoKSBi
ZWxvdywgaXMgdW5mb3J0dW5hdGUuCisgICAgICAgICMgV2Ugc2hvdWxkIHByb2JhYmx5IHJlbmFt
ZSB0aGVtIGJvdGguCisgICAgICAgIGJhc2VsaW5lX2RpY3QgPSB7fQorICAgICAgICByZWZlcmVu
Y2VfZmlsZXMgPSBzZWxmLnJlZmVyZW5jZV9maWxlcyh0ZXN0X25hbWUpCisgICAgICAgIGlmIHJl
ZmVyZW5jZV9maWxlczoKKyAgICAgICAgICAgICMgRklYTUU6IEhvdyBzaG91bGQgdGhpcyBoYW5k
bGUgbW9yZSB0aGFuIG9uZSB0eXBlIG9mIHJlZnRlc3Q/CisgICAgICAgICAgICBiYXNlbGluZV9k
aWN0WycuJyArIHJlZmVyZW5jZV9maWxlc1swXVswXV0gPSBzZWxmLnJlbGF0aXZlX3Rlc3RfZmls
ZW5hbWUocmVmZXJlbmNlX2ZpbGVzWzBdWzFdKQorCisgICAgICAgIGZvciBleHRlbnNpb24gaW4g
c2VsZi5iYXNlbGluZV9leHRlbnNpb25zKCk6CisgICAgICAgICAgICBwYXRoID0gc2VsZi5leHBl
Y3RlZF9maWxlbmFtZSh0ZXN0X25hbWUsIGV4dGVuc2lvbiwgcmV0dXJuX2RlZmF1bHQ9RmFsc2Up
CisgICAgICAgICAgICBiYXNlbGluZV9kaWN0W2V4dGVuc2lvbl0gPSBzZWxmLnJlbGF0aXZlX3Rl
c3RfZmlsZW5hbWUocGF0aCkgaWYgcGF0aCBlbHNlIHBhdGgKKworICAgICAgICByZXR1cm4gYmFz
ZWxpbmVfZGljdAorCisgICAgZGVmIGJhc2VsaW5lX2V4dGVuc2lvbnMoc2VsZik6CisgICAgICAg
ICIiIlJldHVybnMgYSB0dXBsZSBvZiBhbGwgb2YgdGhlIG5vbi1yZWZ0ZXN0IGJhc2VsaW5lIGV4
dGVuc2lvbnMgd2UgdXNlLiBUaGUgZXh0ZW5zaW9ucyBpbmNsdWRlIHRoZSBsZWFkaW5nICcuJy4i
IiIKKyAgICAgICAgcmV0dXJuICgnLndhdicsICcud2ViYXJjaGl2ZScsICcudHh0JywgJy5wbmcn
KQorCiAgICAgZGVmIGV4cGVjdGVkX2Jhc2VsaW5lcyhzZWxmLCB0ZXN0X25hbWUsIHN1ZmZpeCwg
YWxsX2Jhc2VsaW5lcz1GYWxzZSk6CiAgICAgICAgICIiIkdpdmVuIGEgdGVzdCBuYW1lLCBmaW5k
cyB3aGVyZSB0aGUgYmFzZWxpbmUgcmVzdWx0cyBhcmUgbG9jYXRlZC4KIApAQCAtMzU1LDcgKzM3
Niw3IEBAIGNsYXNzIFBvcnQob2JqZWN0KToKIAogICAgICAgICByZXR1cm4gWyhOb25lLCBiYXNl
bGluZV9maWxlbmFtZSldCiAKLSAgICBkZWYgZXhwZWN0ZWRfZmlsZW5hbWUoc2VsZiwgdGVzdF9u
YW1lLCBzdWZmaXgpOgorICAgIGRlZiBleHBlY3RlZF9maWxlbmFtZShzZWxmLCB0ZXN0X25hbWUs
IHN1ZmZpeCwgcmV0dXJuX2RlZmF1bHQ9VHJ1ZSk6CiAgICAgICAgICIiIkdpdmVuIGEgdGVzdCBu
YW1lLCByZXR1cm5zIGFuIGFic29sdXRlIHBhdGggdG8gaXRzIGV4cGVjdGVkIHJlc3VsdHMuCiAK
ICAgICAgICAgSWYgbm8gZXhwZWN0ZWQgcmVzdWx0cyBhcmUgZm91bmQgaW4gYW55IG9mIHRoZSBz
ZWFyY2hlZCBkaXJlY3RvcmllcywKQEAgLTM3MCw2ICszOTEsOCBAQCBjbGFzcyBQb3J0KG9iamVj
dCk6CiAgICAgICAgIHBsYXRmb3JtOiB0aGUgbW9zdC1zcGVjaWZpYyBkaXJlY3RvcnkgbmFtZSB0
byB1c2UgdG8gYnVpbGQgdGhlCiAgICAgICAgICAgICBzZWFyY2ggbGlzdCBvZiBkaXJlY3Rvcmll
cywgZS5nLiwgJ2Nocm9taXVtLXdpbicsIG9yCiAgICAgICAgICAgICAnY2hyb21pdW0tY2ctbWFj
LWxlb3BhcmQnICh3ZSBmb2xsb3cgdGhlIFdlYktpdCBmb3JtYXQpCisgICAgICAgIHJldHVybl9k
ZWZhdWx0OiBpZiBUcnVlLCByZXR1cm5zIHRoZSBwYXRoIHRvIHRoZSBnZW5lcmljIGV4cGVjdGF0
aW9uIGlmIG5vdGhpbmcKKyAgICAgICAgICAgIGVsc2UgaXMgZm91bmQ7IGlmIEZhbHNlLCByZXR1
cm5zIE5vbmUuCiAKICAgICAgICAgVGhpcyByb3V0aW5lIGlzIGdlbmVyaWMgYnV0IGlzIGltcGxl
bWVudGVkIGhlcmUgdG8gbGl2ZSBhbG9uZ3NpZGUKICAgICAgICAgdGhlIG90aGVyIGJhc2VsaW5l
IGFuZCBmaWxlbmFtZSBtYW5pcHVsYXRpb24gcm91dGluZXMuCkBAIC0zODMsNyArNDA2LDkgQEAg
Y2xhc3MgUG9ydChvYmplY3QpOgogICAgICAgICBpZiBhY3R1YWxfdGVzdF9uYW1lOgogICAgICAg
ICAgICAgcmV0dXJuIHNlbGYuZXhwZWN0ZWRfZmlsZW5hbWUoYWN0dWFsX3Rlc3RfbmFtZSwgc3Vm
Zml4KQogCi0gICAgICAgIHJldHVybiBzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5sYXlvdXRf
dGVzdHNfZGlyKCksIGJhc2VsaW5lX2ZpbGVuYW1lKQorICAgICAgICBpZiByZXR1cm5fZGVmYXVs
dDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5sYXlvdXRf
dGVzdHNfZGlyKCksIGJhc2VsaW5lX2ZpbGVuYW1lKQorICAgICAgICByZXR1cm4gTm9uZQogCiAg
ICAgZGVmIGV4cGVjdGVkX2NoZWNrc3VtKHNlbGYsIHRlc3RfbmFtZSk6CiAgICAgICAgICIiIlJl
dHVybnMgdGhlIGNoZWNrc3VtIG9mIHRoZSBpbWFnZSB3ZSBleHBlY3QgdGhlIHRlc3QgdG8gcHJv
ZHVjZSwgb3IgTm9uZSBpZiBpdCBpcyBhIHRleHQtb25seSB0ZXN0LiIiIgpkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXJpZXMucHkgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvcXVlcmllcy5weQppbmRleCA0YzE5YjM4YTlk
MTJjZWVjNzIzMjUwZTQ5YmQ0YjMwNTg2Yzg5M2U0Li43MmY3OTRjNDYwNDBkZDA3NWUwOWVlNjgz
ZDcwMDM5MjI3N2UxOGFmIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wv
Y29tbWFuZHMvcXVlcmllcy5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29t
bWFuZHMvcXVlcmllcy5weQpAQCAtMjksNiArMjksNyBAQAogCiAKIGltcG9ydCBmbm1hdGNoCitp
bXBvcnQgcmUKIAogZnJvbSBvcHRwYXJzZSBpbXBvcnQgbWFrZV9vcHRpb24KIApAQCAtNDkwLDMg
KzQ5MSw2OCBAQCBjbGFzcyBQcmludEV4cGVjdGF0aW9ucyhBYnN0cmFjdERlY2xhcmF0aXZlQ29t
bWFuZCk6CiAgICAgICAgICAgICAgICAgcG9ydC50ZXN0X2V4cGVjdGF0aW9uc19vdmVycmlkZXMo
KSwKICAgICAgICAgICAgICAgICBwb3J0LnNraXBwZWRfdGVzdHModGVzdHMpKS5tb2RlbCgpCiAg
ICAgICAgIHJldHVybiBzZWxmLl9leHBlY3RhdGlvbl9tb2RlbHNbZXhwZWN0YXRpb25zX3BhdGhd
CisKKworY2xhc3MgUHJpbnRCYXNlbGluZXMoQWJzdHJhY3REZWNsYXJhdGl2ZUNvbW1hbmQpOgor
ICAgIG5hbWUgPSAncHJpbnQtYmFzZWxpbmVzJworICAgIGhlbHBfdGV4dCA9ICdQcmludHMgdGhl
IGJhc2VsaW5lIGxvY2F0aW9ucyBmb3IgZ2l2ZW4gdGVzdChzKSBvbiB0aGUgZ2l2ZW4gcG9ydChz
KScKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgb3B0aW9ucyA9IFsKKyAgICAg
ICAgICAgIG1ha2Vfb3B0aW9uKCctcCcsICctLXBsYXRmb3JtJywgYWN0aW9uPSdzdG9yZScsCisg
ICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdwbGF0Zm9ybS9wb3J0KHMpIHRvIGRpc3BsYXkg
ZXhwZWN0YXRpb25zIGZvci4gVXNlIGdsb2Itc3R5bGUgd2lsZGNhcmRzIGZvciBtdWx0aXBsZSBw
b3J0cyAobm90ZSB0aGF0IHRoYXQgd2lsbCBpbXBseSAtLWNzdiknKSwKKyAgICAgICAgICAgIG1h
a2Vfb3B0aW9uKCctLWFsbCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCisg
ICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdkaXNwbGF5IHRoZSBiYXNlbGluZXMgZm9yICph
bGwqIHRlc3RzJyksCisgICAgICAgICAgICBtYWtlX29wdGlvbignLS1jc3YnLCBhY3Rpb249J3N0
b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0n
UHJpbnQgYSBDU1Ytc3R5bGUgcmVwb3J0IHRoYXQgaW5jbHVkZXMgdGhlIHBvcnQgbmFtZSwgdGVz
dF9uYW1lLCB0ZXN0IHBsYXRmb3JtLCBiYXNlbGluZSB0eXBlLCBiYXNlbGluZSBsb2NhdGlvbiwg
YW5kIGJhc2VsaW5lIHBsYXRmb3JtJyksCisgICAgICAgICAgICBtYWtlX29wdGlvbignLS1pbmNs
dWRlLXZpcnR1YWwtdGVzdHMnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAg
ICAgICAgICAgaGVscD0nSW5jbHVkZSB2aXJ0dWFsIHRlc3RzJyksCisgICAgICAgIF0KKyAgICAg
ICAgQWJzdHJhY3REZWNsYXJhdGl2ZUNvbW1hbmQuX19pbml0X18oc2VsZiwgb3B0aW9ucz1vcHRp
b25zKQorICAgICAgICBzZWxmLl9wbGF0Zm9ybV9yZWdleHAgPSByZS5jb21waWxlKCdwbGF0Zm9y
bS8oW15cL10rKS8oLispJykKKworICAgIGRlZiBleGVjdXRlKHNlbGYsIG9wdGlvbnMsIGFyZ3Ms
IHRvb2wpOgorICAgICAgICBpZiBub3QgYXJncyBhbmQgbm90IG9wdGlvbnMuYWxsOgorICAgICAg
ICAgICAgcHJpbnQgIllvdSBtdXN0IGVpdGhlciBzcGVjaWZ5IG9uZSBvciBtb3JlIHRlc3QgcGF0
aHMgb3IgLS1hbGwuIgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZGVmYXVsdF9wb3J0
ID0gdG9vbC5wb3J0X2ZhY3RvcnkuZ2V0KCkKKyAgICAgICAgaWYgb3B0aW9ucy5wbGF0Zm9ybToK
KyAgICAgICAgICAgIHBvcnRfbmFtZXMgPSBmbm1hdGNoLmZpbHRlcih0b29sLnBvcnRfZmFjdG9y
eS5hbGxfcG9ydF9uYW1lcygpLCBvcHRpb25zLnBsYXRmb3JtKQorICAgICAgICAgICAgaWYgbm90
IHBvcnRfbmFtZXM6CisgICAgICAgICAgICAgICAgcHJpbnQgIk5vIHBvcnQgbmFtZXMgbWF0Y2gg
JyVzJyIgJSBvcHRpb25zLnBsYXRmb3JtCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwb3J0
X25hbWVzID0gW2RlZmF1bHRfcG9ydC5uYW1lKCldCisKKyAgICAgICAgaWYgbGVuKHBvcnRfbmFt
ZXMpID4gMToKKyAgICAgICAgICAgIG9wdGlvbnMuY3N2ID0gVHJ1ZQorCisgICAgICAgIGlmIG9w
dGlvbnMuaW5jbHVkZV92aXJ0dWFsX3Rlc3RzOgorICAgICAgICAgICAgdGVzdHMgPSBzb3J0ZWQo
ZGVmYXVsdF9wb3J0LnRlc3RzKGFyZ3MpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBG
SVhNRTogbWFrZSByZWFsX3Rlc3RzKCkgYSBwdWJsaWMgbWV0aG9kLgorICAgICAgICAgICAgdGVz
dHMgPSBzb3J0ZWQoZGVmYXVsdF9wb3J0Ll9yZWFsX3Rlc3RzKGFyZ3MpKQorCisgICAgICAgIGlm
IG5vdCBvcHRpb25zLmNzdjoKKyAgICAgICAgICAgIHByaW50ICIvLyBGb3IgJXMiICUgcG9ydF9u
YW1lc1swXQorCisgICAgICAgIGZvciBwb3J0X25hbWUgaW4gcG9ydF9uYW1lczoKKyAgICAgICAg
ICAgIHBvcnQgPSB0b29sLnBvcnRfZmFjdG9yeS5nZXQocG9ydF9uYW1lKQorICAgICAgICAgICAg
Zm9yIHRlc3RfbmFtZSBpbiB0ZXN0czoKKyAgICAgICAgICAgICAgICBzZWxmLl9wcmludF9iYXNl
bGluZXMob3B0aW9ucywgcG9ydF9uYW1lLCB0ZXN0X25hbWUsIHBvcnQuZXhwZWN0ZWRfYmFzZWxp
bmVfZGljdCh0ZXN0X25hbWUpKQorCisgICAgZGVmIF9wcmludF9iYXNlbGluZXMoc2VsZiwgb3B0
aW9ucywgcG9ydF9uYW1lLCB0ZXN0X25hbWUsIGJhc2VsaW5lcyk6CisgICAgICAgIGZvciBleHRl
bnNpb24gaW4gc29ydGVkKGJhc2VsaW5lcy5rZXlzKCkpOgorICAgICAgICAgICAgYmFzZWxpbmVf
bG9jYXRpb24gPSBiYXNlbGluZXNbZXh0ZW5zaW9uXQorICAgICAgICAgICAgaWYgYmFzZWxpbmVf
bG9jYXRpb246CisgICAgICAgICAgICAgICAgaWYgb3B0aW9ucy5jc3Y6CisgICAgICAgICAgICAg
ICAgICAgIHByaW50ICIlcywlcywlcywlcywlcywlcyIgJSAocG9ydF9uYW1lLCB0ZXN0X25hbWUs
IHNlbGYuX3BsYXRmb3JtX2Zvcl9wYXRoKHRlc3RfbmFtZSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uWzE6XSwgYmFzZWxpbmVfbG9j
YXRpb24sIHNlbGYuX3BsYXRmb3JtX2Zvcl9wYXRoKGJhc2VsaW5lX2xvY2F0aW9uKSkKKyAgICAg
ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBwcmludCBiYXNlbGluZV9sb2Nh
dGlvbgorCisgICAgZGVmIF9wbGF0Zm9ybV9mb3JfcGF0aChzZWxmLCByZWxwYXRoKToKKyAgICAg
ICAgbSA9IHNlbGYuX3BsYXRmb3JtX3JlZ2V4cC5tYXRjaChyZWxwYXRoKQorICAgICAgICBpZiBt
OgorICAgICAgICAgICAgcmV0dXJuIG0uZ3JvdXAoMSkKKyAgICAgICAgcmV0dXJuIE5vbmUKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9xdWVyaWVzX3Vu
aXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXJpZXNf
dW5pdHRlc3QucHkKaW5kZXggZmUxM2E0YzU0ODA5NDNlMWE0Y2UzYzk4NTUyNDExNDZhMWI0ZTU3
NS4uZDA0ZTAzMDBhNDJlZmE3NDhiZWQ1NTkzN2Y3YTg0NDJiNTg1MWVlMSAxMDA2NDQKLS0tIGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXJpZXNfdW5pdHRlc3QucHkK
KysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL3F1ZXJpZXNfdW5pdHRl
c3QucHkKQEAgLTI5LDEwICsyOSwxMSBAQAogaW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gd2Via2l0
cHkuY29tbW9uLm5ldC5idWd6aWxsYSBpbXBvcnQgQnVnemlsbGEKK2Zyb20gd2Via2l0cHkuY29t
bW9uLnN5c3RlbS5vdXRwdXRjYXB0dXJlIGltcG9ydCBPdXRwdXRDYXB0dXJlCiBmcm9tIHdlYmtp
dHB5LnRoaXJkcGFydHkubW9jayBpbXBvcnQgTW9jawogZnJvbSB3ZWJraXRweS50b29sLmNvbW1h
bmRzLmNvbW1hbmR0ZXN0IGltcG9ydCBDb21tYW5kc1Rlc3QKIGZyb20gd2Via2l0cHkudG9vbC5j
b21tYW5kcy5xdWVyaWVzIGltcG9ydCAqCi1mcm9tIHdlYmtpdHB5LnRvb2wubW9ja3Rvb2wgaW1w
b3J0IE1vY2tUb29sCitmcm9tIHdlYmtpdHB5LnRvb2wubW9ja3Rvb2wgaW1wb3J0IE1vY2tUb29s
LCBNb2NrT3B0aW9ucwogCiAKIGNsYXNzIE1vY2tUZXN0UG9ydDEob2JqZWN0KToKQEAgLTExNSwz
ICsxMTYsNDYgQEAgY2xhc3MgRmFpbHVyZVJlYXNvblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgog
ICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJNRVNTQUdFIikKICAgICAgICAgdG9vbC5jaGVj
a291dCgpLmNvbW1pdF9pbmZvX2Zvcl9yZXZpc2lvbiA9IHJhaXNpbmdfbW9jawogICAgICAgICBz
ZWxmLmFzc2VydEVxdWFscyhjb21tYW5kLl9ibGFtZV9saW5lX2Zvcl9yZXZpc2lvbihOb25lKSwg
IkZBSUxFRCB0byBmZXRjaCBDb21taXRJbmZvIGZvciByTm9uZSwgZXhjZXB0aW9uOiBNRVNTQUdF
IikKKworCitjbGFzcyBQcmludEJhc2VsaW5lc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAg
IGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5vYyA9IE5vbmUKKyAgICAgICAgc2VsZi50
b29sID0gTW9ja1Rvb2woKQorICAgICAgICBzZWxmLnRlc3RfcG9ydCA9IHNlbGYudG9vbC5wb3J0
X2ZhY3RvcnkuZ2V0KCd0ZXN0LXdpbi14cCcpCisgICAgICAgIHNlbGYudG9vbC5wb3J0X2ZhY3Rv
cnkuZ2V0ID0gbGFtYmRhIHBvcnRfbmFtZT1Ob25lOiBzZWxmLnRlc3RfcG9ydAorICAgICAgICBz
ZWxmLnRvb2wucG9ydF9mYWN0b3J5LmFsbF9wb3J0X25hbWVzID0gbGFtYmRhOiBbJ3Rlc3Qtd2lu
LXhwJ10KKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5vYzoKKyAg
ICAgICAgICAgIHNlbGYucmVzdG9yZV9vdXRwdXQoKQorCisgICAgZGVmIGNhcHR1cmVfb3V0cHV0
KHNlbGYpOgorICAgICAgICBzZWxmLm9jID0gT3V0cHV0Q2FwdHVyZSgpCisgICAgICAgIHNlbGYu
b2MuY2FwdHVyZV9vdXRwdXQoKQorCisgICAgZGVmIHJlc3RvcmVfb3V0cHV0KHNlbGYpOgorICAg
ICAgICBzdGRvdXQsIHN0ZGVyciwgbG9ncyA9IHNlbGYub2MucmVzdG9yZV9vdXRwdXQoKQorICAg
ICAgICBzZWxmLm9jID0gTm9uZQorICAgICAgICByZXR1cm4gKHN0ZG91dCwgc3RkZXJyLCBsb2dz
KQorCisgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CisgICAgICAgIGNvbW1hbmQgPSBQcmludEJh
c2VsaW5lcygpCisgICAgICAgIGNvbW1hbmQuYmluZF90b190b29sKHNlbGYudG9vbCkKKyAgICAg
ICAgc2VsZi5jYXB0dXJlX291dHB1dCgpCisgICAgICAgIGNvbW1hbmQuZXhlY3V0ZShNb2NrT3B0
aW9ucyhhbGw9RmFsc2UsIGluY2x1ZGVfdmlydHVhbF90ZXN0cz1GYWxzZSwgY3N2PUZhbHNlLCBw
bGF0Zm9ybT1Ob25lKSwgWydwYXNzZXMvdGV4dC5odG1sJ10sIHNlbGYudG9vbCkKKyAgICAgICAg
c3Rkb3V0LCBfLCBfID0gc2VsZi5yZXN0b3JlX291dHB1dCgpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKHN0ZG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCcvLyBGb3IgdGVzdC13
aW4teHBcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYXNzZXMvdGV4dC1leHBlY3Rl
ZC5wbmdcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYXNzZXMvdGV4dC1leHBlY3Rl
ZC50eHRcbicpKQorCisgICAgZGVmIHRlc3RfY3N2KHNlbGYpOgorICAgICAgICBjb21tYW5kID0g
UHJpbnRCYXNlbGluZXMoKQorICAgICAgICBjb21tYW5kLmJpbmRfdG9fdG9vbChzZWxmLnRvb2wp
CisgICAgICAgIHNlbGYuY2FwdHVyZV9vdXRwdXQoKQorICAgICAgICBjb21tYW5kLmV4ZWN1dGUo
TW9ja09wdGlvbnMoYWxsPUZhbHNlLCBwbGF0Zm9ybT0nKnhwJywgY3N2PVRydWUsIGluY2x1ZGVf
dmlydHVhbF90ZXN0cz1GYWxzZSksIFsncGFzc2VzL3RleHQuaHRtbCddLCBzZWxmLnRvb2wpCisg
ICAgICAgIHN0ZG91dCwgXywgXyA9IHNlbGYucmVzdG9yZV9vdXRwdXQoKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFscyhzdGRvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICgndGVzdC13
aW4teHAscGFzc2VzL3RleHQuaHRtbCxOb25lLHBuZyxwYXNzZXMvdGV4dC1leHBlY3RlZC5wbmcs
Tm9uZVxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3Qtd2luLXhwLHBhc3Nlcy90
ZXh0Lmh0bWwsTm9uZSx0eHQscGFzc2VzL3RleHQtZXhwZWN0ZWQudHh0LE5vbmVcbicpKQo=
</data>
<flag name="review"
          id="140809"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>