<?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>61162</bug_id>
          
          <creation_ts>2011-05-19 18:25:37 -0700</creation_ts>
          <short_desc>REGRESSION (r86515): svn-apply ignores diffs that omit line count in chunk range</short_desc>
          <delta_ts>2011-05-29 12:39:23 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>https://bug-39027-attachments.webkit.org/attachment.cgi?id=94027</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Regression</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Julien Chaffraix">jchaffraix</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>cjerdonek</cc>
    
    <cc>dbates</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>406800</commentid>
    <comment_count>0</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-05-19 18:25:37 -0700</bug_when>
    <thetext>See https://bugs.webkit.org/show_bug.cgi?id=39027 where the bots were constantly complaining about new lines that were in the patch but were not in the expected result.

The URL points to a patch that failed locally on a linux machine: if you use 

webkit-patch apply-attachment 94027

The LayoutTests expected files are not updated as expected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406809</commentid>
    <comment_count>1</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-19 18:36:36 -0700</bug_when>
    <thetext>webkit-patch just uses svn-apply.  Does the issue reproduce with just svn-apply?

+dbates as our resident svn-apply maven.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406812</commentid>
    <comment_count>2</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-05-19 18:41:53 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; webkit-patch just uses svn-apply.  Does the issue reproduce with just svn-apply?

I reproduced it locally so this is indeed an svn-apply issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407237</commentid>
    <comment_count>3</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-05-20 11:40:24 -0700</bug_when>
    <thetext>Consider the following diff D from the patch attachment 94027:

[[
diff --git a/LayoutTests/canvas/philip/tests/2d.composite.uncovered.pattern.source-in-expected.txt b/LayoutTests/canvas/philip/tests/2d.composite.uncovered.pattern.source-in-expected.txt
index 863339f..db418b2 100644
--- a/LayoutTests/canvas/philip/tests/2d.composite.uncovered.pattern.source-in-expected.txt
+++ b/LayoutTests/canvas/philip/tests/2d.composite.uncovered.pattern.source-in-expected.txt
@@ -1 +1,2 @@
 Passed
+
]]

In particular, the chunk range line &quot;@@ -1 +1,2 @@&quot;, call this C, omits a line count for the original file.
Notice, the chunk range regular expression we use is: ^\@\@ -(\d+),(\d+) \+\d+,(\d+) \@\@ (http://trac.webkit.org/browser/trunk/Tools/Scripts/VCSUtils.pm?rev=86515#L101). So, we don&apos;t match C. 

With the landing of changeset 86515 &lt;http://trac.webkit.org/changeset/86515&gt; we only pass a diff to patch(1) if it contains at least one valid chunk range line (since patch(1) can&apos;t handle a diff without one). We don&apos;t pass D to patch(1) since it doesn&apos;t contain a valid chunk range line; =&gt; we ignore D.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407240</commentid>
    <comment_count>4</comment_count>
      <attachid>94250</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-05-20 11:42:51 -0700</bug_when>
    <thetext>Created attachment 94250
Patch and unit tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407243</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-05-20 11:47:35 -0700</bug_when>
    <thetext>Attachment 94250 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Tools/ChangeLog&apos;, u&apos;Tools/Scripts/VCSUtils...&quot; exit_code: 1

Tools/Scripts/VCSUtils.pm:498:  Line contains tab character.  [whitespace/tab] [5]
Tools/Scripts/VCSUtils.pm:500:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 2 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407249</commentid>
    <comment_count>6</comment_count>
      <attachid>94252</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-05-20 11:52:20 -0700</bug_when>
    <thetext>Created attachment 94252
Patch and unit tests

Removed extraneous tab characters from patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408866</commentid>
    <comment_count>7</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2011-05-24 08:16:14 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (In reply to comment #1)
&gt; &gt; webkit-patch just uses svn-apply.  Does the issue reproduce with just svn-apply?
&gt; 
&gt; I reproduced it locally so this is indeed an svn-apply issue.

How was this patch created?  Was it hand-edited?

I&apos;m not convinced we should make our tools accept malformed patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408868</commentid>
    <comment_count>8</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2011-05-24 08:18:26 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #2)
&gt; &gt; (In reply to comment #1)
&gt; &gt; &gt; webkit-patch just uses svn-apply.  Does the issue reproduce with just svn-apply?
&gt; &gt; I reproduced it locally so this is indeed an svn-apply issue.
&gt; How was this patch created?  Was it hand-edited?
&gt; 
&gt; I&apos;m not convinced we should make our tools accept malformed patches.

The patch was created by git, but was this a transient bug in the version of git you were using Julien, or is this a slightly altered patch format that git is now using?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408876</commentid>
    <comment_count>9</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-05-24 08:32:19 -0700</bug_when>
    <thetext>&gt; The patch was created by git, but was this a transient bug in the version of git you were using Julien, or is this a slightly altered patch format that git is now using?

The bug was reproduced both on my machine (old Ubuntu - Lucid IIRC) and the EWS chromium-linux. I guess the versions are different thus it looks like a git patch format issue more than a specific bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409087</commentid>
    <comment_count>10</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-05-24 12:09:51 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #2)
&gt; &gt; (In reply to comment #1)
&gt; &gt; &gt; webkit-patch just uses svn-apply.  Does the issue reproduce with just svn-apply?
&gt; &gt; 
&gt; &gt; I reproduced it locally so this is indeed an svn-apply issue.
&gt; 
&gt; How was this patch created?  Was it hand-edited?

Missed that in my previous reply. This is a vanilla patch created by git and I did not changed it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409169</commentid>
    <comment_count>11</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2011-05-24 13:35:39 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; The patch was created by git, but was this a transient bug in the version of git you were using Julien, or is this a slightly altered patch format that git is now using?

Dan says on IRC:

I just wanted to be clear, the patch isn&apos;t malformed. Instead, as Wikipedia remarks in the diff article &quot;In many versions of GNU diff, each range can omit the comma and trailing value s, in which case s defaults to 1.&quot;

This can also be seen in the function that prints the unified number range print_unidiff_number_range() in &lt;http://git.savannah.gnu.org/cgit/diffutils.git/tree/src/context.c#n275&gt;

I tried to elaborate about this behavior in my commit message but I inadvertently wrote &quot;GNU patch(1)&quot; instead of &quot;GNU diff(1)&quot;.

The source for GNU patch(1) has similar logic when generateing the .rej file. For completeness, the Wikipedia article is here: &lt;http://en.wikipedia.org/wiki/Diff#Unified_format&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409280</commentid>
    <comment_count>12</comment_count>
      <attachid>94252</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2011-05-24 15:54:55 -0700</bug_when>
    <thetext>Comment on attachment 94252
Patch and unit tests

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

r=me  Thanks Dan!

&gt; Tools/ChangeLog:10
&gt; +        not match a chunk range line that omits a line count. GNU patch(1) will omit the

Change &quot;patch(1)&quot; to &quot;diff(1)&quot; here as discussed in IRC.

&gt; Tools/Scripts/VCSUtils.pm:504
&gt; +    my $chunkRangeRegEx = qr#^\@\@ -(\d+)(,(\d+))? \+(\d+)(,(\d+))? \@\@#; # e.g. &quot;@@ -2,6 +2,18 @@&quot; or &quot;@@ -2,6 +2,18 @@ foo()&quot;

Let&apos;s move the &quot;e.g.&quot; example text into the header for the method, and document the GNU diff(1) variables (for both the starting and ending ranges).

&gt; Tools/Scripts/VCSUtils.pm:937
&gt; +            $numTextChunks += $isChunkRange;

I would prefer it if you made the boolean-to-integer conversion here more explicit:

    $numTextChunks += 1 if $isChunkRange;

&gt; Tools/Scripts/webkitperl/VCSUtils_unittest/parseChunkRange.pl:44
&gt; +###
&gt; +# Invalid and malformed chunk range
&gt; +##
&gt; +# FIXME: We should make this set of tests more comprehensive.

Is the following a valid range?

@@ -1 +1 @@

We should add a test for this (whether or not it&apos;s invalid).  Otherwise, the test coverage looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>411995</commentid>
    <comment_count>13</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-05-29 12:36:29 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 94252 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=94252&amp;action=review

Thanks for the review David.

&gt; 
&gt; &gt; Tools/ChangeLog:10
&gt; &gt; +        not match a chunk range line that omits a line count. GNU patch(1) will omit the
&gt; 
&gt; Change &quot;patch(1)&quot; to &quot;diff(1)&quot; here as discussed in IRC.

Will fix before landing.

&gt; 
&gt; &gt; Tools/Scripts/VCSUtils.pm:504
&gt; &gt; +    my $chunkRangeRegEx = qr#^\@\@ -(\d+)(,(\d+))? \+(\d+)(,(\d+))? \@\@#; # e.g. &quot;@@ -2,6 +2,18 @@&quot; or &quot;@@ -2,6 +2,18 @@ foo()&quot;
&gt; 
&gt; Let&apos;s move the &quot;e.g.&quot; example text into the header for the method, and document the GNU diff(1) variables (for both the starting and ending ranges).

I&apos;ve added an explanation to the documentation of parseChunkRange() so that it reads:

[[
# Parses a chunk range line into its components.
#
# A chunk range line has the form: @@ -L_1,N_1 +L_2,N_2 @@, where the pairs (L_1, N_1),
# (L_2, N_2) are ranges that represent the starting line number and line count in the
# original file and new file, respectively.
#
# Note, some versions of GNU diff may omit the comma and trailing line count (e.g. N_1),
# in which case the omitted line count defaults to 1. For example, GNU diff may output
# @@ -1 +1 @@, which is equivalent to @@ -1,1 +1,1 @@.
# [...]
]][

&gt; 
&gt; &gt; Tools/Scripts/VCSUtils.pm:937
&gt; &gt; +            $numTextChunks += $isChunkRange;
&gt; 
&gt; I would prefer it if you made the boolean-to-integer conversion here more explicit:
&gt; 
&gt;     $numTextChunks += 1 if $isChunkRange;

Will change before landing.

&gt; 
&gt; &gt; Tools/Scripts/webkitperl/VCSUtils_unittest/parseChunkRange.pl:44
&gt; &gt; +###
&gt; &gt; +# Invalid and malformed chunk range
&gt; &gt; +##
&gt; &gt; +# FIXME: We should make this set of tests more comprehensive.
&gt; 
&gt; Is the following a valid range?
&gt; 
&gt; @@ -1 +1 @@

Yes, it&apos;s valid. For completeness, one such case where you will see this chunk range is when the diff describes an edit to a single line in a file that contains exactly one line. 

&gt; 
&gt; We should add a test for this (whether or not it&apos;s invalid).

I will add a test case for this before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>411996</commentid>
    <comment_count>14</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-05-29 12:39:23 -0700</bug_when>
    <thetext>Committed r87641: &lt;http://trac.webkit.org/changeset/87641&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94250</attachid>
            <date>2011-05-20 11:42:51 -0700</date>
            <delta_ts>2011-05-20 11:52:20 -0700</delta_ts>
            <desc>Patch and unit tests</desc>
            <filename>Bug61162.patch</filename>
            <type>text/plain</type>
            <size>12085</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDg2OTY2KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjMgQEAKKzIwMTEtMDUtMjAgIERhbmllbCBCYXRlcyAgPGRiYXRlc0ByaW0uY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJFR1JFU1NJT04g
KHI4NjUxNSk6IHN2bi1hcHBseSBpZ25vcmVzIGRpZmZzIHRoYXQgb21pdCBsaW5lIGNvdW50IGlu
IGNodW5rIHJhbmdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD02MTE2MgorCisgICAgICAgIEZpeGVzIGFuIGlzc3VlIHdoZXJlIHN2bi1hcHBseSBtYXkg
aWdub3JlIGEgZGlmZiB0aGF0IGNvbnRhaW5zIGEgY2h1bmsgcmFuZ2UgbGluZQorICAgICAgICB0
aGF0IG9taXRzIGEgbGluZSBjb3VudC4gSW4gcGFydGljdWxhciwgdGhlIGNodW5rIHJhbmdlIHJl
Z3VsYXIgZXhwcmVzc2lvbiBkb2VzCisgICAgICAgIG5vdCBtYXRjaCBhIGNodW5rIHJhbmdlIGxp
bmUgdGhhdCBvbWl0cyBhIGxpbmUgY291bnQuIEdOVSBwYXRjaCgxKSB3aWxsIG9taXQgdGhlCisg
ICAgICAgIGxpbmUgY291bnQgaW4gdGhlIGNodW5rIHJhbmdlIGlmIHRoZSBsaW5lIGNvdW50IGlz
IGV4YWN0bHkgMS4gRm9yIGV4YW1wbGUsIGFwcGVuZGluZworICAgICAgICBhIG5ldyBsaW5lIHRv
IHRoZSBlbmQgb2YgYW4gZXhpc3RpbmcgZmlsZSBGIHRoYXQgY29udGFpbnMgZXhhY3RseSBvbmUg
bGluZSBvZiB0ZXh0IHdpbGwKKyAgICAgICAgYmUgcmVwcmVzZW50ZWQgaW4gYSBkaWZmIHdpdGgg
YSBjaHVuayByYW5nZSBsaW5lIHRoYXQgb21pdHMgdGhlIGxpbmUgY291bnQgZm9yIEYuCisKKyAg
ICAgICAgKiBTY3JpcHRzL1ZDU1V0aWxzLnBtOgorICAgICAgICAgIChwYXJzZUNodW5rUmFuZ2Up
OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHBlcmwvVkNTVXRpbHNfdW5pdHRlc3Qv
cGFyc2VDaHVua1JhbmdlLnBsOiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHBlcmwv
VkNTVXRpbHNfdW5pdHRlc3QvcGFyc2VEaWZmLnBsOgorICAgICAgICAgIC0gQWRkZWQgdW5pdCB0
ZXN0ICJHaXQ6IEFwcGVuZCBuZXcgbGluZSB0byB0aGUgZW5kIG9mIGFuIGV4aXN0aW5nIGZpbGUi
LgorCiAyMDExLTA1LTE5ICBBZGFtIFJvYmVuICA8YXJvYmVuQGFwcGxlLmNvbT4KIAogICAgICAg
ICBUZXN0IHRoYXQgdGhlIFdlYktpdDIgVUkgcHJvY2VzcyBkb2Vzbid0IGNyYXNoIHdoZW4gc3Rh
cnRpbmcgYSBkb3dubG9hZApJbmRleDogVG9vbHMvU2NyaXB0cy9WQ1NVdGlscy5wbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9TY3JpcHRzL1ZDU1V0aWxzLnBtCShyZXZpc2lvbiA4NjgwNSkKKysrIFRv
b2xzL1NjcmlwdHMvVkNTVXRpbHMucG0JKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDcgQEAg
QkVHSU4gewogICAgICAgICAmbWFrZUZpbGVQYXRoUmVsYXRpdmUKICAgICAgICAgJm1lcmdlQ2hh
bmdlTG9ncwogICAgICAgICAmbm9ybWFsaXplUGF0aAorICAgICAgICAmcGFyc2VDaHVua1Jhbmdl
CiAgICAgICAgICZwYXJzZUZpcnN0RU9MCiAgICAgICAgICZwYXJzZVBhdGNoCiAgICAgICAgICZw
YXRoUmVsYXRpdmVUb1NWTlJlcG9zaXRvcnlSb290Rm9yUGF0aApAQCAtOTgsNyArOTksNiBAQCBt
eSAkc3ZuVmVyc2lvbjsKICMgUHJvamVjdCB0aW1lIHpvbmUgZm9yIEN1cGVydGlubywgQ0EsIFVT
CiBteSAkY2hhbmdlTG9nVGltZVpvbmUgPSAiUFNUOFBEVCI7CiAKLW15ICRjaHVua1JhbmdlUmVn
RXggPSBxciNeXEBcQCAtKFxkKyksKFxkKykgXCtcZCssKFxkKykgXEBcQCM7ICMgZS5nLiAiQEAg
LTIsNiArMiwxOCBAQCIgb3IgIkBAIC0yLDYgKzIsMTggQEAgZm9vKCkiCiBteSAkZ2l0RGlmZlN0
YXJ0UmVnRXggPSBxciNeZGlmZiAtLWdpdCAoXHcvKT8oLispIChcdy8pPyhbXlxyXG5dKykjOwog
bXkgJHN2bkRpZmZTdGFydFJlZ0V4ID0gcXIjXkluZGV4OiAoW15cclxuXSspIzsKIG15ICRzdm5Q
cm9wZXJ0aWVzU3RhcnRSZWdFeCA9IHFyI15Qcm9wZXJ0eSBjaGFuZ2VzIG9uOiAoW15cclxuXSsp
IzsgIyAkMSBpcyBub3JtYWxseSB0aGUgc2FtZSBhcyB0aGUgaW5kZXggcGF0aC4KQEAgLTQ4NSw2
ICs0ODUsMzQgQEAgc3ViIGZpcnN0RU9MSW5GaWxlKCQpCiAgICAgcmV0dXJuICRlb2w7CiB9CiAK
KyMgUGFyc2VzIGEgY2h1bmsgcmFuZ2UgbGluZSBpbnRvIGl0cyBjb21wb25lbnRzLgorIworIyBU
aGlzIHN1YnJvdXRpbmUgcmV0dXJucyB1bmRlZiBpZiBnaXZlbiBhbiBpbnZhbGlkIG9yIG1hbGZv
cm1lZCBjaHVuayByYW5nZS4KKyMKKyMgQXJnczoKKyMgICAkbGluZTogdGhlIGxpbmUgdG8gcGFy
c2UuCisjCisjIFJldHVybnMgJGNodW5rUmFuZ2VIYXNoUmVmCisjICAgJGNodW5rUmFuZ2VIYXNo
UmVmOiBhIGhhc2ggcmVmZXJlbmNlIHJlcHJlc2VudGluZyB0aGUgcGFydHMgb2YgYSBjaHVuayBy
YW5nZSwgYXMgZm9sbG93cy0tCisjICAgICBzdGFydGluZ0xpbmU6IHRoZSBzdGFydGluZyBsaW5l
IGluIHRoZSBvcmlnaW5hbCBmaWxlLgorIwkgIGxpbmVDb3VudDogdGhlIGxpbmUgY291bnQgaW4g
dGhlIG9yaWdpbmFsIGZpbGUuCisjICAgICBuZXdTdGFydGluZ0xpbmU6IHRoZSBuZXcgc3RhcnRp
bmcgbGluZSBpbiB0aGUgbmV3IGZpbGUuCisjCSAgbmV3TGluZUNvdW50OiB0aGUgbmV3IGxpbmUg
Y291bnQgaW4gdGhlIG5ldyBmaWxlLgorc3ViIHBhcnNlQ2h1bmtSYW5nZSgkKQoreworICAgIG15
ICgkbGluZSkgPSBAXzsKKyAgICBteSAkY2h1bmtSYW5nZVJlZ0V4ID0gcXIjXlxAXEAgLShcZCsp
KCwoXGQrKSk/IFwrKFxkKykoLChcZCspKT8gXEBcQCM7ICMgZS5nLiAiQEAgLTIsNiArMiwxOCBA
QCIgb3IgIkBAIC0yLDYgKzIsMTggQEAgZm9vKCkiCisgICAgaWYgKCRsaW5lICF+IC8kY2h1bmtS
YW5nZVJlZ0V4LykgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG15ICVjaHVua1Jhbmdl
OworICAgICRjaHVua1Jhbmdle3N0YXJ0aW5nTGluZX0gPSAkMTsKKyAgICAkY2h1bmtSYW5nZXts
aW5lQ291bnR9ID0gZGVmaW5lZCgkMikgPyAkMyA6IDE7CisgICAgJGNodW5rUmFuZ2V7bmV3U3Rh
cnRpbmdMaW5lfSA9ICQ0OworICAgICRjaHVua1Jhbmdle25ld0xpbmVDb3VudH0gPSBkZWZpbmVk
KCQ1KSA/ICQ2IDogMTsKKyAgICByZXR1cm4gXCVjaHVua1JhbmdlOworfQorCiBzdWIgc3ZuU3Rh
dHVzKCQpCiB7CiAgICAgbXkgKCRmdWxsUGF0aCkgPSBAXzsKQEAgLTkwNSw4ICs5MzMsOSBAQCBz
dWIgcGFyc2VEaWZmKCQkOyQpCiAgICAgICAgIH0KICAgICAgICAgaWYgKCRsaW5lICF+ICRoZWFk
ZXJTdGFydFJlZ0V4KSB7CiAgICAgICAgICAgICAjIFRoZW4gd2UgYXJlIGluIHRoZSBib2R5IG9m
IHRoZSBkaWZmLgotICAgICAgICAgICAgJG51bVRleHRDaHVua3MgKz0gJGxpbmUgPX4gLyRjaHVu
a1JhbmdlUmVnRXgvOwotICAgICAgICAgICAgaWYgKCRpbmRleFBhdGhFT0wgJiYgJGxpbmUgIX4g
LyRjaHVua1JhbmdlUmVnRXgvKSB7CisgICAgICAgICAgICBteSAkaXNDaHVua1JhbmdlID0gZGVm
aW5lZChwYXJzZUNodW5rUmFuZ2UoJGxpbmUpKTsKKyAgICAgICAgICAgICRudW1UZXh0Q2h1bmtz
ICs9ICRpc0NodW5rUmFuZ2U7CisgICAgICAgICAgICBpZiAoJGluZGV4UGF0aEVPTCAmJiAhJGlz
Q2h1bmtSYW5nZSkgewogICAgICAgICAgICAgICAgICMgVGhlIGNodW5rIHJhbmdlIGlzIHBhcnQg
b2YgdGhlIGJvZHkgb2YgdGhlIGRpZmYsIGJ1dCBpdHMgbGluZSBlbmRpbmdzIHNob3VsZCd0IGJl
CiAgICAgICAgICAgICAgICAgIyBtb2RpZmllZCBvciBwYXRjaCgxKSB3aWxsIGNvbXBsYWluLiBT
bywgd2Ugb25seSBtb2RpZnkgbm9uLWNodW5rIHJhbmdlIGxpbmVzLgogICAgICAgICAgICAgICAg
ICRsaW5lID1+IHMvXHJcbnxccnxcbi8kaW5kZXhQYXRoRU9ML2c7CkBAIC0xNTAwLDE1ICsxNTI5
LDE2IEBAIHN1YiBmaXhDaGFuZ2VMb2dQYXRjaCgkKQogICAgICRkZWxldGVkTGluZUNvdW50ICs9
ICRkYXRlU3RhcnRJbmRleCAtICRjaHVua1N0YXJ0SW5kZXg7CiAKICAgICAjIFVwZGF0ZSB0aGUg
aW5pdGlhbCBjaHVuayByYW5nZS4KLSAgICBpZiAoJGxpbmVzWyRjaHVua1N0YXJ0SW5kZXggLSAx
XSAhfiAvJGNodW5rUmFuZ2VSZWdFeC8pIHsKKyAgICBteSAkY2h1bmtSYW5nZUhhc2hSZWYgPSBw
YXJzZUNodW5rUmFuZ2UoJGxpbmVzWyRjaHVua1N0YXJ0SW5kZXggLSAxXSk7CisgICAgaWYgKCEk
Y2h1bmtSYW5nZUhhc2hSZWYpIHsKICAgICAgICAgIyBGSVhNRTogSGFuZGxlIGVycm9ycyBkaWZm
ZXJlbnRseSBmcm9tIENoYW5nZUxvZyBmaWxlcyB0aGF0CiAgICAgICAgICMgYXJlIG9rYXkgYnV0
IHNob3VsZCBub3QgYmUgYWx0ZXJlZC4gVGhhdCB3YXkgd2UgY2FuIGZpbmQgb3V0CiAgICAgICAg
ICMgaWYgaW1wcm92ZW1lbnRzIHRvIHRoZSBzY3JpcHQgZXZlciBiZWNvbWUgbmVjZXNzYXJ5Lgog
ICAgICAgICAkY2hhbmdlTG9nSGFzaFJlZntwYXRjaH0gPSAkcGF0Y2g7ICMgRXJyb3I6IHVuZXhw
ZWN0ZWQgcGF0Y2ggc3RyaW5nIGZvcm1hdC4KICAgICAgICAgcmV0dXJuIFwlY2hhbmdlTG9nSGFz
aFJlZjsKICAgICB9Ci0gICAgbXkgJG9sZFNvdXJjZUxpbmVDb3VudCA9ICQyOwotICAgIG15ICRv
bGRUYXJnZXRMaW5lQ291bnQgPSAkMzsKKyAgICBteSAkb2xkU291cmNlTGluZUNvdW50ID0gJGNo
dW5rUmFuZ2VIYXNoUmVmLT57bGluZUNvdW50fTsKKyAgICBteSAkb2xkVGFyZ2V0TGluZUNvdW50
ID0gJGNodW5rUmFuZ2VIYXNoUmVmLT57bmV3TGluZUNvdW50fTsKIAogICAgIG15ICRzb3VyY2VM
aW5lQ291bnQgPSAkb2xkU291cmNlTGluZUNvdW50ICsgQG92ZXJsYXBwaW5nTGluZXMgLSAkZGVs
ZXRlZExpbmVDb3VudDsKICAgICBteSAkdGFyZ2V0TGluZUNvdW50ID0gJG9sZFRhcmdldExpbmVD
b3VudCArIEBvdmVybGFwcGluZ0xpbmVzIC0gJGRlbGV0ZWRMaW5lQ291bnQ7CkluZGV4OiBUb29s
cy9TY3JpcHRzL3dlYmtpdHBlcmwvVkNTVXRpbHNfdW5pdHRlc3QvcGFyc2VDaHVua1JhbmdlLnBs
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9WQ1NVdGlsc191bml0dGVz
dC9wYXJzZUNodW5rUmFuZ2UucGwJKHJldmlzaW9uIDApCisrKyBUb29scy9TY3JpcHRzL3dlYmtp
dHBlcmwvVkNTVXRpbHNfdW5pdHRlc3QvcGFyc2VDaHVua1JhbmdlLnBsCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDIxMyBAQAorIyEvdXNyL2Jpbi9wZXJsIC13CisjCisjIENvcHlyaWdodCAoQykg
MjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMg
Q29weXJpZ2h0IChDKSAyMDEwIENocmlzIEplcmRvbmVrIChjaHJpcy5qZXJkb25la0BnbWFpbC5j
b20pCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmli
dXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
KCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyMgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorIyBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIyBVbml0IHRlc3Rz
IG9mIFZDU1V0aWxzOjpwYXJzZUNodW5rUmFuZ2UoKS4KKwordXNlIHN0cmljdDsKK3VzZSB3YXJu
aW5nczsKKwordXNlIFRlc3Q6Ok1vcmU7Cit1c2UgVkNTVXRpbHM7CisKK215IEB0ZXN0Q2FzZUhh
c2hSZWZzID0gKAorIyMjCisjIEludmFsaWQgYW5kIG1hbGZvcm1lZCBjaHVuayByYW5nZQorIyMK
KyMgRklYTUU6IFdlIHNob3VsZCBtYWtlIHRoaXMgc2V0IG9mIHRlc3RzIG1vcmUgY29tcHJlaGVu
c2l2ZS4KK3sgICAjIE5ldyB0ZXN0CisgICAgdGVzdE5hbWUgPT4gIltpbnZhbGlkXSBFbXB0eSBz
dHJpbmciLAorICAgIGlucHV0VGV4dCA9PiAiIiwKKyAgICBleHBlY3RlZFJldHVybiA9PiBbXQor
fSwKK3sgICAjIE5ldyB0ZXN0CisgICAgdGVzdE5hbWUgPT4gIltpbnZhbGlkXSBCb2d1cyBjaHVu
ayByYW5nZSIsCisgICAgaW5wdXRUZXh0ID0+ICJAQCB0aGlzIGlzIG5vdCB2YWxpZCBAQCIsCisg
ICAgZXhwZWN0ZWRSZXR1cm4gPT4gW10KK30sCit7ICAgIyBOZXcgdGVzdAorICAgIHRlc3ROYW1l
ID0+ICJbaW52YWxpZF0gQ2h1bmsgcmFuZ2UgbWlzc2luZyAtLysgcHJlZml4IiwKKyAgICBpbnB1
dFRleHQgPT4gIkBAIDAsMCAxLDQgQEAiLAorICAgIGV4cGVjdGVkUmV0dXJuID0+IFtdCit9LAor
eyAgICMgTmV3IHRlc3QKKyAgICB0ZXN0TmFtZSA9PiAiW2ludmFsaWRdIENodW5rIHJhbmdlIG1p
c3NpbmcgY29tbWFzIiwKKyAgICBpbnB1dFRleHQgPT4gIkBAIC0wIDAgKzEgNCBAQCIsCisgICAg
ZXhwZWN0ZWRSZXR1cm4gPT4gW10KK30sCit7ICAgIyBOZXcgdGVzdAorICAgIHRlc3ROYW1lID0+
ICJbaW52YWxpZF0gQ2h1bmsgcmFuZ2Ugd2l0aCBzd2FwcGVkIG9sZCBhbmQgcmV3IHJhbmdlcyIs
CisgICAgaW5wdXRUZXh0ID0+ICJAQCArMCwwIC0xLDQgQEAiLAorICAgIGV4cGVjdGVkUmV0dXJu
ID0+IFtdCit9LAoreyAgICMgTmV3IHRlc3QKKyAgICB0ZXN0TmFtZSA9PiAiW2ludmFsaWRdIENo
dW5rIHJhbmdlIHdpdGggbGVhZGluZyBqdW5rIiwKKyAgICBpbnB1dFRleHQgPT4gImxlYWRpbmcg
anVuayBAQCAtMCwwICsxLDQgQEAiLAorICAgIGV4cGVjdGVkUmV0dXJuID0+IFtdCit9LAorIyMj
CisjICBTaW1wbGUgdGVzdCBjYXNlcworIyMKK3sgICAjIE5ldyB0ZXN0CisgICAgdGVzdE5hbWUg
PT4gIkxpbmUgY291bnQgaXMgMCIsCisgICAgaW5wdXRUZXh0ID0+ICJAQCAtMCwwICsxLDQgQEAi
LAorICAgIGV4cGVjdGVkUmV0dXJuID0+IFsKK3sKKyAgICBzdGFydGluZ0xpbmUgPT4gMCwKKyAg
ICBsaW5lQ291bnQgPT4gMCwKKyAgICBuZXdTdGFydGluZ0xpbmUgPT4gMSwKKyAgICBuZXdMaW5l
Q291bnQgPT4gNCwKK30KK10KK30sCit7ICAgIyBOZXcgdGVzdAorICAgIHRlc3ROYW1lID0+ICJM
aW5lIGNvdW50IGlzIDEiLAorICAgIGlucHV0VGV4dCA9PiAiQEAgLTEgKzEsNCBAQCIsCisgICAg
ZXhwZWN0ZWRSZXR1cm4gPT4gWworeworICAgIHN0YXJ0aW5nTGluZSA9PiAxLAorICAgIGxpbmVD
b3VudCA9PiAxLAorICAgIG5ld1N0YXJ0aW5nTGluZSA9PiAxLAorICAgIG5ld0xpbmVDb3VudCA9
PiA0LAorfQorXQorfSwKK3sgICAjIE5ldyB0ZXN0CisgICAgdGVzdE5hbWUgPT4gIkxpbmUgY291
bnQgYW5kIG5ldyBsaW5lIGNvdW50ID4gMSIsCisgICAgaW5wdXRUZXh0ID0+ICJAQCAtMSwyICsx
LDQgQEAiLAorICAgIGV4cGVjdGVkUmV0dXJuID0+IFsKK3sKKyAgICBzdGFydGluZ0xpbmUgPT4g
MSwKKyAgICBsaW5lQ291bnQgPT4gMiwKKyAgICBuZXdTdGFydGluZ0xpbmUgPT4gMSwKKyAgICBu
ZXdMaW5lQ291bnQgPT4gNCwKK30KK10KK30sCit7ICAgIyBOZXcgdGVzdAorICAgIHRlc3ROYW1l
ID0+ICJOZXcgbGluZSBjb3VudCBpcyAwIiwKKyAgICBpbnB1dFRleHQgPT4gIkBAIC0xLDQgKzAs
MCBAQCIsCisgICAgZXhwZWN0ZWRSZXR1cm4gPT4gWworeworICAgIHN0YXJ0aW5nTGluZSA9PiAx
LAorICAgIGxpbmVDb3VudCA9PiA0LAorICAgIG5ld1N0YXJ0aW5nTGluZSA9PiAwLAorICAgIG5l
d0xpbmVDb3VudCA9PiAwLAorfQorXQorfSwKK3sgICAjIE5ldyB0ZXN0CisgICAgdGVzdE5hbWUg
PT4gIk5ldyBsaW5lIGNvdW50IGlzIDEiLAorICAgIGlucHV0VGV4dCA9PiAiQEAgLTEsNCArMSBA
QCIsCisgICAgZXhwZWN0ZWRSZXR1cm4gPT4gWworeworICAgIHN0YXJ0aW5nTGluZSA9PiAxLAor
ICAgIGxpbmVDb3VudCA9PiA0LAorICAgIG5ld1N0YXJ0aW5nTGluZSA9PiAxLAorICAgIG5ld0xp
bmVDb3VudCA9PiAxLAorfQorXQorfSwKKyMjIworIyAgQ2h1bmsgcmFuZ2UgZm9sbG93ZWQgYnkg
ZW5kaW5nIGp1bmsKKyMjCit7ICAgIyBOZXcgdGVzdAorICAgIHRlc3ROYW1lID0+ICJMaW5lIGNv
dW50IGlzIDAgYW5kIGNodW5rIHJhbmdlIGhhcyBlbmRpbmcganVuayIsCisgICAgaW5wdXRUZXh0
ID0+ICJAQCAtMCwwICsxLDQgQEAgZm9vKCkiLAorICAgIGV4cGVjdGVkUmV0dXJuID0+IFsKK3sK
KyAgICBzdGFydGluZ0xpbmUgPT4gMCwKKyAgICBsaW5lQ291bnQgPT4gMCwKKyAgICBuZXdTdGFy
dGluZ0xpbmUgPT4gMSwKKyAgICBuZXdMaW5lQ291bnQgPT4gNCwKK30KK10KK30sCit7ICAgIyBO
ZXcgdGVzdAorICAgIHRlc3ROYW1lID0+ICJMaW5lIGNvdW50IGlzIDEgYW5kIGNodW5rIHJhbmdl
IGhhcyBlbmRpbmcganVuayIsCisgICAgaW5wdXRUZXh0ID0+ICJAQCAtMSArMSw0IEBAIGZvbygp
IiwKKyAgICBleHBlY3RlZFJldHVybiA9PiBbCit7CisgICAgc3RhcnRpbmdMaW5lID0+IDEsCisg
ICAgbGluZUNvdW50ID0+IDEsCisgICAgbmV3U3RhcnRpbmdMaW5lID0+IDEsCisgICAgbmV3TGlu
ZUNvdW50ID0+IDQsCit9CitdCit9LAoreyAgICMgTmV3IHRlc3QKKyAgICB0ZXN0TmFtZSA9PiAi
TGluZSBjb3VudCBhbmQgbmV3IGxpbmUgY291bnQgPiAxIGFuZCBjaHVuayByYW5nZSBoYXMgZW5k
aW5nIGp1bmsiLAorICAgIGlucHV0VGV4dCA9PiAiQEAgLTEsMiArMSw0IEBAIGZvbygpIiwKKyAg
ICBleHBlY3RlZFJldHVybiA9PiBbCit7CisgICAgc3RhcnRpbmdMaW5lID0+IDEsCisgICAgbGlu
ZUNvdW50ID0+IDIsCisgICAgbmV3U3RhcnRpbmdMaW5lID0+IDEsCisgICAgbmV3TGluZUNvdW50
ID0+IDQsCit9CitdCit9LAoreyAgICMgTmV3IHRlc3QKKyAgICB0ZXN0TmFtZSA9PiAiTmV3IGxp
bmUgY291bnQgaXMgMCBhbmQgY2h1bmsgcmFuZ2UgaGFzIGVuZGluZyBqdW5rIiwKKyAgICBpbnB1
dFRleHQgPT4gIkBAIC0xLDQgKzAsMCBAQCBmb28oKSIsCisgICAgZXhwZWN0ZWRSZXR1cm4gPT4g
WworeworICAgIHN0YXJ0aW5nTGluZSA9PiAxLAorICAgIGxpbmVDb3VudCA9PiA0LAorICAgIG5l
d1N0YXJ0aW5nTGluZSA9PiAwLAorICAgIG5ld0xpbmVDb3VudCA9PiAwLAorfQorXQorfSwKK3sg
ICAjIE5ldyB0ZXN0CisgICAgdGVzdE5hbWUgPT4gIk5ldyBsaW5lIGNvdW50IGlzIDEgYW5kIGNo
dW5rIHJhbmdlIGhhcyBlbmRpbmcganVuayIsCisgICAgaW5wdXRUZXh0ID0+ICJAQCAtMSw0ICsx
IEBAIGZvbygpIiwKKyAgICBleHBlY3RlZFJldHVybiA9PiBbCit7CisgICAgc3RhcnRpbmdMaW5l
ID0+IDEsCisgICAgbGluZUNvdW50ID0+IDQsCisgICAgbmV3U3RhcnRpbmdMaW5lID0+IDEsCisg
ICAgbmV3TGluZUNvdW50ID0+IDEsCit9CitdCit9LAorKTsKKworbXkgJHRlc3RDYXNlc0NvdW50
ID0gQHRlc3RDYXNlSGFzaFJlZnM7CitwbGFuKHRlc3RzID0+ICR0ZXN0Q2FzZXNDb3VudCk7CisK
K2ZvcmVhY2ggbXkgJHRlc3RDYXNlIChAdGVzdENhc2VIYXNoUmVmcykgeworICAgIG15ICR0ZXN0
TmFtZVN0YXJ0ID0gInBhcnNlQ2h1bmtSYW5nZSgpOiAkdGVzdENhc2UtPnt0ZXN0TmFtZX06IGNv
bXBhcmluZyI7CisKKyAgICBteSBAZ290ID0gVkNTVXRpbHM6OnBhcnNlQ2h1bmtSYW5nZSgkdGVz
dENhc2UtPntpbnB1dFRleHR9KTsKKyAgICBteSAkZXhwZWN0ZWRSZXR1cm4gPSAkdGVzdENhc2Ut
PntleHBlY3RlZFJldHVybn07CisKKyAgICBpc19kZWVwbHkoXEBnb3QsICRleHBlY3RlZFJldHVy
biwgIiR0ZXN0TmFtZVN0YXJ0IHJldHVybiB2YWx1ZS4iKTsKK30KSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cGVybC9WQ1NVdGlsc191bml0dGVzdC9wYXJzZURpZmYucGwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL1ZDU1V0aWxzX3VuaXR0ZXN0L3BhcnNlRGlmZi5w
bAkocmV2aXNpb24gODY4MDUpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHBlcmwvVkNTVXRpbHNf
dW5pdHRlc3QvcGFyc2VEaWZmLnBsCSh3b3JraW5nIGNvcHkpCkBAIC05OTQsNiArOTk0LDM2IEBA
IEVORAogdW5kZWZdLAogICAgIGV4cGVjdGVkTmV4dExpbmUgPT4gdW5kZWYsCiB9LAoreworICAg
ICMgTmV3IHRlc3QKKyAgICBkaWZmTmFtZSA9PiAiR2l0OiBBcHBlbmQgbmV3IGxpbmUgdG8gdGhl
IGVuZCBvZiBhbiBleGlzdGluZyBmaWxlIiwKKyAgICBpbnB1dFRleHQgPT4gPDwnRU5EJywKK2Rp
ZmYgLS1naXQgYS9mb28gYi9mb28KK2luZGV4IDg2MzMzOWYuLmRiNDE4YjIgMTAwNjQ0CistLS0g
YS9mb28KKysrKyBiL2ZvbworQEAgLTEgKzEsMiBAQAorIFBhc3NlZAorKworRU5ECisgICAgZXhw
ZWN0ZWRSZXR1cm4gPT4gWworW3sKKyAgICBzdm5Db252ZXJ0ZWRUZXh0ID0+ICA8PCdFTkQnLAor
SW5kZXg6IGZvbworaW5kZXggODYzMzM5Zi4uZGI0MThiMiAxMDA2NDQKKy0tLSBmb28KKysrKyBm
b28KK0BAIC0xICsxLDIgQEAKKyBQYXNzZWQKKysKK0VORAorICAgIGluZGV4UGF0aCA9PiAiZm9v
IiwKKyAgICBpc0dpdCA9PiAxLAorICAgIG51bVRleHRDaHVua3MgPT4gMSwKK31dLAordW5kZWZd
LAorICAgIGV4cGVjdGVkTmV4dExpbmUgPT4gdW5kZWYsCit9LAogeyAgICMgTmV3IHRlc3QKICAg
ICBkaWZmTmFtZSA9PiAiR2l0OiBuZXcgZmlsZSIsCiAgICAgaW5wdXRUZXh0ID0+IDw8J0VORCcs
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94252</attachid>
            <date>2011-05-20 11:52:20 -0700</date>
            <delta_ts>2011-05-24 15:54:55 -0700</delta_ts>
            <desc>Patch and unit tests</desc>
            <filename>Bug61162.patch</filename>
            <type>text/plain</type>
            <size>12089</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDg2OTY2KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjMgQEAKKzIwMTEtMDUtMjAgIERhbmllbCBCYXRlcyAgPGRiYXRlc0ByaW0uY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJFR1JFU1NJT04g
KHI4NjUxNSk6IHN2bi1hcHBseSBpZ25vcmVzIGRpZmZzIHRoYXQgb21pdCBsaW5lIGNvdW50IGlu
IGNodW5rIHJhbmdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD02MTE2MgorCisgICAgICAgIEZpeGVzIGFuIGlzc3VlIHdoZXJlIHN2bi1hcHBseSBtYXkg
aWdub3JlIGEgZGlmZiB0aGF0IGNvbnRhaW5zIGEgY2h1bmsgcmFuZ2UgbGluZQorICAgICAgICB0
aGF0IG9taXRzIGEgbGluZSBjb3VudC4gSW4gcGFydGljdWxhciwgdGhlIGNodW5rIHJhbmdlIHJl
Z3VsYXIgZXhwcmVzc2lvbiBkb2VzCisgICAgICAgIG5vdCBtYXRjaCBhIGNodW5rIHJhbmdlIGxp
bmUgdGhhdCBvbWl0cyBhIGxpbmUgY291bnQuIEdOVSBwYXRjaCgxKSB3aWxsIG9taXQgdGhlCisg
ICAgICAgIGxpbmUgY291bnQgaW4gdGhlIGNodW5rIHJhbmdlIGlmIHRoZSBsaW5lIGNvdW50IGlz
IGV4YWN0bHkgMS4gRm9yIGV4YW1wbGUsIGFwcGVuZGluZworICAgICAgICBhIG5ldyBsaW5lIHRv
IHRoZSBlbmQgb2YgYW4gZXhpc3RpbmcgZmlsZSBGIHRoYXQgY29udGFpbnMgZXhhY3RseSBvbmUg
bGluZSBvZiB0ZXh0IHdpbGwKKyAgICAgICAgYmUgcmVwcmVzZW50ZWQgaW4gYSBkaWZmIHdpdGgg
YSBjaHVuayByYW5nZSBsaW5lIHRoYXQgb21pdHMgdGhlIGxpbmUgY291bnQgZm9yIEYuCisKKyAg
ICAgICAgKiBTY3JpcHRzL1ZDU1V0aWxzLnBtOgorICAgICAgICAgIChwYXJzZUNodW5rUmFuZ2Up
OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHBlcmwvVkNTVXRpbHNfdW5pdHRlc3Qv
cGFyc2VDaHVua1JhbmdlLnBsOiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHBlcmwv
VkNTVXRpbHNfdW5pdHRlc3QvcGFyc2VEaWZmLnBsOgorICAgICAgICAgIC0gQWRkZWQgdW5pdCB0
ZXN0ICJHaXQ6IEFwcGVuZCBuZXcgbGluZSB0byB0aGUgZW5kIG9mIGFuIGV4aXN0aW5nIGZpbGUi
LgorCiAyMDExLTA1LTE5ICBBZGFtIFJvYmVuICA8YXJvYmVuQGFwcGxlLmNvbT4KIAogICAgICAg
ICBUZXN0IHRoYXQgdGhlIFdlYktpdDIgVUkgcHJvY2VzcyBkb2Vzbid0IGNyYXNoIHdoZW4gc3Rh
cnRpbmcgYSBkb3dubG9hZApJbmRleDogVG9vbHMvU2NyaXB0cy9WQ1NVdGlscy5wbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9TY3JpcHRzL1ZDU1V0aWxzLnBtCShyZXZpc2lvbiA4NjgwNSkKKysrIFRv
b2xzL1NjcmlwdHMvVkNTVXRpbHMucG0JKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDcgQEAg
QkVHSU4gewogICAgICAgICAmbWFrZUZpbGVQYXRoUmVsYXRpdmUKICAgICAgICAgJm1lcmdlQ2hh
bmdlTG9ncwogICAgICAgICAmbm9ybWFsaXplUGF0aAorICAgICAgICAmcGFyc2VDaHVua1Jhbmdl
CiAgICAgICAgICZwYXJzZUZpcnN0RU9MCiAgICAgICAgICZwYXJzZVBhdGNoCiAgICAgICAgICZw
YXRoUmVsYXRpdmVUb1NWTlJlcG9zaXRvcnlSb290Rm9yUGF0aApAQCAtOTgsNyArOTksNiBAQCBt
eSAkc3ZuVmVyc2lvbjsKICMgUHJvamVjdCB0aW1lIHpvbmUgZm9yIEN1cGVydGlubywgQ0EsIFVT
CiBteSAkY2hhbmdlTG9nVGltZVpvbmUgPSAiUFNUOFBEVCI7CiAKLW15ICRjaHVua1JhbmdlUmVn
RXggPSBxciNeXEBcQCAtKFxkKyksKFxkKykgXCtcZCssKFxkKykgXEBcQCM7ICMgZS5nLiAiQEAg
LTIsNiArMiwxOCBAQCIgb3IgIkBAIC0yLDYgKzIsMTggQEAgZm9vKCkiCiBteSAkZ2l0RGlmZlN0
YXJ0UmVnRXggPSBxciNeZGlmZiAtLWdpdCAoXHcvKT8oLispIChcdy8pPyhbXlxyXG5dKykjOwog
bXkgJHN2bkRpZmZTdGFydFJlZ0V4ID0gcXIjXkluZGV4OiAoW15cclxuXSspIzsKIG15ICRzdm5Q
cm9wZXJ0aWVzU3RhcnRSZWdFeCA9IHFyI15Qcm9wZXJ0eSBjaGFuZ2VzIG9uOiAoW15cclxuXSsp
IzsgIyAkMSBpcyBub3JtYWxseSB0aGUgc2FtZSBhcyB0aGUgaW5kZXggcGF0aC4KQEAgLTQ4NSw2
ICs0ODUsMzQgQEAgc3ViIGZpcnN0RU9MSW5GaWxlKCQpCiAgICAgcmV0dXJuICRlb2w7CiB9CiAK
KyMgUGFyc2VzIGEgY2h1bmsgcmFuZ2UgbGluZSBpbnRvIGl0cyBjb21wb25lbnRzLgorIworIyBU
aGlzIHN1YnJvdXRpbmUgcmV0dXJucyB1bmRlZiBpZiBnaXZlbiBhbiBpbnZhbGlkIG9yIG1hbGZv
cm1lZCBjaHVuayByYW5nZS4KKyMKKyMgQXJnczoKKyMgICAkbGluZTogdGhlIGxpbmUgdG8gcGFy
c2UuCisjCisjIFJldHVybnMgJGNodW5rUmFuZ2VIYXNoUmVmCisjICAgJGNodW5rUmFuZ2VIYXNo
UmVmOiBhIGhhc2ggcmVmZXJlbmNlIHJlcHJlc2VudGluZyB0aGUgcGFydHMgb2YgYSBjaHVuayBy
YW5nZSwgYXMgZm9sbG93cy0tCisjICAgICBzdGFydGluZ0xpbmU6IHRoZSBzdGFydGluZyBsaW5l
IGluIHRoZSBvcmlnaW5hbCBmaWxlLgorIyAgICAgbGluZUNvdW50OiB0aGUgbGluZSBjb3VudCBp
biB0aGUgb3JpZ2luYWwgZmlsZS4KKyMgICAgIG5ld1N0YXJ0aW5nTGluZTogdGhlIG5ldyBzdGFy
dGluZyBsaW5lIGluIHRoZSBuZXcgZmlsZS4KKyMgICAgIG5ld0xpbmVDb3VudDogdGhlIG5ldyBs
aW5lIGNvdW50IGluIHRoZSBuZXcgZmlsZS4KK3N1YiBwYXJzZUNodW5rUmFuZ2UoJCkKK3sKKyAg
ICBteSAoJGxpbmUpID0gQF87CisgICAgbXkgJGNodW5rUmFuZ2VSZWdFeCA9IHFyI15cQFxAIC0o
XGQrKSgsKFxkKykpPyBcKyhcZCspKCwoXGQrKSk/IFxAXEAjOyAjIGUuZy4gIkBAIC0yLDYgKzIs
MTggQEAiIG9yICJAQCAtMiw2ICsyLDE4IEBAIGZvbygpIgorICAgIGlmICgkbGluZSAhfiAvJGNo
dW5rUmFuZ2VSZWdFeC8pIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBteSAlY2h1bmtS
YW5nZTsKKyAgICAkY2h1bmtSYW5nZXtzdGFydGluZ0xpbmV9ID0gJDE7CisgICAgJGNodW5rUmFu
Z2V7bGluZUNvdW50fSA9IGRlZmluZWQoJDIpID8gJDMgOiAxOworICAgICRjaHVua1Jhbmdle25l
d1N0YXJ0aW5nTGluZX0gPSAkNDsKKyAgICAkY2h1bmtSYW5nZXtuZXdMaW5lQ291bnR9ID0gZGVm
aW5lZCgkNSkgPyAkNiA6IDE7CisgICAgcmV0dXJuIFwlY2h1bmtSYW5nZTsKK30KKwogc3ViIHN2
blN0YXR1cygkKQogewogICAgIG15ICgkZnVsbFBhdGgpID0gQF87CkBAIC05MDUsOCArOTMzLDkg
QEAgc3ViIHBhcnNlRGlmZigkJDskKQogICAgICAgICB9CiAgICAgICAgIGlmICgkbGluZSAhfiAk
aGVhZGVyU3RhcnRSZWdFeCkgewogICAgICAgICAgICAgIyBUaGVuIHdlIGFyZSBpbiB0aGUgYm9k
eSBvZiB0aGUgZGlmZi4KLSAgICAgICAgICAgICRudW1UZXh0Q2h1bmtzICs9ICRsaW5lID1+IC8k
Y2h1bmtSYW5nZVJlZ0V4LzsKLSAgICAgICAgICAgIGlmICgkaW5kZXhQYXRoRU9MICYmICRsaW5l
ICF+IC8kY2h1bmtSYW5nZVJlZ0V4LykgeworICAgICAgICAgICAgbXkgJGlzQ2h1bmtSYW5nZSA9
IGRlZmluZWQocGFyc2VDaHVua1JhbmdlKCRsaW5lKSk7CisgICAgICAgICAgICAkbnVtVGV4dENo
dW5rcyArPSAkaXNDaHVua1JhbmdlOworICAgICAgICAgICAgaWYgKCRpbmRleFBhdGhFT0wgJiYg
ISRpc0NodW5rUmFuZ2UpIHsKICAgICAgICAgICAgICAgICAjIFRoZSBjaHVuayByYW5nZSBpcyBw
YXJ0IG9mIHRoZSBib2R5IG9mIHRoZSBkaWZmLCBidXQgaXRzIGxpbmUgZW5kaW5ncyBzaG91bGQn
dCBiZQogICAgICAgICAgICAgICAgICMgbW9kaWZpZWQgb3IgcGF0Y2goMSkgd2lsbCBjb21wbGFp
bi4gU28sIHdlIG9ubHkgbW9kaWZ5IG5vbi1jaHVuayByYW5nZSBsaW5lcy4KICAgICAgICAgICAg
ICAgICAkbGluZSA9fiBzL1xyXG58XHJ8XG4vJGluZGV4UGF0aEVPTC9nOwpAQCAtMTUwMCwxNSAr
MTUyOSwxNiBAQCBzdWIgZml4Q2hhbmdlTG9nUGF0Y2goJCkKICAgICAkZGVsZXRlZExpbmVDb3Vu
dCArPSAkZGF0ZVN0YXJ0SW5kZXggLSAkY2h1bmtTdGFydEluZGV4OwogCiAgICAgIyBVcGRhdGUg
dGhlIGluaXRpYWwgY2h1bmsgcmFuZ2UuCi0gICAgaWYgKCRsaW5lc1skY2h1bmtTdGFydEluZGV4
IC0gMV0gIX4gLyRjaHVua1JhbmdlUmVnRXgvKSB7CisgICAgbXkgJGNodW5rUmFuZ2VIYXNoUmVm
ID0gcGFyc2VDaHVua1JhbmdlKCRsaW5lc1skY2h1bmtTdGFydEluZGV4IC0gMV0pOworICAgIGlm
ICghJGNodW5rUmFuZ2VIYXNoUmVmKSB7CiAgICAgICAgICMgRklYTUU6IEhhbmRsZSBlcnJvcnMg
ZGlmZmVyZW50bHkgZnJvbSBDaGFuZ2VMb2cgZmlsZXMgdGhhdAogICAgICAgICAjIGFyZSBva2F5
IGJ1dCBzaG91bGQgbm90IGJlIGFsdGVyZWQuIFRoYXQgd2F5IHdlIGNhbiBmaW5kIG91dAogICAg
ICAgICAjIGlmIGltcHJvdmVtZW50cyB0byB0aGUgc2NyaXB0IGV2ZXIgYmVjb21lIG5lY2Vzc2Fy
eS4KICAgICAgICAgJGNoYW5nZUxvZ0hhc2hSZWZ7cGF0Y2h9ID0gJHBhdGNoOyAjIEVycm9yOiB1
bmV4cGVjdGVkIHBhdGNoIHN0cmluZyBmb3JtYXQuCiAgICAgICAgIHJldHVybiBcJWNoYW5nZUxv
Z0hhc2hSZWY7CiAgICAgfQotICAgIG15ICRvbGRTb3VyY2VMaW5lQ291bnQgPSAkMjsKLSAgICBt
eSAkb2xkVGFyZ2V0TGluZUNvdW50ID0gJDM7CisgICAgbXkgJG9sZFNvdXJjZUxpbmVDb3VudCA9
ICRjaHVua1JhbmdlSGFzaFJlZi0+e2xpbmVDb3VudH07CisgICAgbXkgJG9sZFRhcmdldExpbmVD
b3VudCA9ICRjaHVua1JhbmdlSGFzaFJlZi0+e25ld0xpbmVDb3VudH07CiAKICAgICBteSAkc291
cmNlTGluZUNvdW50ID0gJG9sZFNvdXJjZUxpbmVDb3VudCArIEBvdmVybGFwcGluZ0xpbmVzIC0g
JGRlbGV0ZWRMaW5lQ291bnQ7CiAgICAgbXkgJHRhcmdldExpbmVDb3VudCA9ICRvbGRUYXJnZXRM
aW5lQ291bnQgKyBAb3ZlcmxhcHBpbmdMaW5lcyAtICRkZWxldGVkTGluZUNvdW50OwpJbmRleDog
VG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL1ZDU1V0aWxzX3VuaXR0ZXN0L3BhcnNlQ2h1bmtSYW5n
ZS5wbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHBlcmwvVkNTVXRpbHNfdW5p
dHRlc3QvcGFyc2VDaHVua1JhbmdlLnBsCShyZXZpc2lvbiAwKQorKysgVG9vbHMvU2NyaXB0cy93
ZWJraXRwZXJsL1ZDU1V0aWxzX3VuaXR0ZXN0L3BhcnNlQ2h1bmtSYW5nZS5wbAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwyMTMgQEAKKyMhL3Vzci9iaW4vcGVybCAtdworIworIyBDb3B5cmlnaHQg
KEMpIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjIENvcHlyaWdodCAoQykgMjAxMCBDaHJpcyBKZXJkb25layAoY2hyaXMuamVyZG9uZWtAZ21h
aWwuY29tKQorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlz
dHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJ
bmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisjIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyMgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIwor
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
IyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyMgVW5pdCB0
ZXN0cyBvZiBWQ1NVdGlsczo6cGFyc2VDaHVua1JhbmdlKCkuCisKK3VzZSBzdHJpY3Q7Cit1c2Ug
d2FybmluZ3M7CisKK3VzZSBUZXN0OjpNb3JlOwordXNlIFZDU1V0aWxzOworCitteSBAdGVzdENh
c2VIYXNoUmVmcyA9ICgKKyMjIworIyBJbnZhbGlkIGFuZCBtYWxmb3JtZWQgY2h1bmsgcmFuZ2UK
KyMjCisjIEZJWE1FOiBXZSBzaG91bGQgbWFrZSB0aGlzIHNldCBvZiB0ZXN0cyBtb3JlIGNvbXBy
ZWhlbnNpdmUuCit7ICAgIyBOZXcgdGVzdAorICAgIHRlc3ROYW1lID0+ICJbaW52YWxpZF0gRW1w
dHkgc3RyaW5nIiwKKyAgICBpbnB1dFRleHQgPT4gIiIsCisgICAgZXhwZWN0ZWRSZXR1cm4gPT4g
W10KK30sCit7ICAgIyBOZXcgdGVzdAorICAgIHRlc3ROYW1lID0+ICJbaW52YWxpZF0gQm9ndXMg
Y2h1bmsgcmFuZ2UiLAorICAgIGlucHV0VGV4dCA9PiAiQEAgdGhpcyBpcyBub3QgdmFsaWQgQEAi
LAorICAgIGV4cGVjdGVkUmV0dXJuID0+IFtdCit9LAoreyAgICMgTmV3IHRlc3QKKyAgICB0ZXN0
TmFtZSA9PiAiW2ludmFsaWRdIENodW5rIHJhbmdlIG1pc3NpbmcgLS8rIHByZWZpeCIsCisgICAg
aW5wdXRUZXh0ID0+ICJAQCAwLDAgMSw0IEBAIiwKKyAgICBleHBlY3RlZFJldHVybiA9PiBbXQor
fSwKK3sgICAjIE5ldyB0ZXN0CisgICAgdGVzdE5hbWUgPT4gIltpbnZhbGlkXSBDaHVuayByYW5n
ZSBtaXNzaW5nIGNvbW1hcyIsCisgICAgaW5wdXRUZXh0ID0+ICJAQCAtMCAwICsxIDQgQEAiLAor
ICAgIGV4cGVjdGVkUmV0dXJuID0+IFtdCit9LAoreyAgICMgTmV3IHRlc3QKKyAgICB0ZXN0TmFt
ZSA9PiAiW2ludmFsaWRdIENodW5rIHJhbmdlIHdpdGggc3dhcHBlZCBvbGQgYW5kIHJldyByYW5n
ZXMiLAorICAgIGlucHV0VGV4dCA9PiAiQEAgKzAsMCAtMSw0IEBAIiwKKyAgICBleHBlY3RlZFJl
dHVybiA9PiBbXQorfSwKK3sgICAjIE5ldyB0ZXN0CisgICAgdGVzdE5hbWUgPT4gIltpbnZhbGlk
XSBDaHVuayByYW5nZSB3aXRoIGxlYWRpbmcganVuayIsCisgICAgaW5wdXRUZXh0ID0+ICJsZWFk
aW5nIGp1bmsgQEAgLTAsMCArMSw0IEBAIiwKKyAgICBleHBlY3RlZFJldHVybiA9PiBbXQorfSwK
KyMjIworIyAgU2ltcGxlIHRlc3QgY2FzZXMKKyMjCit7ICAgIyBOZXcgdGVzdAorICAgIHRlc3RO
YW1lID0+ICJMaW5lIGNvdW50IGlzIDAiLAorICAgIGlucHV0VGV4dCA9PiAiQEAgLTAsMCArMSw0
IEBAIiwKKyAgICBleHBlY3RlZFJldHVybiA9PiBbCit7CisgICAgc3RhcnRpbmdMaW5lID0+IDAs
CisgICAgbGluZUNvdW50ID0+IDAsCisgICAgbmV3U3RhcnRpbmdMaW5lID0+IDEsCisgICAgbmV3
TGluZUNvdW50ID0+IDQsCit9CitdCit9LAoreyAgICMgTmV3IHRlc3QKKyAgICB0ZXN0TmFtZSA9
PiAiTGluZSBjb3VudCBpcyAxIiwKKyAgICBpbnB1dFRleHQgPT4gIkBAIC0xICsxLDQgQEAiLAor
ICAgIGV4cGVjdGVkUmV0dXJuID0+IFsKK3sKKyAgICBzdGFydGluZ0xpbmUgPT4gMSwKKyAgICBs
aW5lQ291bnQgPT4gMSwKKyAgICBuZXdTdGFydGluZ0xpbmUgPT4gMSwKKyAgICBuZXdMaW5lQ291
bnQgPT4gNCwKK30KK10KK30sCit7ICAgIyBOZXcgdGVzdAorICAgIHRlc3ROYW1lID0+ICJMaW5l
IGNvdW50IGFuZCBuZXcgbGluZSBjb3VudCA+IDEiLAorICAgIGlucHV0VGV4dCA9PiAiQEAgLTEs
MiArMSw0IEBAIiwKKyAgICBleHBlY3RlZFJldHVybiA9PiBbCit7CisgICAgc3RhcnRpbmdMaW5l
ID0+IDEsCisgICAgbGluZUNvdW50ID0+IDIsCisgICAgbmV3U3RhcnRpbmdMaW5lID0+IDEsCisg
ICAgbmV3TGluZUNvdW50ID0+IDQsCit9CitdCit9LAoreyAgICMgTmV3IHRlc3QKKyAgICB0ZXN0
TmFtZSA9PiAiTmV3IGxpbmUgY291bnQgaXMgMCIsCisgICAgaW5wdXRUZXh0ID0+ICJAQCAtMSw0
ICswLDAgQEAiLAorICAgIGV4cGVjdGVkUmV0dXJuID0+IFsKK3sKKyAgICBzdGFydGluZ0xpbmUg
PT4gMSwKKyAgICBsaW5lQ291bnQgPT4gNCwKKyAgICBuZXdTdGFydGluZ0xpbmUgPT4gMCwKKyAg
ICBuZXdMaW5lQ291bnQgPT4gMCwKK30KK10KK30sCit7ICAgIyBOZXcgdGVzdAorICAgIHRlc3RO
YW1lID0+ICJOZXcgbGluZSBjb3VudCBpcyAxIiwKKyAgICBpbnB1dFRleHQgPT4gIkBAIC0xLDQg
KzEgQEAiLAorICAgIGV4cGVjdGVkUmV0dXJuID0+IFsKK3sKKyAgICBzdGFydGluZ0xpbmUgPT4g
MSwKKyAgICBsaW5lQ291bnQgPT4gNCwKKyAgICBuZXdTdGFydGluZ0xpbmUgPT4gMSwKKyAgICBu
ZXdMaW5lQ291bnQgPT4gMSwKK30KK10KK30sCisjIyMKKyMgIENodW5rIHJhbmdlIGZvbGxvd2Vk
IGJ5IGVuZGluZyBqdW5rCisjIworeyAgICMgTmV3IHRlc3QKKyAgICB0ZXN0TmFtZSA9PiAiTGlu
ZSBjb3VudCBpcyAwIGFuZCBjaHVuayByYW5nZSBoYXMgZW5kaW5nIGp1bmsiLAorICAgIGlucHV0
VGV4dCA9PiAiQEAgLTAsMCArMSw0IEBAIGZvbygpIiwKKyAgICBleHBlY3RlZFJldHVybiA9PiBb
Cit7CisgICAgc3RhcnRpbmdMaW5lID0+IDAsCisgICAgbGluZUNvdW50ID0+IDAsCisgICAgbmV3
U3RhcnRpbmdMaW5lID0+IDEsCisgICAgbmV3TGluZUNvdW50ID0+IDQsCit9CitdCit9LAoreyAg
ICMgTmV3IHRlc3QKKyAgICB0ZXN0TmFtZSA9PiAiTGluZSBjb3VudCBpcyAxIGFuZCBjaHVuayBy
YW5nZSBoYXMgZW5kaW5nIGp1bmsiLAorICAgIGlucHV0VGV4dCA9PiAiQEAgLTEgKzEsNCBAQCBm
b28oKSIsCisgICAgZXhwZWN0ZWRSZXR1cm4gPT4gWworeworICAgIHN0YXJ0aW5nTGluZSA9PiAx
LAorICAgIGxpbmVDb3VudCA9PiAxLAorICAgIG5ld1N0YXJ0aW5nTGluZSA9PiAxLAorICAgIG5l
d0xpbmVDb3VudCA9PiA0LAorfQorXQorfSwKK3sgICAjIE5ldyB0ZXN0CisgICAgdGVzdE5hbWUg
PT4gIkxpbmUgY291bnQgYW5kIG5ldyBsaW5lIGNvdW50ID4gMSBhbmQgY2h1bmsgcmFuZ2UgaGFz
IGVuZGluZyBqdW5rIiwKKyAgICBpbnB1dFRleHQgPT4gIkBAIC0xLDIgKzEsNCBAQCBmb28oKSIs
CisgICAgZXhwZWN0ZWRSZXR1cm4gPT4gWworeworICAgIHN0YXJ0aW5nTGluZSA9PiAxLAorICAg
IGxpbmVDb3VudCA9PiAyLAorICAgIG5ld1N0YXJ0aW5nTGluZSA9PiAxLAorICAgIG5ld0xpbmVD
b3VudCA9PiA0LAorfQorXQorfSwKK3sgICAjIE5ldyB0ZXN0CisgICAgdGVzdE5hbWUgPT4gIk5l
dyBsaW5lIGNvdW50IGlzIDAgYW5kIGNodW5rIHJhbmdlIGhhcyBlbmRpbmcganVuayIsCisgICAg
aW5wdXRUZXh0ID0+ICJAQCAtMSw0ICswLDAgQEAgZm9vKCkiLAorICAgIGV4cGVjdGVkUmV0dXJu
ID0+IFsKK3sKKyAgICBzdGFydGluZ0xpbmUgPT4gMSwKKyAgICBsaW5lQ291bnQgPT4gNCwKKyAg
ICBuZXdTdGFydGluZ0xpbmUgPT4gMCwKKyAgICBuZXdMaW5lQ291bnQgPT4gMCwKK30KK10KK30s
Cit7ICAgIyBOZXcgdGVzdAorICAgIHRlc3ROYW1lID0+ICJOZXcgbGluZSBjb3VudCBpcyAxIGFu
ZCBjaHVuayByYW5nZSBoYXMgZW5kaW5nIGp1bmsiLAorICAgIGlucHV0VGV4dCA9PiAiQEAgLTEs
NCArMSBAQCBmb28oKSIsCisgICAgZXhwZWN0ZWRSZXR1cm4gPT4gWworeworICAgIHN0YXJ0aW5n
TGluZSA9PiAxLAorICAgIGxpbmVDb3VudCA9PiA0LAorICAgIG5ld1N0YXJ0aW5nTGluZSA9PiAx
LAorICAgIG5ld0xpbmVDb3VudCA9PiAxLAorfQorXQorfSwKKyk7CisKK215ICR0ZXN0Q2FzZXND
b3VudCA9IEB0ZXN0Q2FzZUhhc2hSZWZzOworcGxhbih0ZXN0cyA9PiAkdGVzdENhc2VzQ291bnQp
OworCitmb3JlYWNoIG15ICR0ZXN0Q2FzZSAoQHRlc3RDYXNlSGFzaFJlZnMpIHsKKyAgICBteSAk
dGVzdE5hbWVTdGFydCA9ICJwYXJzZUNodW5rUmFuZ2UoKTogJHRlc3RDYXNlLT57dGVzdE5hbWV9
OiBjb21wYXJpbmciOworCisgICAgbXkgQGdvdCA9IFZDU1V0aWxzOjpwYXJzZUNodW5rUmFuZ2Uo
JHRlc3RDYXNlLT57aW5wdXRUZXh0fSk7CisgICAgbXkgJGV4cGVjdGVkUmV0dXJuID0gJHRlc3RD
YXNlLT57ZXhwZWN0ZWRSZXR1cm59OworCisgICAgaXNfZGVlcGx5KFxAZ290LCAkZXhwZWN0ZWRS
ZXR1cm4sICIkdGVzdE5hbWVTdGFydCByZXR1cm4gdmFsdWUuIik7Cit9CkluZGV4OiBUb29scy9T
Y3JpcHRzL3dlYmtpdHBlcmwvVkNTVXRpbHNfdW5pdHRlc3QvcGFyc2VEaWZmLnBsCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9WQ1NVdGlsc191bml0dGVzdC9wYXJzZURp
ZmYucGwJKHJldmlzaW9uIDg2ODA1KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL1ZDU1V0
aWxzX3VuaXR0ZXN0L3BhcnNlRGlmZi5wbAkod29ya2luZyBjb3B5KQpAQCAtOTk0LDYgKzk5NCwz
NiBAQCBFTkQKIHVuZGVmXSwKICAgICBleHBlY3RlZE5leHRMaW5lID0+IHVuZGVmLAogfSwKK3sK
KyAgICAjIE5ldyB0ZXN0CisgICAgZGlmZk5hbWUgPT4gIkdpdDogQXBwZW5kIG5ldyBsaW5lIHRv
IHRoZSBlbmQgb2YgYW4gZXhpc3RpbmcgZmlsZSIsCisgICAgaW5wdXRUZXh0ID0+IDw8J0VORCcs
CitkaWZmIC0tZ2l0IGEvZm9vIGIvZm9vCitpbmRleCA4NjMzMzlmLi5kYjQxOGIyIDEwMDY0NAor
LS0tIGEvZm9vCisrKysgYi9mb28KK0BAIC0xICsxLDIgQEAKKyBQYXNzZWQKKysKK0VORAorICAg
IGV4cGVjdGVkUmV0dXJuID0+IFsKK1t7CisgICAgc3ZuQ29udmVydGVkVGV4dCA9PiAgPDwnRU5E
JywKK0luZGV4OiBmb28KK2luZGV4IDg2MzMzOWYuLmRiNDE4YjIgMTAwNjQ0CistLS0gZm9vCisr
KysgZm9vCitAQCAtMSArMSwyIEBACisgUGFzc2VkCisrCitFTkQKKyAgICBpbmRleFBhdGggPT4g
ImZvbyIsCisgICAgaXNHaXQgPT4gMSwKKyAgICBudW1UZXh0Q2h1bmtzID0+IDEsCit9XSwKK3Vu
ZGVmXSwKKyAgICBleHBlY3RlZE5leHRMaW5lID0+IHVuZGVmLAorfSwKIHsgICAjIE5ldyB0ZXN0
CiAgICAgZGlmZk5hbWUgPT4gIkdpdDogbmV3IGZpbGUiLAogICAgIGlucHV0VGV4dCA9PiA8PCdF
TkQnLAo=
</data>
<flag name="review"
          id="87536"
          type_id="1"
          status="+"
          setter="ddkilzer"
    />
    <flag name="commit-queue"
          id="88053"
          type_id="3"
          status="-"
          setter="ddkilzer"
    />
          </attachment>
      

    </bug>

</bugzilla>