<?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>34033</bug_id>
          
          <creation_ts>2010-01-22 20:35:31 -0800</creation_ts>
          <short_desc>svn-apply: Change svn-apply and svn-unapply to use new parsePatch().</short_desc>
          <delta_ts>2010-04-29 03:35:14 -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></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>38094</dependson>
          <blocked>27204</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Jerdonek">cjerdonek</reporter>
          <assigned_to name="Chris Jerdonek">cjerdonek</assigned_to>
          <cc>abarth</cc>
    
    <cc>aroben</cc>
    
    <cc>cjerdonek</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>183935</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-22 20:35:31 -0800</bug_when>
    <thetext>This will simplify svn-apply and svn-unapply, increase their test coverage, and make them more similar.  It also paves the way for supporting SVN properties, e.g.:

https://bugs.webkit.org/show_bug.cgi?id=27204

parsePatch() is the unit-tested method introduced here:

https://bugs.webkit.org/show_bug.cgi?id=33475</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184094</commentid>
    <comment_count>1</comment_count>
      <attachid>47299</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-24 12:25:22 -0800</bug_when>
    <thetext>Created attachment 47299
Proposed patch

I discovered Test::More&apos;s is_deeply function in this patch, which simplifies the unit tests a lot.  (I can use it to simplify some of the other unit test files, the next time I make a change to one of those.)

cq- so I can be around when this goes out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185389</commentid>
    <comment_count>2</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-28 02:00:23 -0800</bug_when>
    <thetext>Oops, like I messed up last weekend and added my check-webkit-style reviewers list instead of my svn-apply reviewer(s).  Adding you now, David K.  Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187957</commentid>
    <comment_count>3</comment_count>
      <attachid>47299</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-04 15:14:08 -0800</bug_when>
    <thetext>Comment on attachment 47299
Proposed patch

I tend to make long loop blocks into their own functions (well, long blocks in general):
 616     for my $diffHashRef (@diffHashRefs) {

But perhaps this one makes sense inline like this.


Why is shouldForce supported here?
 627                 die &quot;Index path $indexPath appears twice as a copy target.&quot; unless $shouldForce;

Would that ever be a valid diff that we wanted to support processing of?  It seems more like such might be caused by programmer error.  If would have probably written it as a one-line perl if.

prepareParsedPatch seems mostly a sanity-checking method.  One which splits out into the various arrays of hashs.

Maybe it should be called something with &quot;sort&quot; in the name, since it sorts into buckets. Although that might get confusing as it&apos;s not sorting the order of the diffs in any way.


I guess if you did split the for innards out into a separate function, it could return the name of the hash and the outer loop could actually do the push.

copiedFiles seems uneeded.  You could do a linear search in all 3 cases, instead of having the special copiedFiles?  Or you could have a separate pass over the list of hashes (either before or after splitting them out into buckets) which makes sure that none of the index paths are doubled.  A separate pass strikes me as cleaner than wrapping it into this loop here.  Maybe python has just gotten me used to that pattern with all of it&apos;s map/reduce/list-comprehension style processing where you tend to make lots of separate passes over your data to do different things.

I assume we don&apos;t support applying multipel files, or do we?
29 my @diffHashRefs = parsePatch(*ARGV);
 130 
 131 print &quot;Parsed &quot; . @diffHashRefs . &quot; diffs from patch file.\n&quot;;

If we do, we need to update the print message.


I&apos;m sad that we do so much of svn-apply at the root level instead of using nicely named subroutines.

the move-copy for loop is one example of a case where I&apos;m surprised we don&apos;t just make it a sub routine and call it:
 151 for my $copyDiffHashRef (@copyDiffHashRefs) {
Maybe that&apos;s a separate patch. :)

Can&apos;t perl return a list and decompose it on the fly?
 133 my $preparedPatchHash = prepareParsedPatch($force, @diffHashRefs);

So you could write that:

my (@copyDiffHashRefs, @ nonCopyDiffHashRefs, % sourceRevisions) = prepareParsedPatch();

Or am I dreaming of python?

Why don&apos;t we just call the hash-key &quot;svnFormattedDiff&quot;:
 305     my $patch = $diffHashRef-&gt;{svnConvertedText}; # SVN-formatted diff

instead of adding a comment?

Does this work on windows to?  I guess we use CYGWIN?
 54 # Relative to root
 55 my $pattern = &quot;WebKitTools/Scripts/webkitperl/*_unittest/*.pl&quot;;
4656 

Is this semantically differnet from having never defined the key?
 34     copiedFromPath =&gt; undef,

I&apos;m not sure my little brain can parse those unit tests.  I guess I&apos;ll have to trust you that they&apos;re sane.

Overall this looks like a great change.  I&apos;d love to see your response to my naming thoughts/questions before giving this a final r+ though.  Marking this r- for now, you can re-mark it r? if you believe it should land unchanged, or i&apos;m happy to review any revised version now that I&apos;ve read this one through and understand it! :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188442</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-06 11:54:55 -0800</bug_when>
    <thetext>(In reply to comment #3)

Thanks a lot for taking a crack at this, Eric!

Just a quick note on this patch since I agree with a lot of your
sentiments below.  My main goals with this patch were to connect up
the unit-tested code with more unit-tested code, while minimizing
the non-unit-tested changes to svn-apply and svn-unapply.  In other
words, I was trying to resist doing any other refactoring of
svn-apply/unapply, since as you have also noticed, there is a
lot of stuff that can be done. :)

A consequence of this decision was keeping those hashes and arrays
they were already looping through: the versions, copied files, and
non-copied files.  Unfortunately, this made for a unit-tested
function with a somewhat awkward purpose and return value.

&gt; (From update of attachment 47299 [details])
&gt; I tend to make long loop blocks into their own functions (well, long blocks in
&gt; general):
&gt;  616     for my $diffHashRef (@diffHashRefs) {
&gt; 
&gt; But perhaps this one makes sense inline like this.

Yes, I agree with your instinct here.  But since I&apos;m not sure we&apos;ll 
want to keep prepareParsedPatch() in its current form as the
refactoring of svn-apply/unapply continues, it&apos;s probably not worth
the extra effort to break the inside out.  It&apos;s also possible that the
inside function would have an unavoidably messy signature and return
value given what prepareParsedPatch() does, but I&apos;m not sure.

&gt; Why is shouldForce supported here?
&gt;  627                 die &quot;Index path $indexPath appears twice as a copy
&gt; target.&quot; unless $shouldForce;
&gt; 
&gt; Would that ever be a valid diff that we wanted to support processing of?  It
&gt; seems more like such might be caused by programmer error.

Good question.  The original code actually proceeds without any
interruption in this case.  But it didn&apos;t seem quite right to me.
The compromise I made was to die, but to give the user the ability
to continue if it was wrong to die (that sounds weird :) ).  That
way we will also be able to find out whether this case occurs in
the wild.  It&apos;s possible this situation can come up if patches are
chained together -- I&apos;m not sure.  If we are going to make any change
to this line, I would probably just take it out altogether.  It&apos;s
always a bit risky to constrain/add more validation to a script after
the fact, in the absence of detailed documentation.

&gt; If would have
&gt; probably written it as a one-line perl if.

The prevailing style I&apos;ve noticed in these scripts is to use unless,
e.g. the following line which is visible in the patch file:

&gt; if ($merge) {
&gt;    die &quot;--merge is currently only supported for SVN&quot; unless isSVN();


&gt; prepareParsedPatch seems mostly a sanity-checking method.  One which splits out
&gt; into the various arrays of hashs.

It was more to prepare the variables so it can be &quot;dropped in&quot; to
svn-apply/unapply with little changes.  The sanity-checking was added
mostly after the fact.

&gt; Maybe it should be called something with &quot;sort&quot; in the name, since it sorts
&gt; into buckets. Although that might get confusing as it&apos;s not sorting the order
&gt; of the diffs in any way.

Or perhaps &quot;divide&quot; or &quot;split&quot;.  The dictionary of revision numbers
is orthogonal to the splitting up, so it&apos;s really doing a couple things.
Basically, it&apos;s not the most natural function.  I expect it will go away
over time.

&gt; I guess if you did split the for innards out into a separate function, it could
&gt; return the name of the hash and the outer loop could actually do the push.
&gt; 
&gt; copiedFiles seems uneeded.  You could do a linear search in all 3 cases,
&gt; instead of having the special copiedFiles?

Yes, I thought about that.  I ended up choosing the route that allows
the code path to be unit tested.  Once we have more test coverage of
svn-apply/unapply, we can refactor in a more natural way. 

&gt; I assume we don&apos;t support applying multipel files, or do we?
&gt; 29 my @diffHashRefs = parsePatch(*ARGV);
&gt;  130 
&gt;  131 print &quot;Parsed &quot; . @diffHashRefs . &quot; diffs from patch file.\n&quot;;
&gt; 
&gt; If we do, we need to update the print message.

Yes, I believe that can be done (although I&apos;m not sure if anyone
does it), so you&apos;re right on changing the message.  Applying
multiple patches is one case that might have implications
for the sanity-checking (as I said above), so this is another case
where we&apos;re not sure on the scope of use.

&gt; I&apos;m sad that we do so much of svn-apply at the root level instead of using
&gt; nicely named subroutines.

Yes, I agree.  I can envision svn-apply/unapply both being reduced
to a single call to the same function -- with a boolean $shouldReverse
parameter.


&gt; the move-copy for loop is one example of a case where I&apos;m surprised we don&apos;t
&gt; just make it a sub routine and call it:
&gt;  151 for my $copyDiffHashRef (@copyDiffHashRefs) {
&gt; Maybe that&apos;s a separate patch. :)

Yes, we can do more later.

&gt; Can&apos;t perl return a list and decompose it on the fly?
&gt;  133 my $preparedPatchHash = prepareParsedPatch($force, @diffHashRefs);
&gt; 
&gt; So you could write that:
&gt; 
&gt; my (@copyDiffHashRefs, @ nonCopyDiffHashRefs, % sourceRevisions) =
&gt; prepareParsedPatch();

Perl flattens arrays, so you can only rely on an array at the end.
To do nested arrays, you need to use references.  I chose to return
(a reference to) a hash, though, to avoid having to rely on the
ordering of the return value.  I probably should be calling that
&quot;$preparedPatchHashRef&quot;.  It&apos;s possible there&apos;s a way to dereference
multiple hash values at once, but I&apos;m not sure.  It might make
for a messy line.

&gt; Why don&apos;t we just call the hash-key &quot;svnFormattedDiff&quot;:
&gt;  305     my $patch = $diffHashRef-&gt;{svnConvertedText}; # SVN-formatted diff
&gt; 
&gt; instead of adding a comment?

The containing &quot;object&quot; is itself called a diff, so it didn&apos;t make
as much sense for me to call one of its &quot;properties&quot; a diff.  So I
chose to call it the text associated to the diff.  As for converted
versus formatted, I chose converted since it is doing more than just
formatting.  For example, there can be a loss of information in the
conversion, etc. (e.g. the file modes that Git diffs have and 
other Git metadata).

&gt; Does this work on windows to?  I guess we use CYGWIN?
&gt;  54 # Relative to root
&gt;  55 my $pattern = &quot;WebKitTools/Scripts/webkitperl/*_unittest/*.pl&quot;;
&gt; 4656 

I tried this on Windows, and it worked (no CYGWIN).  David K. has also
reviewed and commented on this specific line, and I&apos;m sure he would
have mentioned something if it wasn&apos;t cross-platform.

&gt; Is this semantically differnet from having never defined the key?
&gt;  34     copiedFromPath =&gt; undef,

Yes, for example--

&gt; my $hashRef = {key1 =&gt; undef};

means that--

exists($hashRef-&gt;{key1}) is true while
exists($hashRef-&gt;{key2}) is not true.

I will make some adjustments and re-submit after thinking more about your comments.  Thanks again!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188443</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-06 12:00:03 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)

&gt; &gt; Why don&apos;t we just call the hash-key &quot;svnFormattedDiff&quot;:
&gt; &gt;  305     my $patch = $diffHashRef-&gt;{svnConvertedText}; # SVN-formatted diff
&gt; &gt; 
&gt; &gt; instead of adding a comment?
&gt; 
&gt; The containing &quot;object&quot; is itself called a diff, so it didn&apos;t make
&gt; as much sense for me to call one of its &quot;properties&quot; a diff.  So I
&gt; chose to call it the text associated to the diff.  As for converted
&gt; versus formatted, I chose converted since it is doing more than just
&gt; formatting.  For example, there can be a loss of information in the
&gt; conversion, etc. (e.g. the file modes that Git diffs have and 
&gt; other Git metadata).

I meant to add here that I should probably just take that comment out
since it is redundant.  Thanks for noticing that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188444</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-02-06 12:18:53 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; Is this semantically differnet from having never defined the key?
&gt; &gt;  34     copiedFromPath =&gt; undef,
&gt; 
&gt; Yes, for example--
&gt; 
&gt; &gt; my $hashRef = {key1 =&gt; undef};
&gt; 
&gt; means that--
&gt; 
&gt; exists($hashRef-&gt;{key1}) is true while
&gt; exists($hashRef-&gt;{key2}) is not true.

One more thing.  For completeness, you can use--

defined($hashRef-&gt;{key1})

rather than &quot;exists&quot; to distinguish &quot;undef&quot; from other values.  Both key1 and key2 have defined false in the above example.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213955</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-04-19 01:38:49 -0700</bug_when>
    <thetext>This is a heads up that I should be reposting a rebased patch within 1 or 2 days, incorporating whatever comments make sense at this time from Eric&apos;s comments.

This was spurred by conversation with Dan Bates from this report:

https://bugs.webkit.org/show_bug.cgi?id=27204#c28</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215654</commentid>
    <comment_count>8</comment_count>
      <attachid>54016</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-04-21 19:40:43 -0700</bug_when>
    <thetext>Created attachment 54016
Proposed patch 2

Resubmitting in response to Eric&apos;s comments in comment 3.

It&apos;s been quite a while since patch #1 was submitted.  Since it&apos;s been such a long time, below are the differences this patch has with patch #1:

diff --git a/WebKitTools/Scripts/VCSUtils.pm b/WebKitTools/Scripts/VCSUtils.pm
index 9c0b5bd..6c6f938 100644
--- a/WebKitTools/Scripts/VCSUtils.pm
+++ b/WebKitTools/Scripts/VCSUtils.pm
@@ -611,7 +611,7 @@ sub prepareParsedPatch($@)
     my %copiedFiles;
 
     # Return values
-    my @copyDiffHashRefs = (); # FIXME: Remove these initializers?
+    my @copyDiffHashRefs = ();
     my @nonCopyDiffHashRefs = ();
     my %sourceRevisionHash = ();
     for my $diffHashRef (@diffHashRefs) {
@@ -624,9 +624,9 @@ sub prepareParsedPatch($@)
             # Then the diff is a copy operation.
             $sourcePath = $copiedFromPath;
 
-            if (exists($copiedFiles{$indexPath})) {
-                die &quot;Index path $indexPath appears twice as a copy target.&quot; unless $shouldForce;
-            }
+            # FIXME: Consider printing a warning or exiting if
+            #        exists($copiedFiles{$indexPath}) is true -- i.e. if
+            #        $indexPath appears twice as a copy target.
             $copiedFiles{$indexPath} = $sourcePath;
 
             push @copyDiffHashRefs, $diffHashRef;
diff --git a/WebKitTools/Scripts/svn-apply b/WebKitTools/Scripts/svn-apply
index 20a3f06..13b215b 100755
--- a/WebKitTools/Scripts/svn-apply
+++ b/WebKitTools/Scripts/svn-apply
@@ -128,7 +128,7 @@ my %copiedFiles;
 # otherwise get a bareword error.
 my @diffHashRefs = parsePatch(*ARGV);
 
-print &quot;Parsed &quot; . @diffHashRefs . &quot; diffs from patch file.\n&quot;;
+print &quot;Parsed &quot; . @diffHashRefs . &quot; diffs from patch file(s).\n&quot;;
 
 my $preparedPatchHash = prepareParsedPatch($force, @diffHashRefs);
 
@@ -303,7 +303,7 @@ sub patch($)
 {
     my ($diffHashRef) = @_;
 
-    my $patch = $diffHashRef-&gt;{svnConvertedText}; # SVN-formatted diff
+    my $patch = $diffHashRef-&gt;{svnConvertedText};
 
     unless ($patch =~ m|^Index: ([^\r\n]+)|) {
         my $separator = &apos;-&apos; x 67;
diff --git a/WebKitTools/Scripts/svn-unapply b/WebKitTools/Scripts/svn-unapply
index ec66b33..d5b95e8 100755
--- a/WebKitTools/Scripts/svn-unapply
+++ b/WebKitTools/Scripts/svn-unapply
@@ -101,7 +101,7 @@ my %directoriesToCheck;
 # otherwise get a bareword error.
 my @diffHashRefs = parsePatch(*ARGV);
 
-print &quot;Parsed &quot; . @diffHashRefs . &quot; diffs from patch file.\n&quot;;
+print &quot;Parsed &quot; . @diffHashRefs . &quot; diffs from patch file(s).\n&quot;;
 
 my $preparedPatchHash = prepareParsedPatch($force, @diffHashRefs);
 
@@ -139,7 +139,7 @@ sub patch($)
 {
     my ($diffHashRef) = @_;
 
-    my $patch = $diffHashRef-&gt;{svnConvertedText}; # SVN-formatted diff
+    my $patch = $diffHashRef-&gt;{svnConvertedText};
 
     unless ($patch =~ m|^Index: ([^\r\n]+)|) {
         my $separator = &apos;-&apos; x 67;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216488</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-04-23 11:22:42 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Created an attachment (id=54016) [details]
&gt; Proposed patch 2

Hi Eric, can you r+ this change?  A few months back (in comment 3), you more or less said you were willing to r+ it:

&gt; I&apos;d love to see your response to my
&gt; naming thoughts/questions before giving this a final r+ though.  Marking this
&gt; r- for now, you can re-mark it r? if you believe it should land unchanged

The update I just submitted is largely the same as the first patch with only minor differences in response to your comments.  Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216516</commentid>
    <comment_count>10</comment_count>
      <attachid>54016</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-23 12:50:34 -0700</bug_when>
    <thetext>Comment on attachment 54016
Proposed patch 2

Looks right as far as I can tell.  Please be sure you ran test-webkitpy --all as those have more tests of svn-apply.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216530</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-04-23 13:11:44 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 54016 [details])
&gt; Looks right as far as I can tell.  Please be sure you ran test-webkitpy --all
&gt; as those have more tests of svn-apply.

Will do, thanks.  Will also be monitoring after landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216532</commentid>
    <comment_count>12</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-04-23 13:14:12 -0700</bug_when>
    <thetext>Awesome. Then we can look at bug #27204.

(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; (From update of attachment 54016 [details] [details])
&gt; &gt; Looks right as far as I can tell.  Please be sure you ran test-webkitpy --all
&gt; &gt; as those have more tests of svn-apply.
&gt; 
&gt; Will do, thanks.  Will also be monitoring after landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216534</commentid>
    <comment_count>13</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-04-23 13:16:14 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Awesome. Then we can look at bug #27204.

Definitely!  I&apos;ll be touch with you about it off-line.

Thanks again for your patience. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216822</commentid>
    <comment_count>14</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-04-25 07:14:28 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 54016 [details])
&gt; Looks right as far as I can tell.  Please be sure you ran test-webkitpy --all
&gt; as those have more tests of svn-apply.

Good suggestion to run &quot;test-webkitpy --all&quot;.

It turns out the new parsing code didn&apos;t support the format used by binary diffs.  I&apos;ve added that support in a patch on another bug (bug 38094), so that &quot;test-webkitpy --all&quot; should now pass with this change.

Once bug 38094 lands, I should be able to land this as is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218934</commentid>
    <comment_count>15</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-04-29 03:35:14 -0700</bug_when>
    <thetext>Committed:

http://trac.webkit.org/changeset/58495</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47299</attachid>
            <date>2010-01-24 12:25:22 -0800</date>
            <delta_ts>2010-04-21 19:40:43 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>_patch-34033-1.txt</filename>
            <type>text/plain</type>
            <size>19835</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBkOGVjYWNjLi5lYjJiOGIyIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzEgQEAKKzIwMTAtMDEt
MjQgIENocmlzIEplcmRvbmVrICA8Y2plcmRvbmVrQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0b3JlZCBzdm4tYXBwbHkg
YW5kIHN2bi11bmFwcGx5IHRvIHVzZSB0aGUgbmV3CisgICAgICAgIHBhcnNlUGF0Y2goKSBzdWJy
b3V0aW5lLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zNDAzMworCisgICAgICAgICogU2NyaXB0cy9WQ1NVdGlscy5wbToKKyAgICAgICAgICAtIENv
bnNvbGlkYXRlZCAlZGlmZkhhc2ggZG9jdW1lbnRhdGlvbi4KKyAgICAgICAgICAtIEFkZGVkIHBy
ZXBhcmVQYXJzZWRQYXRjaCgpLgorCisgICAgICAgICogU2NyaXB0cy9zdm4tYXBwbHk6CisgICAg
ICAgICAgLSBSZXBsYWNlZCBtYWluIHdoaWxlIGxvb3Agd2l0aCBjYWxscyB0byBwYXJzZVBhdGNo
KCkgYW5kCisgICAgICAgICAgICBwcmVwYXJlUGFyc2VkUGF0Y2goKS4KKworICAgICAgICAqIFNj
cmlwdHMvc3ZuLXVuYXBwbHk6CisgICAgICAgICAgLSBSZXBsYWNlZCBtYWluIHdoaWxlIGxvb3Ag
d2l0aCBjYWxscyB0byBwYXJzZVBhdGNoKCkgYW5kCisgICAgICAgICAgICBwcmVwYXJlUGFyc2Vk
UGF0Y2goKS4KKworICAgICAgICAqIFNjcmlwdHMvdGVzdC13ZWJraXRwZXJsOgorICAgICAgICAg
IC0gQ2hhbmdlZCB0byByZW5kZXIgcmVsYXRpdmUgdGVzdCBwYXRocyByYXRoZXIgdGhhbiBhYnNv
bHV0ZQorICAgICAgICAgICAgdGVzdCBwYXRocy4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cGVybC9WQ1NVdGlsc191bml0dGVzdC9wcmVwYXJlUGFyc2VkUGF0Y2gucGw6IEFkZGVkLgorICAg
ICAgICAgIC0gQWRkZWQgdW5pdCB0ZXN0cyBmb3IgcHJlcGFyZVBhcnNlZFBhdGNoKCkuCisKIDIw
MTAtMDEtMjIgIEtldmluIFdhdHRlcnMgIDxrZXZpbndhdHRlcnNAZ21haWwuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IEtldmluIE9sbGl2aWVyLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMv
U2NyaXB0cy9WQ1NVdGlscy5wbSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvVkNTVXRpbHMucG0KaW5k
ZXggMDIyYzcyYS4uNTliOTZkZiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9WQ1NV
dGlscy5wbQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL1ZDU1V0aWxzLnBtCkBAIC02NCw2ICs2
NCw3IEBAIEJFR0lOIHsKICAgICAgICAgJm5vcm1hbGl6ZVBhdGgKICAgICAgICAgJnBhcnNlUGF0
Y2gKICAgICAgICAgJnBhdGhSZWxhdGl2ZVRvU1ZOUmVwb3NpdG9yeVJvb3RGb3JQYXRoCisgICAg
ICAgICZwcmVwYXJlUGFyc2VkUGF0Y2gKICAgICAgICAgJnJ1blBhdGNoQ29tbWFuZAogICAgICAg
ICAmc3ZuUmV2aXNpb25Gb3JEaXJlY3RvcnkKICAgICAgICAgJnN2blN0YXR1cwpAQCAtNDgxLDYg
KzQ4MiwyNCBAQCBzdWIgcGFyc2VEaWZmSGVhZGVyKCQkKQogICAgIHJldHVybiAoXCVoZWFkZXIs
ICRsYXN0UmVhZExpbmUpOwogfQogCisjIEEgJWRpZmZIYXNoIGlzIGEgaGFzaCByZXByZXNlbnRp
bmcgYSBzb3VyY2UgY29udHJvbCBkaWZmIG9mIGEgc2luZ2xlCisjIGZpbGUgb3BlcmF0aW9uIChl
LmcuIGEgZmlsZSBtb2RpZmljYXRpb24sIGNvcHksIG9yIGRlbGV0ZSkuCisjCisjIFRoZXNlIGhh
c2hlcyBhcHBlYXIsIGZvciBleGFtcGxlLCBpbiB0aGUgcGFyc2VEaWZmKCksIHBhcnNlUGF0Y2go
KSwKKyMgYW5kIHByZXBhcmVQYXJzZWRQYXRjaCgpIHN1YnJvdXRpbmVzIG9mIHRoaXMgcGFja2Fn
ZS4KKyMKKyMgVGhlIGNvcnJlc3BvbmRpbmcgdmFsdWVzIGFyZS0tCisjCisjICAgY29waWVkRnJv
bVBhdGg6IGlmIGEgZmlsZSBjb3B5LCB0aGUgcGF0aCBmcm9tIHdoaWNoIHRoZSBmaWxlIHdhcwor
IyAgICAgICAgICAgICAgICAgICBjb3BpZWQuIE90aGVyd2lzZSwgdW5kZWZpbmVkLgorIyAgIGlu
ZGV4UGF0aDogdGhlIHBhdGggb2YgdGhlIGZpbGUuIEZvciBTVk4tZm9ybWF0dGVkIGRpZmZzLCB0
aGlzIGlzCisjICAgICAgICAgICAgICB0aGUgc2FtZSBhcyB0aGUgcGF0aCBpbiB0aGUgIkluZGV4
OiIgbGluZS4KKyMgICBzb3VyY2VSZXZpc2lvbjogdGhlIHJldmlzaW9uIG51bWJlciBvZiB0aGUg
c291cmNlLiBUaGlzIGlzIHRoZSBzYW1lCisjICAgICAgICAgICAgICAgICAgIGFzIHRoZSByZXZp
c2lvbiBudW1iZXIgdGhlIGZpbGUgd2FzIGNvcGllZCBmcm9tLCBpbgorIyAgICAgICAgICAgICAg
ICAgICB0aGUgY2FzZSBvZiBhIGZpbGUgY29weS4KKyMgICBzdm5Db252ZXJ0ZWRUZXh0OiB0aGUg
ZGlmZiBjb252ZXJ0ZWQgdG8gU1ZOIGZvcm1hdC4KKyMKKwogIyBQYXJzZSBvbmUgZGlmZiBmcm9t
IGEgcGF0Y2ggZmlsZSBjcmVhdGVkIGJ5IHN2bi1jcmVhdGUtcGF0Y2gsIGFuZAogIyBhZHZhbmNl
IHRoZSBmaWxlIGhhbmRsZSBzbyB0aGUgbGFzdCBsaW5lIHJlYWQgaXMgdGhlIGZpcnN0IGxpbmUK
ICMgb2YgdGhlIG5leHQgaGVhZGVyIGJsb2NrLgpAQCAtNDkzLDE0ICs1MTIsOCBAQCBzdWIgcGFy
c2VEaWZmSGVhZGVyKCQkKQogIyAgICRsaW5lOiB0aGUgbGluZSBsYXN0IHJlYWQgZnJvbSAkZmls
ZUhhbmRsZS4KICMKICMgUmV0dXJucyAoJGRpZmZIYXNoUmVmLCAkbGFzdFJlYWRMaW5lKToKLSMg
ICAkZGlmZkhhc2hSZWY6Ci0jICAgICBjb3BpZWRGcm9tUGF0aDogaWYgYSBmaWxlIGNvcHksIHRo
ZSBwYXRoIGZyb20gd2hpY2ggdGhlIGZpbGUgd2FzCi0jICAgICAgICAgICAgICAgICAgICAgY29w
aWVkLiBPdGhlcndpc2UsIHVuZGVmaW5lZC4KLSMgICAgIGluZGV4UGF0aDogdGhlIHBhdGggaW4g
dGhlICJJbmRleDoiIGxpbmUuCi0jICAgICBzb3VyY2VSZXZpc2lvbjogdGhlIHJldmlzaW9uIG51
bWJlciBvZiB0aGUgc291cmNlLiBUaGlzIGlzIHRoZSBzYW1lCi0jICAgICAgICAgICAgICAgICAg
ICAgYXMgdGhlIHJldmlzaW9uIG51bWJlciB0aGUgZmlsZSB3YXMgY29waWVkIGZyb20sIGluCi0j
ICAgICAgICAgICAgICAgICAgICAgdGhlIGNhc2Ugb2YgYSBmaWxlIGNvcHkuCi0jICAgICBzdm5D
b252ZXJ0ZWRUZXh0OiB0aGUgZGlmZiBjb252ZXJ0ZWQgdG8gU1ZOIGZvcm1hdC4KKyMgICAkZGlm
Zkhhc2hSZWY6IEEgcmVmZXJlbmNlIHRvIGEgJWRpZmZIYXNoLgorIyAgICAgICAgICAgICAgICAg
U2VlIHRoZSAlZGlmZkhhc2ggZG9jdW1lbnRhdGlvbiBhYm92ZS4KICMgICAkbGFzdFJlYWRMaW5l
OiB0aGUgbGluZSBsYXN0IHJlYWQgZnJvbSAkZmlsZUhhbmRsZQogc3ViIHBhcnNlRGlmZigkJCkK
IHsKQEAgLTU1Miw4ICs1NjUsOCBAQCBzdWIgcGFyc2VEaWZmKCQkKQogIyAgICAgICAgICAgICAg
ICByZWFkIGZyb20uCiAjCiAjIFJldHVybnM6Ci0jICAgQGRpZmZIYXNoUmVmczogYW4gYXJyYXkg
b2YgZGlmZiBoYXNoIHJlZmVyZW5jZXMuIFNlZSBwYXJzZURpZmYoKSBmb3IKLSMgICAgICAgICAg
ICAgICAgICBhIGRlc2NyaXB0aW9uIG9mIGVhY2ggJGRpZmZIYXNoUmVmLgorIyAgIEBkaWZmSGFz
aFJlZnM6IGFuIGFycmF5IG9mIGRpZmYgaGFzaCByZWZlcmVuY2VzLgorIyAgICAgICAgICAgICAg
ICAgIFNlZSB0aGUgJWRpZmZIYXNoIGRvY3VtZW50YXRpb24gYWJvdmUuCiBzdWIgcGFyc2VQYXRj
aCgkKQogewogICAgIG15ICgkZmlsZUhhbmRsZSkgPSBAXzsKQEAgLTU3Myw2ICs1ODYsNzggQEAg
c3ViIHBhcnNlUGF0Y2goJCkKICAgICByZXR1cm4gQGRpZmZIYXNoUmVmczsKIH0KIAorIyBQcmVw
YXJlIHRoZSByZXN1bHRzIG9mIHBhcnNlUGF0Y2goKSBmb3IgdXNlIGluIHN2bi1hcHBseSBhbmQg
c3ZuLXVuYXBwbHkuCisjCisjIEFyZ3M6CisjICAgJHNob3VsZEZvcmNlOiBXaGV0aGVyIHRvIGNv
bnRpbnVlIHByb2Nlc3NpbmcgaWYgYW4gdW5leHBlY3RlZAorIyAgICAgICAgICAgICAgICAgc3Rh
dGUgb2NjdXJzLgorIyAgIEBkaWZmSGFzaFJlZnM6IEFuIGFycmF5IG9mIHJlZmVyZW5jZXMgdG8g
JWRpZmZIYXNoZXMuCisjICAgICAgICAgICAgICAgICAgU2VlIHRoZSAlZGlmZkhhc2ggZG9jdW1l
bnRhdGlvbiBhYm92ZS4KKyMKKyMgUmV0dXJucyAkcHJlcGFyZWRQYXRjaEhhc2hSZWY6CisjICAg
Y29weURpZmZIYXNoUmVmczogQSByZWZlcmVuY2UgdG8gYW4gYXJyYXkgb2YgdGhlICRkaWZmSGFz
aFJlZnMgaW4KKyMgICAgICAgICAgICAgICAgICAgICBAZGlmZkhhc2hSZWZzIHRoYXQgcmVwcmVz
ZW50IGZpbGUgY29waWVzLiBUaGUgb3JpZ2luYWwKKyMgICAgICAgICAgICAgICAgICAgICBvcmRl
cmluZyBpcyBwcmVzZXJ2ZWQuCisjICAgbm9uQ29weURpZmZIYXNoUmVmczogQSByZWZlcmVuY2Ug
dG8gYW4gYXJyYXkgb2YgdGhlICRkaWZmSGFzaFJlZnMgaW4KKyMgICAgICAgICAgICAgICAgICAg
ICAgICBAZGlmZkhhc2hSZWZzIHRoYXQgZG8gbm90IHJlcHJlc2VudCBmaWxlIGNvcGllcy4KKyMg
ICAgICAgICAgICAgICAgICAgICAgICBUaGUgb3JpZ2luYWwgb3JkZXJpbmcgaXMgcHJlc2VydmVk
LgorIyAgIHNvdXJjZVJldmlzaW9uSGFzaDogQSByZWZlcmVuY2UgdG8gYSBoYXNoIG9mIHNvdXJj
ZSBwYXRoIHRvIHNvdXJjZQorIyAgICAgICAgICAgICAgICAgICAgICAgcmV2aXNpb24gbnVtYmVy
Lgorc3ViIHByZXBhcmVQYXJzZWRQYXRjaCgkQCkKK3sKKyAgICBteSAoJHNob3VsZEZvcmNlLCBA
ZGlmZkhhc2hSZWZzKSA9IEBfOworCisgICAgbXkgJWNvcGllZEZpbGVzOworCisgICAgIyBSZXR1
cm4gdmFsdWVzCisgICAgbXkgQGNvcHlEaWZmSGFzaFJlZnMgPSAoKTsgIyBGSVhNRTogUmVtb3Zl
IHRoZXNlIGluaXRpYWxpemVycz8KKyAgICBteSBAbm9uQ29weURpZmZIYXNoUmVmcyA9ICgpOwor
ICAgIG15ICVzb3VyY2VSZXZpc2lvbkhhc2ggPSAoKTsKKyAgICBmb3IgbXkgJGRpZmZIYXNoUmVm
IChAZGlmZkhhc2hSZWZzKSB7CisgICAgICAgIG15ICRjb3BpZWRGcm9tUGF0aCA9ICRkaWZmSGFz
aFJlZi0+e2NvcGllZEZyb21QYXRofTsKKyAgICAgICAgbXkgJGluZGV4UGF0aCA9ICRkaWZmSGFz
aFJlZi0+e2luZGV4UGF0aH07CisgICAgICAgIG15ICRzb3VyY2VSZXZpc2lvbiA9ICRkaWZmSGFz
aFJlZi0+e3NvdXJjZVJldmlzaW9ufTsKKyAgICAgICAgbXkgJHNvdXJjZVBhdGg7CisKKyAgICAg
ICAgaWYgKGRlZmluZWQoJGNvcGllZEZyb21QYXRoKSkgeworICAgICAgICAgICAgIyBUaGVuIHRo
ZSBkaWZmIGlzIGEgY29weSBvcGVyYXRpb24uCisgICAgICAgICAgICAkc291cmNlUGF0aCA9ICRj
b3BpZWRGcm9tUGF0aDsKKworICAgICAgICAgICAgaWYgKGV4aXN0cygkY29waWVkRmlsZXN7JGlu
ZGV4UGF0aH0pKSB7CisgICAgICAgICAgICAgICAgZGllICJJbmRleCBwYXRoICRpbmRleFBhdGgg
YXBwZWFycyB0d2ljZSBhcyBhIGNvcHkgdGFyZ2V0LiIgdW5sZXNzICRzaG91bGRGb3JjZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICRjb3BpZWRGaWxlc3skaW5kZXhQYXRofSA9ICRzb3Vy
Y2VQYXRoOworCisgICAgICAgICAgICBwdXNoIEBjb3B5RGlmZkhhc2hSZWZzLCAkZGlmZkhhc2hS
ZWY7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAjIFRoZW4gdGhlIGRpZmYgaXMgbm90
IGEgY29weSBvcGVyYXRpb24uCisgICAgICAgICAgICAkc291cmNlUGF0aCA9ICRpbmRleFBhdGg7
CisKKyAgICAgICAgICAgIHB1c2ggQG5vbkNvcHlEaWZmSGFzaFJlZnMsICRkaWZmSGFzaFJlZjsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChkZWZpbmVkKCRzb3VyY2VSZXZpc2lvbikpIHsKKyAg
ICAgICAgICAgIGlmIChleGlzdHMoJHNvdXJjZVJldmlzaW9uSGFzaHskc291cmNlUGF0aH0pICYm
CisgICAgICAgICAgICAgICAgKCRzb3VyY2VSZXZpc2lvbkhhc2h7JHNvdXJjZVBhdGh9ICE9ICRz
b3VyY2VSZXZpc2lvbikpIHsKKyAgICAgICAgICAgICAgICBpZiAoISRzaG91bGRGb3JjZSkgewor
ICAgICAgICAgICAgICAgICAgICBkaWUgIlR3byByZXZpc2lvbnMgb2YgdGhlIHNhbWUgZmlsZSBy
ZXF1aXJlZCBhcyBhIHNvdXJjZTpcbiIuCisgICAgICAgICAgICAgICAgICAgICAgICAiICAgICRz
b3VyY2VQYXRoOiRzb3VyY2VSZXZpc2lvbkhhc2h7JHNvdXJjZVBhdGh9XG4iLgorICAgICAgICAg
ICAgICAgICAgICAgICAgIiAgICAkc291cmNlUGF0aDokc291cmNlUmV2aXNpb24iOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICRzb3VyY2VSZXZpc2lvbkhh
c2h7JHNvdXJjZVBhdGh9ID0gJHNvdXJjZVJldmlzaW9uOworICAgICAgICB9CisgICAgfQorCisg
ICAgbXkgJXByZXBhcmVkUGF0Y2hIYXNoOworCisgICAgJHByZXBhcmVkUGF0Y2hIYXNoe2NvcHlE
aWZmSGFzaFJlZnN9ID0gXEBjb3B5RGlmZkhhc2hSZWZzOworICAgICRwcmVwYXJlZFBhdGNoSGFz
aHtub25Db3B5RGlmZkhhc2hSZWZzfSA9IFxAbm9uQ29weURpZmZIYXNoUmVmczsKKyAgICAkcHJl
cGFyZWRQYXRjaEhhc2h7c291cmNlUmV2aXNpb25IYXNofSA9IFwlc291cmNlUmV2aXNpb25IYXNo
OworCisgICAgcmV0dXJuIFwlcHJlcGFyZWRQYXRjaEhhc2g7Cit9CisKICMgSWYgcG9zc2libGUs
IHJldHVybnMgYSBDaGFuZ2VMb2cgcGF0Y2ggZXF1aXZhbGVudCB0byB0aGUgZ2l2ZW4gb25lLAog
IyBidXQgd2l0aCB0aGUgbmV3ZXN0IENoYW5nZUxvZyBlbnRyeSBpbnNlcnRlZCBhdCB0aGUgdG9w
IG9mIHRoZQogIyBmaWxlIC0tIGkuZS4gbm8gbGVhZGluZyBjb250ZXh0IGFuZCBhbGwgbGluZXMg
c3RhcnRpbmcgd2l0aCAiKyIuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3N2bi1h
cHBseSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvc3ZuLWFwcGx5CmluZGV4IGY1ODYyMTEuLjQ1ZDQy
ZGMgMTAwNzU1Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvc3ZuLWFwcGx5CisrKyBiL1dlYktp
dFRvb2xzL1NjcmlwdHMvc3ZuLWFwcGx5CkBAIC0xMjMsNzIgKzEyMyw0MyBAQCBteSAkcmVwb3Np
dG9yeVJvb3RQYXRoID0gZGV0ZXJtaW5lVkNTUm9vdCgpOwogCiBteSAlY2hlY2tlZERpcmVjdG9y
aWVzOwogbXkgJWNvcGllZEZpbGVzOwotbXkgQHBhdGNoZXM7Ci1teSAldmVyc2lvbnM7Ci0KLW15
ICRjb3BpZWRGcm9tUGF0aDsKLW15ICRmaWx0ZXI7Ci1teSAkaW5kZXhQYXRoOwotbXkgJHBhdGNo
Owotd2hpbGUgKDw+KSB7Ci0gICAgcy8oW1xuXHJdKykkLy9tZzsKLSAgICBteSAkZW9sID0gJDE7
Ci0gICAgaWYgKCFkZWZpbmVkKCRpbmRleFBhdGgpICYmIG0jXmRpZmYgLS1naXQgXHcvIykgewot
ICAgICAgICAkZmlsdGVyID0gXCZnaXRkaWZmMnN2bmRpZmY7Ci0gICAgfQotICAgICRfID0gJiRm
aWx0ZXIoJF8pIGlmICRmaWx0ZXI7Ci0gICAgaWYgKC9eSW5kZXg6ICguKykvKSB7Ci0gICAgICAg
ICRpbmRleFBhdGggPSAkMTsKLSAgICAgICAgaWYgKCRwYXRjaCkgewotICAgICAgICAgICAgaWYg
KCEkY29waWVkRnJvbVBhdGgpIHsKLSAgICAgICAgICAgICAgICBwdXNoIEBwYXRjaGVzLCAkcGF0
Y2g7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAkY29waWVkRnJvbVBhdGggPSAiIjsKLSAg
ICAgICAgICAgICRwYXRjaCA9ICIiOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmICgkaW5kZXhQ
YXRoKSB7Ci0gICAgICAgICMgRml4IHBhdGhzIG9uIGRpZmYsIC0tLSwgYW5kICsrKyBsaW5lcyB0
byBtYXRjaCBwcmVjZWRpbmcgSW5kZXg6IGxpbmUuCi0gICAgICAgIHMvXFMrJC8kaW5kZXhQYXRo
LyBpZiAvXmRpZmYvOwotICAgICAgICBzL14tLS0gXFMrLy0tLSAkaW5kZXhQYXRoLzsKLSAgICAg
ICAgaWYgKC9eLS0tIC4rXChmcm9tIChcUyspOihcZCspXCkkLykgewotICAgICAgICAgICAgJGNv
cGllZEZyb21QYXRoID0gJDE7Ci0gICAgICAgICAgICAkY29waWVkRmlsZXN7JGluZGV4UGF0aH0g
PSAkY29waWVkRnJvbVBhdGg7Ci0gICAgICAgICAgICAkdmVyc2lvbnN7JGNvcGllZEZyb21QYXRo
fSA9ICQyIGlmICgkMiAhPSAwKTsKLSAgICAgICAgfQotICAgICAgICBlbHNpZiAoL14tLS0gLitc
KHJldmlzaW9uIChcZCspXCkkLykgewotICAgICAgICAgICAgJHZlcnNpb25zeyRpbmRleFBhdGh9
ID0gJDEgaWYgKCQxICE9IDApOwotICAgICAgICB9Ci0gICAgICAgIGlmIChzL15cK1wrXCsgXFMr
LysrKyAkaW5kZXhQYXRoLykgewotICAgICAgICAgICAgJGluZGV4UGF0aCA9ICIiOwotICAgICAg
ICB9Ci0gICAgfQotICAgICRwYXRjaCAuPSAkXzsKLSAgICAkcGF0Y2ggLj0gJGVvbDsKLX0KIAot
aWYgKCRwYXRjaCAmJiAhJGNvcGllZEZyb21QYXRoKSB7Ci0gICAgcHVzaCBAcGF0Y2hlcywgJHBh
dGNoOwotfQorIyBOZWVkIHRvIHVzZSBhIHR5cGVnbG9iIHRvIHBhc3MgdGhlIGZpbGUgaGFuZGxl
IGFzIGEgcGFyYW1ldGVyLAorIyBvdGhlcndpc2UgZ2V0IGEgYmFyZXdvcmQgZXJyb3IuCitteSBA
ZGlmZkhhc2hSZWZzID0gcGFyc2VQYXRjaCgqQVJHVik7CisKK3ByaW50ICJQYXJzZWQgIiAuIEBk
aWZmSGFzaFJlZnMgLiAiIGRpZmZzIGZyb20gcGF0Y2ggZmlsZS5cbiI7CisKK215ICRwcmVwYXJl
ZFBhdGNoSGFzaCA9IHByZXBhcmVQYXJzZWRQYXRjaCgkZm9yY2UsIEBkaWZmSGFzaFJlZnMpOwor
CitteSBAY29weURpZmZIYXNoUmVmcyA9IEB7JHByZXBhcmVkUGF0Y2hIYXNoLT57Y29weURpZmZI
YXNoUmVmc319OworbXkgQG5vbkNvcHlEaWZmSGFzaFJlZnMgPSBAeyRwcmVwYXJlZFBhdGNoSGFz
aC0+e25vbkNvcHlEaWZmSGFzaFJlZnN9fTsKK215ICVzb3VyY2VSZXZpc2lvbnMgPSAleyRwcmVw
YXJlZFBhdGNoSGFzaC0+e3NvdXJjZVJldmlzaW9uSGFzaH19OwogCiBpZiAoJG1lcmdlKSB7CiAg
ICAgZGllICItLW1lcmdlIGlzIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRlZCBmb3IgU1ZOIiB1bmxl
c3MgaXNTVk4oKTsKICAgICAjIEhvdyBkbyB3ZSBoYW5kbGUgR2l0IHBhdGNoZXMgYXBwbGllZCB0
byBhbiBTVk4gY2hlY2tvdXQgaGVyZT8KLSAgICBmb3IgbXkgJGZpbGUgKHNvcnQga2V5cyAldmVy
c2lvbnMpIHsKLSAgICAgICAgbXkgJHZlcnNpb24gPSAkdmVyc2lvbnN7JGZpbGV9OworICAgIGZv
ciBteSAkZmlsZSAoc29ydCBrZXlzICVzb3VyY2VSZXZpc2lvbnMpIHsKKyAgICAgICAgbXkgJHZl
cnNpb24gPSAkc291cmNlUmV2aXNpb25zeyRmaWxlfTsKICAgICAgICAgcHJpbnQgIkdldHRpbmcg
dmVyc2lvbiAkdmVyc2lvbiBvZiAkZmlsZVxuIjsKICAgICAgICAgc3lzdGVtKCJzdm4iLCAidXBk
YXRlIiwgIi1yIiwgJHZlcnNpb24sICRmaWxlKSA9PSAwIG9yIGRpZSAiRmFpbGVkIHRvIHJ1biBz
dm4gdXBkYXRlIC1yICR2ZXJzaW9uICRmaWxlLiI7CiAgICAgfQogfQogCi0jIEhhbmRsZSBjb3Bp
ZWQgYW5kIG1vdmVkIGZpbGVzIGZpcnN0IHNpbmNlIG1vdmVkIGZpbGVzIG1heSBoYXZlIHRoZWly
IHNvdXJjZSBkZWxldGVkIGJlZm9yZSB0aGUgbW92ZS4KLWZvciBteSAkZmlsZSAoa2V5cyAlY29w
aWVkRmlsZXMpIHsKLSAgICBhZGREaXJlY3Rvcmllc0lmTmVlZGVkKGRpcm5hbWUoJGZpbGUpKTsK
LSAgICBzY21Db3B5KCRjb3BpZWRGaWxlc3skZmlsZX0sICRmaWxlKTsKKyMgSGFuZGxlIGNvcGll
ZCBhbmQgbW92ZWQgZmlsZXMgZmlyc3Qgc2luY2UgbW92ZWQgZmlsZXMgbWF5IGhhdmUgdGhlaXIK
KyMgc291cmNlIGRlbGV0ZWQgYmVmb3JlIHRoZSBtb3ZlLgorZm9yIG15ICRjb3B5RGlmZkhhc2hS
ZWYgKEBjb3B5RGlmZkhhc2hSZWZzKSB7CisgICAgbXkgJGluZGV4UGF0aCA9ICRjb3B5RGlmZkhh
c2hSZWYtPntpbmRleFBhdGh9OworICAgIG15ICRjb3BpZWRGcm9tUGF0aCA9ICRjb3B5RGlmZkhh
c2hSZWYtPntjb3BpZWRGcm9tUGF0aH07CisKKyAgICBhZGREaXJlY3Rvcmllc0lmTmVlZGVkKGRp
cm5hbWUoJGluZGV4UGF0aCkpOworICAgIHNjbUNvcHkoJGNvcGllZEZyb21QYXRoLCAkaW5kZXhQ
YXRoKTsKKworICAgICRjb3BpZWRGaWxlc3skaW5kZXhQYXRofSA9ICRjb3BpZWRGcm9tUGF0aDsK
IH0KIAotZm9yICRwYXRjaCAoQHBhdGNoZXMpIHsKLSAgICBwYXRjaCgkcGF0Y2gpOworZm9yIG15
ICRkaWZmSGFzaFJlZiAoQG5vbkNvcHlEaWZmSGFzaFJlZnMpIHsKKyAgICBwYXRjaCgkZGlmZkhh
c2hSZWYpOwogfQogCiByZW1vdmVEaXJlY3Rvcmllc0lmTmVlZGVkKCk7CkBAIC0zMjUsMTAgKzI5
NiwxMyBAQCBzdWIgaXNEaXJlY3RvcnlFbXB0eUZvclJlbW92YWwoJCkKICAgICByZXR1cm4gJGRp
cmVjdG9yeUlzRW1wdHk7CiB9CiAKKyMgQXJnczoKKyMgICAkZGlmZkhhc2hSZWY6IGEgZGlmZiBo
YXNoIHJlZmVyZW5jZSBvZiB0aGUgdHlwZSByZXR1cm5lZCBieSBwYXJzZVBhdGNoKCkuCiBzdWIg
cGF0Y2goJCkKIHsKLSAgICBteSAoJHBhdGNoKSA9IEBfOwotICAgIHJldHVybiBpZiAhJHBhdGNo
OworICAgIG15ICgkZGlmZkhhc2hSZWYpID0gQF87CisKKyAgICBteSAkcGF0Y2ggPSAkZGlmZkhh
c2hSZWYtPntzdm5Db252ZXJ0ZWRUZXh0fTsgIyBTVk4tZm9ybWF0dGVkIGRpZmYKIAogICAgIHVu
bGVzcyAoJHBhdGNoID1+IG18XkluZGV4OiAoW15cclxuXSspfCkgewogICAgICAgICBteSAkc2Vw
YXJhdG9yID0gJy0nIHggNjc7CkBAIC0zNDMsNiArMzE3LDggQEAgc3ViIHBhdGNoKCQpCiAgICAg
bXkgJGlzQmluYXJ5ID0gMDsKICAgICBteSAkaXNHaXRCaW5hcnkgPSAwOwogCisgICAgIyBGSVhN
RTogVGhpcyBpbmZvcm1hdGlvbiBzaG91bGQgYmUgZXh0cmFjdGVkIGZyb20gdGhlIGRpZmYgZmls
ZSBhcworICAgICMgICAgICAgIHBhcnQgb2YgdGhlIHBhcnNpbmcgc3RhZ2UsIGkuZS4gdGhlIGNh
bGwgdG8gcGFyc2VQYXRjaCgpLgogICAgICRhZGRpdGlvbiA9IDEgaWYgKCRwYXRjaCA9fiAvXG4t
LS0gLitcKHJldmlzaW9uIDBcKVxyP1xuLyB8fCAkcGF0Y2ggPX4gL1xuQEAgLTAsMCAuKiBAQC8p
ICYmICFleGlzdHMoJGNvcGllZEZpbGVzeyRmdWxsUGF0aH0pOwogICAgICRkZWxldGlvbiA9IDEg
aWYgJHBhdGNoID1+IC9cbkBAIC4qIFwrMCwwIEBALzsKICAgICAkaXNCaW5hcnkgPSAxIGlmICRw
YXRjaCA9fiAvXG5DYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZVwu
LzsKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvc3ZuLXVuYXBwbHkgYi9XZWJLaXRU
b29scy9TY3JpcHRzL3N2bi11bmFwcGx5CmluZGV4IGViMjBjYTAuLmVjNjZiMzMgMTAwNzU1Ci0t
LSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvc3ZuLXVuYXBwbHkKKysrIGIvV2ViS2l0VG9vbHMvU2Ny
aXB0cy9zdm4tdW5hcHBseQpAQCAtOTcsNTQgKzk3LDI0IEBAIG15ICRyZXBvc2l0b3J5Um9vdFBh
dGggPSBkZXRlcm1pbmVWQ1NSb290KCk7CiBteSBAY29waWVkRmlsZXM7CiBteSAlZGlyZWN0b3Jp
ZXNUb0NoZWNrOwogCi1teSAkY29waWVkRnJvbVBhdGg7Ci1teSAkZmlsdGVyOwotbXkgJGluZGV4
UGF0aDsKLW15ICRwYXRjaDsKLXdoaWxlICg8PikgewotICAgIHMvKFtcblxyXSspJC8vbWc7Ci0g
ICAgbXkgJGVvbCA9ICQxOwotICAgIGlmICghZGVmaW5lZCgkaW5kZXhQYXRoKSAmJiBtI15kaWZm
IC0tZ2l0IFx3LyMpIHsKLSAgICAgICAgJGZpbHRlciA9IFwmZ2l0ZGlmZjJzdm5kaWZmOwotICAg
IH0KLSAgICAkXyA9ICYkZmlsdGVyKCRfKSBpZiAkZmlsdGVyOwotICAgIGlmICgvXkluZGV4OiAo
LispLykgewotICAgICAgICAkaW5kZXhQYXRoID0gJDE7Ci0gICAgICAgIGlmICgkcGF0Y2gpIHsK
LSAgICAgICAgICAgIGlmICgkY29waWVkRnJvbVBhdGgpIHsKLSAgICAgICAgICAgICAgICBwdXNo
IEBjb3BpZWRGaWxlcywgJHBhdGNoOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBwYXRjaCgkcGF0Y2gpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgJGNvcGllZEZy
b21QYXRoID0gIiI7Ci0gICAgICAgICAgICAkcGF0Y2ggPSAiIjsKLSAgICAgICAgfQotICAgIH0K
LSAgICBpZiAoJGluZGV4UGF0aCkgewotICAgICAgICAjIEZpeCBwYXRocyBvbiBkaWZmLCAtLS0s
IGFuZCArKysgbGluZXMgdG8gbWF0Y2ggcHJlY2VkaW5nIEluZGV4OiBsaW5lLgotICAgICAgICBz
L14tLS0gXFMrLy0tLSAkaW5kZXhQYXRoLzsKLSAgICAgICAgaWYgKC9eLS0tIC4rXChmcm9tIChc
UyspOlxkK1wpJC8pIHsKLSAgICAgICAgICAgICRjb3BpZWRGcm9tUGF0aCA9ICQxOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChzL15cK1wrXCsgXFMrLysrKyAkaW5kZXhQYXRoLykgewotICAgICAg
ICAgICAgJGluZGV4UGF0aCA9ICIiOwotICAgICAgICB9Ci0gICAgfQotICAgICRwYXRjaCAuPSAk
XzsKLSAgICAkcGF0Y2ggLj0gJGVvbDsKLX0KKyMgTmVlZCB0byB1c2UgYSB0eXBlZ2xvYiB0byBw
YXNzIHRoZSBmaWxlIGhhbmRsZSBhcyBhIHBhcmFtZXRlciwKKyMgb3RoZXJ3aXNlIGdldCBhIGJh
cmV3b3JkIGVycm9yLgorbXkgQGRpZmZIYXNoUmVmcyA9IHBhcnNlUGF0Y2goKkFSR1YpOwogCi1p
ZiAoJHBhdGNoKSB7Ci0gICAgaWYgKCRjb3BpZWRGcm9tUGF0aCkgewotICAgICAgICBwdXNoIEBj
b3BpZWRGaWxlcywgJHBhdGNoOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHBhdGNoKCRwYXRjaCk7
Ci0gICAgfQorcHJpbnQgIlBhcnNlZCAiIC4gQGRpZmZIYXNoUmVmcyAuICIgZGlmZnMgZnJvbSBw
YXRjaCBmaWxlLlxuIjsKKworbXkgJHByZXBhcmVkUGF0Y2hIYXNoID0gcHJlcGFyZVBhcnNlZFBh
dGNoKCRmb3JjZSwgQGRpZmZIYXNoUmVmcyk7CisKK215IEBjb3B5RGlmZkhhc2hSZWZzID0gQHsk
cHJlcGFyZWRQYXRjaEhhc2gtPntjb3B5RGlmZkhhc2hSZWZzfX07CitteSBAbm9uQ29weURpZmZI
YXNoUmVmcyA9IEB7JHByZXBhcmVkUGF0Y2hIYXNoLT57bm9uQ29weURpZmZIYXNoUmVmc319Owor
Citmb3IgbXkgJGRpZmZIYXNoUmVmIChAbm9uQ29weURpZmZIYXNoUmVmcykgeworICAgIHBhdGNo
KCRkaWZmSGFzaFJlZik7CiB9CiAKICMgSGFuZGxlIGNvcGllZCBhbmQgbW92ZWQgZmlsZXMgbGFz
dCBzaW5jZSB0aGV5IG1heSBoYXZlIGhhZCBwb3N0LWNvcHkgY2hhbmdlcyB0aGF0IGhhdmUgbm93
IGJlZW4gdW5hcHBsaWVkCi1mb3IgJHBhdGNoIChAY29waWVkRmlsZXMpIHsKLSAgICBwYXRjaCgk
cGF0Y2gpOworZm9yIG15ICRkaWZmSGFzaFJlZiAoQGNvcHlEaWZmSGFzaFJlZnMpIHsKKyAgICBw
YXRjaCgkZGlmZkhhc2hSZWYpOwogfQogCiBpZiAoaXNTVk4oKSkgewpAQCAtMTYzLDEwICsxMzMs
MTMgQEAgc3ViIGNoZWNrc3VtKCQpCiAgICAgcmV0dXJuICRjaGVja3N1bTsKIH0KIAorIyBBcmdz
OgorIyAgICRkaWZmSGFzaFJlZjogYSBkaWZmIGhhc2ggcmVmZXJlbmNlIG9mIHRoZSB0eXBlIHJl
dHVybmVkIGJ5IHBhcnNlUGF0Y2goKS4KIHN1YiBwYXRjaCgkKQogewotICAgIG15ICgkcGF0Y2gp
ID0gQF87Ci0gICAgcmV0dXJuIGlmICEkcGF0Y2g7CisgICAgbXkgKCRkaWZmSGFzaFJlZikgPSBA
XzsKKworICAgIG15ICRwYXRjaCA9ICRkaWZmSGFzaFJlZi0+e3N2bkNvbnZlcnRlZFRleHR9OyAj
IFNWTi1mb3JtYXR0ZWQgZGlmZgogCiAgICAgdW5sZXNzICgkcGF0Y2ggPX4gbXxeSW5kZXg6IChb
XlxyXG5dKyl8KSB7CiAgICAgICAgIG15ICRzZXBhcmF0b3IgPSAnLScgeCA2NzsKQEAgLTE4MCw2
ICsxNTMsOCBAQCBzdWIgcGF0Y2goJCkKICAgICBteSAkYWRkaXRpb24gPSAwOwogICAgIG15ICRp
c0JpbmFyeSA9IDA7CiAKKyAgICAjIEZJWE1FOiBUaGlzIGluZm9ybWF0aW9uIHNob3VsZCBiZSBl
eHRyYWN0ZWQgZnJvbSB0aGUgZGlmZiBmaWxlIGFzCisgICAgIyAgICAgICAgcGFydCBvZiB0aGUg
cGFyc2luZyBzdGFnZSwgaS5lLiB0aGUgY2FsbCB0byBwYXJzZVBhdGNoKCkuCiAgICAgJGFkZGl0
aW9uID0gMSBpZiAoJHBhdGNoID1+IC9cbi0tLSAuK1wocmV2aXNpb24gMFwpXG4vIHx8ICRwYXRj
aCA9fiAvXG5AQCAtMCwwIC4qIEBALyk7CiAgICAgJGRlbGV0aW9uID0gMSBpZiAkcGF0Y2ggPX4g
L1xuQEAgLiogXCswLDAgQEAvOwogICAgICRpc0JpbmFyeSA9IDEgaWYgJHBhdGNoID1+IC9cbkNh
bm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlXC4vOwpkaWZmIC0tZ2l0
IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy90ZXN0LXdlYmtpdHBlcmwgYi9XZWJLaXRUb29scy9TY3Jp
cHRzL3Rlc3Qtd2Via2l0cGVybAppbmRleCAyZTMxNTkzLi40ZTYzYjhhIDEwMDc1NQotLS0gYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3Rlc3Qtd2Via2l0cGVybAorKysgYi9XZWJLaXRUb29scy9TY3Jp
cHRzL3Rlc3Qtd2Via2l0cGVybApAQCAtMzksMTAgKzM5LDIwIEBAIHVzZSBUZXN0OjpIYXJuZXNz
OwogdXNlIGxpYiAkRmluZEJpbjo6QmluOyAjIHNvIHRoaXMgc2NyaXB0IGNhbiBiZSBydW4gZnJv
bSBhbnkgZGlyZWN0b3J5LgogdXNlIFZDU1V0aWxzOwogCi0jIFVzZSBhbiBhYnNvbHV0ZSBwYXRo
IHNvIHRoaXMgc2NyaXB0IGNhbiBiZSBydW4gZnJvbSBhbnkgZGlyZWN0b3J5LgotbXkgJHNjcmlw
dHNEaXIgPSAkRmluZEJpbjo6QmluOworIyBDaGFuZ2UgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHNv
IHRoYXQgd2UgY2FuIHBhc3Mgc2hvcnRlciwgcmVsYXRpdmUKKyMgcGF0aHMgdG8gcnVudGVzdHMo
KSwgcmF0aGVyIHRoYW4gbG9uZ2VyLCBhYnNvbHV0ZSBwYXRocy4KKyMKKyMgV2UgY2hhbmdlIHRv
IHRoZSBzb3VyY2Ugcm9vdCBzbyB0aGUgcGF0aHMgY2FuIGJlIHJlbGF0aXZlIHRvIHRoZQorIyBz
b3VyY2Ugcm9vdC4gVGhlc2UgcGF0aHMgZGlzcGxheSBvbiB0aGUgc2NyZWVuLCBhbmQgdGhlaXIg
bWVhbmluZworIyB3aWxsIGJlIGNsZWFyZXIgdG8gdGhlIHVzZXIgaWYgcmVsYXRpdmUgdG8gdGhl
IHJvb3QsIHJhdGhlciB0aGFuIHRvCisjIHRoZSBTY3JpcHRzIGRpcmVjdG9yeSwgc2F5LgorIwor
IyBTb3VyY2Ugcm9vdCBpcyB0d28gbGV2ZWxzIHVwIGZyb20gdGhlIFNjcmlwdHMgZGlyZWN0b3J5
LgorbXkgJHNvdXJjZVJvb3REaXIgPSBGaWxlOjpTcGVjLT5jYXRmaWxlKCRGaW5kQmluOjpCaW4s
ICIuLi8uLiIpOworY2hkaXIoJHNvdXJjZVJvb3REaXIpOwogCi1teSAkcGF0dGVybiA9IEZpbGU6
OlNwZWMtPmNhdGZpbGUoJHNjcmlwdHNEaXIsICJ3ZWJraXRwZXJsLypfdW5pdHRlc3QvKi5wbCIp
OworIyBSZWxhdGl2ZSB0byByb290CitteSAkcGF0dGVybiA9ICJXZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHBlcmwvKl91bml0dGVzdC8qLnBsIjsKIAogbXkgQGZpbGVzID0gPCR7cGF0dGVybn0+
OyAjIGxpc3RzIGZpbGVzIGFscGhhYmV0aWNhbGx5CiAKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xz
L1NjcmlwdHMvd2Via2l0cGVybC9WQ1NVdGlsc191bml0dGVzdC9wcmVwYXJlUGFyc2VkUGF0Y2gu
cGwgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHBlcmwvVkNTVXRpbHNfdW5pdHRlc3QvcHJl
cGFyZVBhcnNlZFBhdGNoLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3
YWU4MDcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHBlcmwv
VkNTVXRpbHNfdW5pdHRlc3QvcHJlcGFyZVBhcnNlZFBhdGNoLnBsCkBAIC0wLDAgKzEsMTM2IEBA
CisjIS91c3IvYmluL3BlcmwgLXcKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEwIENocmlzIEplcmRv
bmVrIChjamVyZG9uZWtAd2Via2l0Lm9yZykKKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
IyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBB
TlkKKyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorIyBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworIyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisjIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTgorIyBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUworIyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworIyBVbml0IHRlc3RzIG9mIHByZXBhcmVQYXJzZWRQYXRjaCgpLgorCit1
c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOworCit1c2UgVGVzdDo6TW9yZTsKK3VzZSBWQ1NVdGls
czsKKworbXkgJGRpZmZIYXNoUmVmMSA9IHsgIyBub3QgYSBjb3B5LCBubyBzb3VyY2UgcmV2aXNp
b24KKyAgICBjb3BpZWRGcm9tUGF0aCA9PiB1bmRlZiwKKyAgICBpbmRleFBhdGggPT4gImluZGV4
UGF0aDEiLAorICAgIHNvdXJjZVJldmlzaW9uID0+IHVuZGVmLAorICAgIHN2bkNvbnZlcnRlZFRl
eHQgPT4gImRpZmYxIiwKK307CitteSAkZGlmZkhhc2hSZWYyID0geyAjIG5vdCBhIGNvcHksIGhh
cyBzb3VyY2UgcmV2aXNpb24KKyAgICBjb3BpZWRGcm9tUGF0aCA9PiB1bmRlZiwKKyAgICBpbmRl
eFBhdGggPT4gImluZGV4UGF0aDIiLAorICAgIHNvdXJjZVJldmlzaW9uID0+IDIwLAorICAgIHN2
bkNvbnZlcnRlZFRleHQgPT4gImRpZmYyIiwKK307CitteSAkZGlmZkhhc2hSZWYzID0geyAjIGEg
Y29weSAoY29waWVzIGFsd2F5cyBoYXZlIHNvdXJjZSByZXZpc2lvbikKKyAgICBjb3BpZWRGcm9t
UGF0aCA9PiAic291cmNlUGF0aDMiLAorICAgIGluZGV4UGF0aCA9PiAiaW5kZXhQYXRoMiIsICMg
RGVsaWJlcmF0ZWx5IGNob29zaW5nIHNhbWUgYXMgJGRpZmZIYXNoUmVmMgorICAgIHNvdXJjZVJl
dmlzaW9uID0+IDMsCisgICAgc3ZuQ29udmVydGVkVGV4dCA9PiAiZGlmZjMiLAorfTsKKworbXkg
QHRlc3RDYXNlcyA9ICgKK3sKKyAgICAjIE5ldyB0ZXN0CisgICAgdGVzdE5hbWUgPT4gInplcm8g
ZGlmZnM6IGVtcHR5IGFycmF5IiwKKyAgICBkaWZmSGFzaFJlZnNJbnB1dCA9PiBbXSwKKyAgICBl
eHBlY3RlZCA9PiB7CisgICAgICAgIGNvcHlEaWZmSGFzaFJlZnMgPT4gW10sCisgICAgICAgIG5v
bkNvcHlEaWZmSGFzaFJlZnMgPT4gW10sCisgICAgICAgIHNvdXJjZVJldmlzaW9uSGFzaCA9PiB7
fSwKKyAgICB9LAorfSwKK3sKKyAgICAjIE5ldyB0ZXN0CisgICAgdGVzdE5hbWUgPT4gIm9uZSBk
aWZmOiBub24tY29weSwgbm8gcmV2aXNpb24iLAorICAgIGRpZmZIYXNoUmVmc0lucHV0ID0+IFsk
ZGlmZkhhc2hSZWYxXSwKKyAgICBleHBlY3RlZCA9PiB7CisgICAgICAgIGNvcHlEaWZmSGFzaFJl
ZnMgPT4gW10sCisgICAgICAgIG5vbkNvcHlEaWZmSGFzaFJlZnMgPT4gWyRkaWZmSGFzaFJlZjFd
LAorICAgICAgICBzb3VyY2VSZXZpc2lvbkhhc2ggPT4ge30sCisgICAgfSwKK30sCit7CisgICAg
IyBOZXcgdGVzdAorICAgIHRlc3ROYW1lID0+ICJvbmUgZGlmZjogbm9uLWNvcHksIGhhcyByZXZp
c2lvbiIsCisgICAgZGlmZkhhc2hSZWZzSW5wdXQgPT4gWyRkaWZmSGFzaFJlZjJdLAorICAgIGV4
cGVjdGVkID0+IHsKKyAgICAgICAgY29weURpZmZIYXNoUmVmcyA9PiBbXSwKKyAgICAgICAgbm9u
Q29weURpZmZIYXNoUmVmcyA9PiBbJGRpZmZIYXNoUmVmMl0sCisgICAgICAgIHNvdXJjZVJldmlz
aW9uSGFzaCA9PiB7CisgICAgICAgICAgICAiaW5kZXhQYXRoMiIgPT4gMjAsCisgICAgICAgIH0K
KyAgICB9LAorfSwKK3sKKyAgICAjIE5ldyB0ZXN0CisgICAgdGVzdE5hbWUgPT4gIm9uZSBkaWZm
OiBjb3B5IChoYXMgcmV2aXNpb24pIiwKKyAgICBkaWZmSGFzaFJlZnNJbnB1dCA9PiBbJGRpZmZI
YXNoUmVmM10sCisgICAgZXhwZWN0ZWQgPT4geworICAgICAgICBjb3B5RGlmZkhhc2hSZWZzID0+
IFskZGlmZkhhc2hSZWYzXSwKKyAgICAgICAgbm9uQ29weURpZmZIYXNoUmVmcyA9PiBbXSwKKyAg
ICAgICAgc291cmNlUmV2aXNpb25IYXNoID0+IHsKKyAgICAgICAgICAgICJzb3VyY2VQYXRoMyIg
PT4gMywKKyAgICAgICAgfQorICAgIH0sCit9LAoreworICAgICMgTmV3IHRlc3QKKyAgICB0ZXN0
TmFtZSA9PiAidHdvIGRpZmZzOiB0d28gbm9uLWNvcGllcyIsCisgICAgZGlmZkhhc2hSZWZzSW5w
dXQgPT4gWyRkaWZmSGFzaFJlZjEsICRkaWZmSGFzaFJlZjJdLAorICAgIGV4cGVjdGVkID0+IHsK
KyAgICAgICAgY29weURpZmZIYXNoUmVmcyA9PiBbXSwKKyAgICAgICAgbm9uQ29weURpZmZIYXNo
UmVmcyA9PiBbJGRpZmZIYXNoUmVmMSwgJGRpZmZIYXNoUmVmMl0sCisgICAgICAgIHNvdXJjZVJl
dmlzaW9uSGFzaCA9PiB7CisgICAgICAgICAgICAiaW5kZXhQYXRoMiIgPT4gMjAsCisgICAgICAg
IH0KKyAgICB9LAorfSwKK3sKKyAgICAjIE5ldyB0ZXN0CisgICAgdGVzdE5hbWUgPT4gInR3byBk
aWZmczogbm9uLWNvcHkgYW5kIGNvcHkiLAorICAgIGRpZmZIYXNoUmVmc0lucHV0ID0+IFskZGlm
Zkhhc2hSZWYyLCAkZGlmZkhhc2hSZWYzXSwKKyAgICBleHBlY3RlZCA9PiB7CisgICAgICAgIGNv
cHlEaWZmSGFzaFJlZnMgPT4gWyRkaWZmSGFzaFJlZjNdLAorICAgICAgICBub25Db3B5RGlmZkhh
c2hSZWZzID0+IFskZGlmZkhhc2hSZWYyXSwKKyAgICAgICAgc291cmNlUmV2aXNpb25IYXNoID0+
IHsKKyAgICAgICAgICAgICJzb3VyY2VQYXRoMyIgPT4gMywKKyAgICAgICAgICAgICJpbmRleFBh
dGgyIiA9PiAyMCwKKyAgICAgICAgfQorICAgIH0sCit9LAorKTsKKworbXkgJHRlc3RDYXNlc0Nv
dW50ID0gQHRlc3RDYXNlczsKK3BsYW4odGVzdHMgPT4gJHRlc3RDYXNlc0NvdW50KTsKKworZm9y
ZWFjaCBteSAkdGVzdENhc2UgKEB0ZXN0Q2FzZXMpIHsKKyAgICBteSAkdGVzdE5hbWUgPSAkdGVz
dENhc2UtPnt0ZXN0TmFtZX07CisgICAgbXkgQGRpZmZIYXNoUmVmcyA9IEB7JHRlc3RDYXNlLT57
ZGlmZkhhc2hSZWZzSW5wdXR9fTsKKyAgICBteSAkZXhwZWN0ZWQgPSAkdGVzdENhc2UtPntleHBl
Y3RlZH07CisKKyAgICBteSAkZ290ID0gcHJlcGFyZVBhcnNlZFBhdGNoKDAsIEBkaWZmSGFzaFJl
ZnMpOworCisgICAgaXNfZGVlcGx5KCRnb3QsICRleHBlY3RlZCwgJHRlc3ROYW1lKTsKK30KKwo=
</data>
<flag name="review"
          id="29714"
          type_id="1"
          status="-"
          setter="eric"
    />
    <flag name="commit-queue"
          id="29715"
          type_id="3"
          status="-"
          setter="cjerdonek"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54016</attachid>
            <date>2010-04-21 19:40:43 -0700</date>
            <delta_ts>2010-04-23 12:50:33 -0700</delta_ts>
            <desc>Proposed patch 2</desc>
            <filename>_patch-34033-2.diff</filename>
            <type>text/plain</type>
            <size>19797</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBmNTFjZTZkLi5kMGUyNzc2IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzEgQEAKKzIwMTAtMDQt
MTUgIENocmlzIEplcmRvbmVrICA8Y2plcmRvbmVrQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0b3JlZCBzdm4tYXBwbHkg
YW5kIHN2bi11bmFwcGx5IHRvIHVzZSB0aGUgbmV3CisgICAgICAgIHBhcnNlUGF0Y2goKSBzdWJy
b3V0aW5lLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zNDAzMworCisgICAgICAgICogU2NyaXB0cy9WQ1NVdGlscy5wbToKKyAgICAgICAgICAtIENv
bnNvbGlkYXRlZCAlZGlmZkhhc2ggZG9jdW1lbnRhdGlvbi4KKyAgICAgICAgICAtIEFkZGVkIHBy
ZXBhcmVQYXJzZWRQYXRjaCgpLgorCisgICAgICAgICogU2NyaXB0cy9zdm4tYXBwbHk6CisgICAg
ICAgICAgLSBSZXBsYWNlZCBtYWluIHdoaWxlIGxvb3Agd2l0aCBjYWxscyB0byBwYXJzZVBhdGNo
KCkgYW5kCisgICAgICAgICAgICBwcmVwYXJlUGFyc2VkUGF0Y2goKS4KKworICAgICAgICAqIFNj
cmlwdHMvc3ZuLXVuYXBwbHk6CisgICAgICAgICAgLSBSZXBsYWNlZCBtYWluIHdoaWxlIGxvb3Ag
d2l0aCBjYWxscyB0byBwYXJzZVBhdGNoKCkgYW5kCisgICAgICAgICAgICBwcmVwYXJlUGFyc2Vk
UGF0Y2goKS4KKworICAgICAgICAqIFNjcmlwdHMvdGVzdC13ZWJraXRwZXJsOgorICAgICAgICAg
IC0gQ2hhbmdlZCB0byByZW5kZXIgcmVsYXRpdmUgdGVzdCBwYXRocyByYXRoZXIgdGhhbiBhYnNv
bHV0ZQorICAgICAgICAgICAgdGVzdCBwYXRocy4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cGVybC9WQ1NVdGlsc191bml0dGVzdC9wcmVwYXJlUGFyc2VkUGF0Y2gucGw6IEFkZGVkLgorICAg
ICAgICAgIC0gQWRkZWQgdW5pdCB0ZXN0cyBmb3IgcHJlcGFyZVBhcnNlZFBhdGNoKCkuCisKIDIw
MTAtMDQtMjEgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2Ny
aXB0cy9WQ1NVdGlscy5wbSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvVkNTVXRpbHMucG0KaW5kZXgg
MjVhMzE5Yi4uNmM2ZjkzOCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9WQ1NVdGls
cy5wbQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL1ZDU1V0aWxzLnBtCkBAIC02NSw2ICs2NSw3
IEBAIEJFR0lOIHsKICAgICAgICAgJm5vcm1hbGl6ZVBhdGgKICAgICAgICAgJnBhcnNlUGF0Y2gK
ICAgICAgICAgJnBhdGhSZWxhdGl2ZVRvU1ZOUmVwb3NpdG9yeVJvb3RGb3JQYXRoCisgICAgICAg
ICZwcmVwYXJlUGFyc2VkUGF0Y2gKICAgICAgICAgJnJ1blBhdGNoQ29tbWFuZAogICAgICAgICAm
c3ZuUmV2aXNpb25Gb3JEaXJlY3RvcnkKICAgICAgICAgJnN2blN0YXR1cwpAQCAtNDgyLDYgKzQ4
MywyNCBAQCBzdWIgcGFyc2VEaWZmSGVhZGVyKCQkKQogICAgIHJldHVybiAoXCVoZWFkZXIsICRs
YXN0UmVhZExpbmUpOwogfQogCisjIEEgJWRpZmZIYXNoIGlzIGEgaGFzaCByZXByZXNlbnRpbmcg
YSBzb3VyY2UgY29udHJvbCBkaWZmIG9mIGEgc2luZ2xlCisjIGZpbGUgb3BlcmF0aW9uIChlLmcu
IGEgZmlsZSBtb2RpZmljYXRpb24sIGNvcHksIG9yIGRlbGV0ZSkuCisjCisjIFRoZXNlIGhhc2hl
cyBhcHBlYXIsIGZvciBleGFtcGxlLCBpbiB0aGUgcGFyc2VEaWZmKCksIHBhcnNlUGF0Y2goKSwK
KyMgYW5kIHByZXBhcmVQYXJzZWRQYXRjaCgpIHN1YnJvdXRpbmVzIG9mIHRoaXMgcGFja2FnZS4K
KyMKKyMgVGhlIGNvcnJlc3BvbmRpbmcgdmFsdWVzIGFyZS0tCisjCisjICAgY29waWVkRnJvbVBh
dGg6IGlmIGEgZmlsZSBjb3B5LCB0aGUgcGF0aCBmcm9tIHdoaWNoIHRoZSBmaWxlIHdhcworIyAg
ICAgICAgICAgICAgICAgICBjb3BpZWQuIE90aGVyd2lzZSwgdW5kZWZpbmVkLgorIyAgIGluZGV4
UGF0aDogdGhlIHBhdGggb2YgdGhlIGZpbGUuIEZvciBTVk4tZm9ybWF0dGVkIGRpZmZzLCB0aGlz
IGlzCisjICAgICAgICAgICAgICB0aGUgc2FtZSBhcyB0aGUgcGF0aCBpbiB0aGUgIkluZGV4OiIg
bGluZS4KKyMgICBzb3VyY2VSZXZpc2lvbjogdGhlIHJldmlzaW9uIG51bWJlciBvZiB0aGUgc291
cmNlLiBUaGlzIGlzIHRoZSBzYW1lCisjICAgICAgICAgICAgICAgICAgIGFzIHRoZSByZXZpc2lv
biBudW1iZXIgdGhlIGZpbGUgd2FzIGNvcGllZCBmcm9tLCBpbgorIyAgICAgICAgICAgICAgICAg
ICB0aGUgY2FzZSBvZiBhIGZpbGUgY29weS4KKyMgICBzdm5Db252ZXJ0ZWRUZXh0OiB0aGUgZGlm
ZiBjb252ZXJ0ZWQgdG8gU1ZOIGZvcm1hdC4KKyMKKwogIyBQYXJzZSBvbmUgZGlmZiBmcm9tIGEg
cGF0Y2ggZmlsZSBjcmVhdGVkIGJ5IHN2bi1jcmVhdGUtcGF0Y2gsIGFuZAogIyBhZHZhbmNlIHRo
ZSBmaWxlIGhhbmRsZSBzbyB0aGUgbGFzdCBsaW5lIHJlYWQgaXMgdGhlIGZpcnN0IGxpbmUKICMg
b2YgdGhlIG5leHQgaGVhZGVyIGJsb2NrLgpAQCAtNDk0LDE0ICs1MTMsOCBAQCBzdWIgcGFyc2VE
aWZmSGVhZGVyKCQkKQogIyAgICRsaW5lOiB0aGUgbGluZSBsYXN0IHJlYWQgZnJvbSAkZmlsZUhh
bmRsZS4KICMKICMgUmV0dXJucyAoJGRpZmZIYXNoUmVmLCAkbGFzdFJlYWRMaW5lKToKLSMgICAk
ZGlmZkhhc2hSZWY6Ci0jICAgICBjb3BpZWRGcm9tUGF0aDogaWYgYSBmaWxlIGNvcHksIHRoZSBw
YXRoIGZyb20gd2hpY2ggdGhlIGZpbGUgd2FzCi0jICAgICAgICAgICAgICAgICAgICAgY29waWVk
LiBPdGhlcndpc2UsIHVuZGVmaW5lZC4KLSMgICAgIGluZGV4UGF0aDogdGhlIHBhdGggaW4gdGhl
ICJJbmRleDoiIGxpbmUuCi0jICAgICBzb3VyY2VSZXZpc2lvbjogdGhlIHJldmlzaW9uIG51bWJl
ciBvZiB0aGUgc291cmNlLiBUaGlzIGlzIHRoZSBzYW1lCi0jICAgICAgICAgICAgICAgICAgICAg
YXMgdGhlIHJldmlzaW9uIG51bWJlciB0aGUgZmlsZSB3YXMgY29waWVkIGZyb20sIGluCi0jICAg
ICAgICAgICAgICAgICAgICAgdGhlIGNhc2Ugb2YgYSBmaWxlIGNvcHkuCi0jICAgICBzdm5Db252
ZXJ0ZWRUZXh0OiB0aGUgZGlmZiBjb252ZXJ0ZWQgdG8gU1ZOIGZvcm1hdC4KKyMgICAkZGlmZkhh
c2hSZWY6IEEgcmVmZXJlbmNlIHRvIGEgJWRpZmZIYXNoLgorIyAgICAgICAgICAgICAgICAgU2Vl
IHRoZSAlZGlmZkhhc2ggZG9jdW1lbnRhdGlvbiBhYm92ZS4KICMgICAkbGFzdFJlYWRMaW5lOiB0
aGUgbGluZSBsYXN0IHJlYWQgZnJvbSAkZmlsZUhhbmRsZQogc3ViIHBhcnNlRGlmZigkJCkKIHsK
QEAgLTU1Myw4ICs1NjYsOCBAQCBzdWIgcGFyc2VEaWZmKCQkKQogIyAgICAgICAgICAgICAgICBy
ZWFkIGZyb20uCiAjCiAjIFJldHVybnM6Ci0jICAgQGRpZmZIYXNoUmVmczogYW4gYXJyYXkgb2Yg
ZGlmZiBoYXNoIHJlZmVyZW5jZXMuIFNlZSBwYXJzZURpZmYoKSBmb3IKLSMgICAgICAgICAgICAg
ICAgICBhIGRlc2NyaXB0aW9uIG9mIGVhY2ggJGRpZmZIYXNoUmVmLgorIyAgIEBkaWZmSGFzaFJl
ZnM6IGFuIGFycmF5IG9mIGRpZmYgaGFzaCByZWZlcmVuY2VzLgorIyAgICAgICAgICAgICAgICAg
IFNlZSB0aGUgJWRpZmZIYXNoIGRvY3VtZW50YXRpb24gYWJvdmUuCiBzdWIgcGFyc2VQYXRjaCgk
KQogewogICAgIG15ICgkZmlsZUhhbmRsZSkgPSBAXzsKQEAgLTU3NCw2ICs1ODcsNzggQEAgc3Vi
IHBhcnNlUGF0Y2goJCkKICAgICByZXR1cm4gQGRpZmZIYXNoUmVmczsKIH0KIAorIyBQcmVwYXJl
IHRoZSByZXN1bHRzIG9mIHBhcnNlUGF0Y2goKSBmb3IgdXNlIGluIHN2bi1hcHBseSBhbmQgc3Zu
LXVuYXBwbHkuCisjCisjIEFyZ3M6CisjICAgJHNob3VsZEZvcmNlOiBXaGV0aGVyIHRvIGNvbnRp
bnVlIHByb2Nlc3NpbmcgaWYgYW4gdW5leHBlY3RlZAorIyAgICAgICAgICAgICAgICAgc3RhdGUg
b2NjdXJzLgorIyAgIEBkaWZmSGFzaFJlZnM6IEFuIGFycmF5IG9mIHJlZmVyZW5jZXMgdG8gJWRp
ZmZIYXNoZXMuCisjICAgICAgICAgICAgICAgICAgU2VlIHRoZSAlZGlmZkhhc2ggZG9jdW1lbnRh
dGlvbiBhYm92ZS4KKyMKKyMgUmV0dXJucyAkcHJlcGFyZWRQYXRjaEhhc2hSZWY6CisjICAgY29w
eURpZmZIYXNoUmVmczogQSByZWZlcmVuY2UgdG8gYW4gYXJyYXkgb2YgdGhlICRkaWZmSGFzaFJl
ZnMgaW4KKyMgICAgICAgICAgICAgICAgICAgICBAZGlmZkhhc2hSZWZzIHRoYXQgcmVwcmVzZW50
IGZpbGUgY29waWVzLiBUaGUgb3JpZ2luYWwKKyMgICAgICAgICAgICAgICAgICAgICBvcmRlcmlu
ZyBpcyBwcmVzZXJ2ZWQuCisjICAgbm9uQ29weURpZmZIYXNoUmVmczogQSByZWZlcmVuY2UgdG8g
YW4gYXJyYXkgb2YgdGhlICRkaWZmSGFzaFJlZnMgaW4KKyMgICAgICAgICAgICAgICAgICAgICAg
ICBAZGlmZkhhc2hSZWZzIHRoYXQgZG8gbm90IHJlcHJlc2VudCBmaWxlIGNvcGllcy4KKyMgICAg
ICAgICAgICAgICAgICAgICAgICBUaGUgb3JpZ2luYWwgb3JkZXJpbmcgaXMgcHJlc2VydmVkLgor
IyAgIHNvdXJjZVJldmlzaW9uSGFzaDogQSByZWZlcmVuY2UgdG8gYSBoYXNoIG9mIHNvdXJjZSBw
YXRoIHRvIHNvdXJjZQorIyAgICAgICAgICAgICAgICAgICAgICAgcmV2aXNpb24gbnVtYmVyLgor
c3ViIHByZXBhcmVQYXJzZWRQYXRjaCgkQCkKK3sKKyAgICBteSAoJHNob3VsZEZvcmNlLCBAZGlm
Zkhhc2hSZWZzKSA9IEBfOworCisgICAgbXkgJWNvcGllZEZpbGVzOworCisgICAgIyBSZXR1cm4g
dmFsdWVzCisgICAgbXkgQGNvcHlEaWZmSGFzaFJlZnMgPSAoKTsKKyAgICBteSBAbm9uQ29weURp
ZmZIYXNoUmVmcyA9ICgpOworICAgIG15ICVzb3VyY2VSZXZpc2lvbkhhc2ggPSAoKTsKKyAgICBm
b3IgbXkgJGRpZmZIYXNoUmVmIChAZGlmZkhhc2hSZWZzKSB7CisgICAgICAgIG15ICRjb3BpZWRG
cm9tUGF0aCA9ICRkaWZmSGFzaFJlZi0+e2NvcGllZEZyb21QYXRofTsKKyAgICAgICAgbXkgJGlu
ZGV4UGF0aCA9ICRkaWZmSGFzaFJlZi0+e2luZGV4UGF0aH07CisgICAgICAgIG15ICRzb3VyY2VS
ZXZpc2lvbiA9ICRkaWZmSGFzaFJlZi0+e3NvdXJjZVJldmlzaW9ufTsKKyAgICAgICAgbXkgJHNv
dXJjZVBhdGg7CisKKyAgICAgICAgaWYgKGRlZmluZWQoJGNvcGllZEZyb21QYXRoKSkgeworICAg
ICAgICAgICAgIyBUaGVuIHRoZSBkaWZmIGlzIGEgY29weSBvcGVyYXRpb24uCisgICAgICAgICAg
ICAkc291cmNlUGF0aCA9ICRjb3BpZWRGcm9tUGF0aDsKKworICAgICAgICAgICAgIyBGSVhNRTog
Q29uc2lkZXIgcHJpbnRpbmcgYSB3YXJuaW5nIG9yIGV4aXRpbmcgaWYKKyAgICAgICAgICAgICMg
ICAgICAgIGV4aXN0cygkY29waWVkRmlsZXN7JGluZGV4UGF0aH0pIGlzIHRydWUgLS0gaS5lLiBp
ZgorICAgICAgICAgICAgIyAgICAgICAgJGluZGV4UGF0aCBhcHBlYXJzIHR3aWNlIGFzIGEgY29w
eSB0YXJnZXQuCisgICAgICAgICAgICAkY29waWVkRmlsZXN7JGluZGV4UGF0aH0gPSAkc291cmNl
UGF0aDsKKworICAgICAgICAgICAgcHVzaCBAY29weURpZmZIYXNoUmVmcywgJGRpZmZIYXNoUmVm
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgIyBUaGVuIHRoZSBkaWZmIGlzIG5vdCBh
IGNvcHkgb3BlcmF0aW9uLgorICAgICAgICAgICAgJHNvdXJjZVBhdGggPSAkaW5kZXhQYXRoOwor
CisgICAgICAgICAgICBwdXNoIEBub25Db3B5RGlmZkhhc2hSZWZzLCAkZGlmZkhhc2hSZWY7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoZGVmaW5lZCgkc291cmNlUmV2aXNpb24pKSB7CisgICAg
ICAgICAgICBpZiAoZXhpc3RzKCRzb3VyY2VSZXZpc2lvbkhhc2h7JHNvdXJjZVBhdGh9KSAmJgor
ICAgICAgICAgICAgICAgICgkc291cmNlUmV2aXNpb25IYXNoeyRzb3VyY2VQYXRofSAhPSAkc291
cmNlUmV2aXNpb24pKSB7CisgICAgICAgICAgICAgICAgaWYgKCEkc2hvdWxkRm9yY2UpIHsKKyAg
ICAgICAgICAgICAgICAgICAgZGllICJUd28gcmV2aXNpb25zIG9mIHRoZSBzYW1lIGZpbGUgcmVx
dWlyZWQgYXMgYSBzb3VyY2U6XG4iLgorICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAkc291
cmNlUGF0aDokc291cmNlUmV2aXNpb25IYXNoeyRzb3VyY2VQYXRofVxuIi4KKyAgICAgICAgICAg
ICAgICAgICAgICAgICIgICAgJHNvdXJjZVBhdGg6JHNvdXJjZVJldmlzaW9uIjsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAkc291cmNlUmV2aXNpb25IYXNo
eyRzb3VyY2VQYXRofSA9ICRzb3VyY2VSZXZpc2lvbjsKKyAgICAgICAgfQorICAgIH0KKworICAg
IG15ICVwcmVwYXJlZFBhdGNoSGFzaDsKKworICAgICRwcmVwYXJlZFBhdGNoSGFzaHtjb3B5RGlm
Zkhhc2hSZWZzfSA9IFxAY29weURpZmZIYXNoUmVmczsKKyAgICAkcHJlcGFyZWRQYXRjaEhhc2h7
bm9uQ29weURpZmZIYXNoUmVmc30gPSBcQG5vbkNvcHlEaWZmSGFzaFJlZnM7CisgICAgJHByZXBh
cmVkUGF0Y2hIYXNoe3NvdXJjZVJldmlzaW9uSGFzaH0gPSBcJXNvdXJjZVJldmlzaW9uSGFzaDsK
KworICAgIHJldHVybiBcJXByZXBhcmVkUGF0Y2hIYXNoOworfQorCiAjIElmIHBvc3NpYmxlLCBy
ZXR1cm5zIGEgQ2hhbmdlTG9nIHBhdGNoIGVxdWl2YWxlbnQgdG8gdGhlIGdpdmVuIG9uZSwKICMg
YnV0IHdpdGggdGhlIG5ld2VzdCBDaGFuZ2VMb2cgZW50cnkgaW5zZXJ0ZWQgYXQgdGhlIHRvcCBv
ZiB0aGUKICMgZmlsZSAtLSBpLmUuIG5vIGxlYWRpbmcgY29udGV4dCBhbmQgYWxsIGxpbmVzIHN0
YXJ0aW5nIHdpdGggIisiLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9zdm4tYXBw
bHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3N2bi1hcHBseQppbmRleCA2MWQxOTNkLi4xM2IyMTVi
IDEwMDc1NQotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3N2bi1hcHBseQorKysgYi9XZWJLaXRU
b29scy9TY3JpcHRzL3N2bi1hcHBseQpAQCAtMTIzLDcyICsxMjMsNDMgQEAgbXkgJHJlcG9zaXRv
cnlSb290UGF0aCA9IGRldGVybWluZVZDU1Jvb3QoKTsKIAogbXkgJWNoZWNrZWREaXJlY3Rvcmll
czsKIG15ICVjb3BpZWRGaWxlczsKLW15IEBwYXRjaGVzOwotbXkgJXZlcnNpb25zOwotCi1teSAk
Y29waWVkRnJvbVBhdGg7Ci1teSAkZmlsdGVyOwotbXkgJGluZGV4UGF0aDsKLW15ICRwYXRjaDsK
LXdoaWxlICg8PikgewotICAgIHMvKFtcblxyXSspJC8vbWc7Ci0gICAgbXkgJGVvbCA9ICQxOwot
ICAgIGlmICghZGVmaW5lZCgkaW5kZXhQYXRoKSAmJiBtI15kaWZmIC0tZ2l0IFx3LyMpIHsKLSAg
ICAgICAgJGZpbHRlciA9IFwmZ2l0ZGlmZjJzdm5kaWZmOwotICAgIH0KLSAgICAkXyA9ICYkZmls
dGVyKCRfKSBpZiAkZmlsdGVyOwotICAgIGlmICgvXkluZGV4OiAoLispLykgewotICAgICAgICAk
aW5kZXhQYXRoID0gJDE7Ci0gICAgICAgIGlmICgkcGF0Y2gpIHsKLSAgICAgICAgICAgIGlmICgh
JGNvcGllZEZyb21QYXRoKSB7Ci0gICAgICAgICAgICAgICAgcHVzaCBAcGF0Y2hlcywgJHBhdGNo
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgJGNvcGllZEZyb21QYXRoID0gIiI7Ci0gICAg
ICAgICAgICAkcGF0Y2ggPSAiIjsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoJGluZGV4UGF0
aCkgewotICAgICAgICAjIEZpeCBwYXRocyBvbiBkaWZmLCAtLS0sIGFuZCArKysgbGluZXMgdG8g
bWF0Y2ggcHJlY2VkaW5nIEluZGV4OiBsaW5lLgotICAgICAgICBzL1xTKyQvJGluZGV4UGF0aC8g
aWYgL15kaWZmLzsKLSAgICAgICAgcy9eLS0tIFxTKy8tLS0gJGluZGV4UGF0aC87Ci0gICAgICAg
IGlmICgvXi0tLSAuK1woZnJvbSAoXFMrKTooXGQrKVwpJC8pIHsKLSAgICAgICAgICAgICRjb3Bp
ZWRGcm9tUGF0aCA9ICQxOwotICAgICAgICAgICAgJGNvcGllZEZpbGVzeyRpbmRleFBhdGh9ID0g
JGNvcGllZEZyb21QYXRoOwotICAgICAgICAgICAgJHZlcnNpb25zeyRjb3BpZWRGcm9tUGF0aH0g
PSAkMiBpZiAoJDIgIT0gMCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzaWYgKC9eLS0tIC4rXChy
ZXZpc2lvbiAoXGQrKVwpJC8pIHsKLSAgICAgICAgICAgICR2ZXJzaW9uc3skaW5kZXhQYXRofSA9
ICQxIGlmICgkMSAhPSAwKTsKLSAgICAgICAgfQotICAgICAgICBpZiAocy9eXCtcK1wrIFxTKy8r
KysgJGluZGV4UGF0aC8pIHsKLSAgICAgICAgICAgICRpbmRleFBhdGggPSAiIjsKLSAgICAgICAg
fQotICAgIH0KLSAgICAkcGF0Y2ggLj0gJF87Ci0gICAgJHBhdGNoIC49ICRlb2w7Ci19CiAKLWlm
ICgkcGF0Y2ggJiYgISRjb3BpZWRGcm9tUGF0aCkgewotICAgIHB1c2ggQHBhdGNoZXMsICRwYXRj
aDsKLX0KKyMgTmVlZCB0byB1c2UgYSB0eXBlZ2xvYiB0byBwYXNzIHRoZSBmaWxlIGhhbmRsZSBh
cyBhIHBhcmFtZXRlciwKKyMgb3RoZXJ3aXNlIGdldCBhIGJhcmV3b3JkIGVycm9yLgorbXkgQGRp
ZmZIYXNoUmVmcyA9IHBhcnNlUGF0Y2goKkFSR1YpOworCitwcmludCAiUGFyc2VkICIgLiBAZGlm
Zkhhc2hSZWZzIC4gIiBkaWZmcyBmcm9tIHBhdGNoIGZpbGUocykuXG4iOworCitteSAkcHJlcGFy
ZWRQYXRjaEhhc2ggPSBwcmVwYXJlUGFyc2VkUGF0Y2goJGZvcmNlLCBAZGlmZkhhc2hSZWZzKTsK
KworbXkgQGNvcHlEaWZmSGFzaFJlZnMgPSBAeyRwcmVwYXJlZFBhdGNoSGFzaC0+e2NvcHlEaWZm
SGFzaFJlZnN9fTsKK215IEBub25Db3B5RGlmZkhhc2hSZWZzID0gQHskcHJlcGFyZWRQYXRjaEhh
c2gtPntub25Db3B5RGlmZkhhc2hSZWZzfX07CitteSAlc291cmNlUmV2aXNpb25zID0gJXskcHJl
cGFyZWRQYXRjaEhhc2gtPntzb3VyY2VSZXZpc2lvbkhhc2h9fTsKIAogaWYgKCRtZXJnZSkgewog
ICAgIGRpZSAiLS1tZXJnZSBpcyBjdXJyZW50bHkgb25seSBzdXBwb3J0ZWQgZm9yIFNWTiIgdW5s
ZXNzIGlzU1ZOKCk7CiAgICAgIyBIb3cgZG8gd2UgaGFuZGxlIEdpdCBwYXRjaGVzIGFwcGxpZWQg
dG8gYW4gU1ZOIGNoZWNrb3V0IGhlcmU/Ci0gICAgZm9yIG15ICRmaWxlIChzb3J0IGtleXMgJXZl
cnNpb25zKSB7Ci0gICAgICAgIG15ICR2ZXJzaW9uID0gJHZlcnNpb25zeyRmaWxlfTsKKyAgICBm
b3IgbXkgJGZpbGUgKHNvcnQga2V5cyAlc291cmNlUmV2aXNpb25zKSB7CisgICAgICAgIG15ICR2
ZXJzaW9uID0gJHNvdXJjZVJldmlzaW9uc3skZmlsZX07CiAgICAgICAgIHByaW50ICJHZXR0aW5n
IHZlcnNpb24gJHZlcnNpb24gb2YgJGZpbGVcbiI7CiAgICAgICAgIHN5c3RlbSgic3ZuIiwgInVw
ZGF0ZSIsICItciIsICR2ZXJzaW9uLCAkZmlsZSkgPT0gMCBvciBkaWUgIkZhaWxlZCB0byBydW4g
c3ZuIHVwZGF0ZSAtciAkdmVyc2lvbiAkZmlsZS4iOwogICAgIH0KIH0KIAotIyBIYW5kbGUgY29w
aWVkIGFuZCBtb3ZlZCBmaWxlcyBmaXJzdCBzaW5jZSBtb3ZlZCBmaWxlcyBtYXkgaGF2ZSB0aGVp
ciBzb3VyY2UgZGVsZXRlZCBiZWZvcmUgdGhlIG1vdmUuCi1mb3IgbXkgJGZpbGUgKGtleXMgJWNv
cGllZEZpbGVzKSB7Ci0gICAgYWRkRGlyZWN0b3JpZXNJZk5lZWRlZChkaXJuYW1lKCRmaWxlKSk7
Ci0gICAgc2NtQ29weSgkY29waWVkRmlsZXN7JGZpbGV9LCAkZmlsZSk7CisjIEhhbmRsZSBjb3Bp
ZWQgYW5kIG1vdmVkIGZpbGVzIGZpcnN0IHNpbmNlIG1vdmVkIGZpbGVzIG1heSBoYXZlIHRoZWly
CisjIHNvdXJjZSBkZWxldGVkIGJlZm9yZSB0aGUgbW92ZS4KK2ZvciBteSAkY29weURpZmZIYXNo
UmVmIChAY29weURpZmZIYXNoUmVmcykgeworICAgIG15ICRpbmRleFBhdGggPSAkY29weURpZmZI
YXNoUmVmLT57aW5kZXhQYXRofTsKKyAgICBteSAkY29waWVkRnJvbVBhdGggPSAkY29weURpZmZI
YXNoUmVmLT57Y29waWVkRnJvbVBhdGh9OworCisgICAgYWRkRGlyZWN0b3JpZXNJZk5lZWRlZChk
aXJuYW1lKCRpbmRleFBhdGgpKTsKKyAgICBzY21Db3B5KCRjb3BpZWRGcm9tUGF0aCwgJGluZGV4
UGF0aCk7CisKKyAgICAkY29waWVkRmlsZXN7JGluZGV4UGF0aH0gPSAkY29waWVkRnJvbVBhdGg7
CiB9CiAKLWZvciAkcGF0Y2ggKEBwYXRjaGVzKSB7Ci0gICAgcGF0Y2goJHBhdGNoKTsKK2ZvciBt
eSAkZGlmZkhhc2hSZWYgKEBub25Db3B5RGlmZkhhc2hSZWZzKSB7CisgICAgcGF0Y2goJGRpZmZI
YXNoUmVmKTsKIH0KIAogcmVtb3ZlRGlyZWN0b3JpZXNJZk5lZWRlZCgpOwpAQCAtMzI2LDEwICsy
OTcsMTMgQEAgc3ViIGlzRGlyZWN0b3J5RW1wdHlGb3JSZW1vdmFsKCQpCiAgICAgcmV0dXJuICRk
aXJlY3RvcnlJc0VtcHR5OwogfQogCisjIEFyZ3M6CisjICAgJGRpZmZIYXNoUmVmOiBhIGRpZmYg
aGFzaCByZWZlcmVuY2Ugb2YgdGhlIHR5cGUgcmV0dXJuZWQgYnkgcGFyc2VQYXRjaCgpLgogc3Vi
IHBhdGNoKCQpCiB7Ci0gICAgbXkgKCRwYXRjaCkgPSBAXzsKLSAgICByZXR1cm4gaWYgISRwYXRj
aDsKKyAgICBteSAoJGRpZmZIYXNoUmVmKSA9IEBfOworCisgICAgbXkgJHBhdGNoID0gJGRpZmZI
YXNoUmVmLT57c3ZuQ29udmVydGVkVGV4dH07CiAKICAgICB1bmxlc3MgKCRwYXRjaCA9fiBtfF5J
bmRleDogKFteXHJcbl0rKXwpIHsKICAgICAgICAgbXkgJHNlcGFyYXRvciA9ICctJyB4IDY3OwpA
QCAtMzQ0LDYgKzMxOCw4IEBAIHN1YiBwYXRjaCgkKQogICAgIG15ICRpc0JpbmFyeSA9IDA7CiAg
ICAgbXkgJGlzR2l0QmluYXJ5ID0gMDsKIAorICAgICMgRklYTUU6IFRoaXMgaW5mb3JtYXRpb24g
c2hvdWxkIGJlIGV4dHJhY3RlZCBmcm9tIHRoZSBkaWZmIGZpbGUgYXMKKyAgICAjICAgICAgICBw
YXJ0IG9mIHRoZSBwYXJzaW5nIHN0YWdlLCBpLmUuIHRoZSBjYWxsIHRvIHBhcnNlUGF0Y2goKS4K
ICAgICAkYWRkaXRpb24gPSAxIGlmICgkcGF0Y2ggPX4gL1xuLS0tIC4rXChyZXZpc2lvbiAwXClc
cj9cbi8gfHwgJHBhdGNoID1+IC9cbkBAIC0wLDAgLiogQEAvKSAmJiAhZXhpc3RzKCRjb3BpZWRG
aWxlc3skZnVsbFBhdGh9KTsKICAgICAkZGVsZXRpb24gPSAxIGlmICRwYXRjaCA9fiAvXG5AQCAu
KiBcKzAsMCBAQC87CiAgICAgJGlzQmluYXJ5ID0gMSBpZiAkcGF0Y2ggPX4gL1xuQ2Fubm90IGRp
c3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGVcLi87CmRpZmYgLS1naXQgYS9XZWJL
aXRUb29scy9TY3JpcHRzL3N2bi11bmFwcGx5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9zdm4tdW5h
cHBseQppbmRleCBlYjIwY2EwLi5kNWI5NWU4IDEwMDc1NQotLS0gYS9XZWJLaXRUb29scy9TY3Jp
cHRzL3N2bi11bmFwcGx5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvc3ZuLXVuYXBwbHkKQEAg
LTk3LDU0ICs5NywyNCBAQCBteSAkcmVwb3NpdG9yeVJvb3RQYXRoID0gZGV0ZXJtaW5lVkNTUm9v
dCgpOwogbXkgQGNvcGllZEZpbGVzOwogbXkgJWRpcmVjdG9yaWVzVG9DaGVjazsKIAotbXkgJGNv
cGllZEZyb21QYXRoOwotbXkgJGZpbHRlcjsKLW15ICRpbmRleFBhdGg7Ci1teSAkcGF0Y2g7Ci13
aGlsZSAoPD4pIHsKLSAgICBzLyhbXG5ccl0rKSQvL21nOwotICAgIG15ICRlb2wgPSAkMTsKLSAg
ICBpZiAoIWRlZmluZWQoJGluZGV4UGF0aCkgJiYgbSNeZGlmZiAtLWdpdCBcdy8jKSB7Ci0gICAg
ICAgICRmaWx0ZXIgPSBcJmdpdGRpZmYyc3ZuZGlmZjsKLSAgICB9Ci0gICAgJF8gPSAmJGZpbHRl
cigkXykgaWYgJGZpbHRlcjsKLSAgICBpZiAoL15JbmRleDogKC4rKS8pIHsKLSAgICAgICAgJGlu
ZGV4UGF0aCA9ICQxOwotICAgICAgICBpZiAoJHBhdGNoKSB7Ci0gICAgICAgICAgICBpZiAoJGNv
cGllZEZyb21QYXRoKSB7Ci0gICAgICAgICAgICAgICAgcHVzaCBAY29waWVkRmlsZXMsICRwYXRj
aDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcGF0Y2goJHBhdGNoKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICRjb3BpZWRGcm9tUGF0aCA9ICIiOwotICAgICAg
ICAgICAgJHBhdGNoID0gIiI7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCRpbmRleFBhdGgp
IHsKLSAgICAgICAgIyBGaXggcGF0aHMgb24gZGlmZiwgLS0tLCBhbmQgKysrIGxpbmVzIHRvIG1h
dGNoIHByZWNlZGluZyBJbmRleDogbGluZS4KLSAgICAgICAgcy9eLS0tIFxTKy8tLS0gJGluZGV4
UGF0aC87Ci0gICAgICAgIGlmICgvXi0tLSAuK1woZnJvbSAoXFMrKTpcZCtcKSQvKSB7Ci0gICAg
ICAgICAgICAkY29waWVkRnJvbVBhdGggPSAkMTsKLSAgICAgICAgfQotICAgICAgICBpZiAocy9e
XCtcK1wrIFxTKy8rKysgJGluZGV4UGF0aC8pIHsKLSAgICAgICAgICAgICRpbmRleFBhdGggPSAi
IjsKLSAgICAgICAgfQotICAgIH0KLSAgICAkcGF0Y2ggLj0gJF87Ci0gICAgJHBhdGNoIC49ICRl
b2w7Ci19CisjIE5lZWQgdG8gdXNlIGEgdHlwZWdsb2IgdG8gcGFzcyB0aGUgZmlsZSBoYW5kbGUg
YXMgYSBwYXJhbWV0ZXIsCisjIG90aGVyd2lzZSBnZXQgYSBiYXJld29yZCBlcnJvci4KK215IEBk
aWZmSGFzaFJlZnMgPSBwYXJzZVBhdGNoKCpBUkdWKTsKIAotaWYgKCRwYXRjaCkgewotICAgIGlm
ICgkY29waWVkRnJvbVBhdGgpIHsKLSAgICAgICAgcHVzaCBAY29waWVkRmlsZXMsICRwYXRjaDsK
LSAgICB9IGVsc2UgewotICAgICAgICBwYXRjaCgkcGF0Y2gpOwotICAgIH0KK3ByaW50ICJQYXJz
ZWQgIiAuIEBkaWZmSGFzaFJlZnMgLiAiIGRpZmZzIGZyb20gcGF0Y2ggZmlsZShzKS5cbiI7CisK
K215ICRwcmVwYXJlZFBhdGNoSGFzaCA9IHByZXBhcmVQYXJzZWRQYXRjaCgkZm9yY2UsIEBkaWZm
SGFzaFJlZnMpOworCitteSBAY29weURpZmZIYXNoUmVmcyA9IEB7JHByZXBhcmVkUGF0Y2hIYXNo
LT57Y29weURpZmZIYXNoUmVmc319OworbXkgQG5vbkNvcHlEaWZmSGFzaFJlZnMgPSBAeyRwcmVw
YXJlZFBhdGNoSGFzaC0+e25vbkNvcHlEaWZmSGFzaFJlZnN9fTsKKworZm9yIG15ICRkaWZmSGFz
aFJlZiAoQG5vbkNvcHlEaWZmSGFzaFJlZnMpIHsKKyAgICBwYXRjaCgkZGlmZkhhc2hSZWYpOwog
fQogCiAjIEhhbmRsZSBjb3BpZWQgYW5kIG1vdmVkIGZpbGVzIGxhc3Qgc2luY2UgdGhleSBtYXkg
aGF2ZSBoYWQgcG9zdC1jb3B5IGNoYW5nZXMgdGhhdCBoYXZlIG5vdyBiZWVuIHVuYXBwbGllZAot
Zm9yICRwYXRjaCAoQGNvcGllZEZpbGVzKSB7Ci0gICAgcGF0Y2goJHBhdGNoKTsKK2ZvciBteSAk
ZGlmZkhhc2hSZWYgKEBjb3B5RGlmZkhhc2hSZWZzKSB7CisgICAgcGF0Y2goJGRpZmZIYXNoUmVm
KTsKIH0KIAogaWYgKGlzU1ZOKCkpIHsKQEAgLTE2MywxMCArMTMzLDEzIEBAIHN1YiBjaGVja3N1
bSgkKQogICAgIHJldHVybiAkY2hlY2tzdW07CiB9CiAKKyMgQXJnczoKKyMgICAkZGlmZkhhc2hS
ZWY6IGEgZGlmZiBoYXNoIHJlZmVyZW5jZSBvZiB0aGUgdHlwZSByZXR1cm5lZCBieSBwYXJzZVBh
dGNoKCkuCiBzdWIgcGF0Y2goJCkKIHsKLSAgICBteSAoJHBhdGNoKSA9IEBfOwotICAgIHJldHVy
biBpZiAhJHBhdGNoOworICAgIG15ICgkZGlmZkhhc2hSZWYpID0gQF87CisKKyAgICBteSAkcGF0
Y2ggPSAkZGlmZkhhc2hSZWYtPntzdm5Db252ZXJ0ZWRUZXh0fTsKIAogICAgIHVubGVzcyAoJHBh
dGNoID1+IG18XkluZGV4OiAoW15cclxuXSspfCkgewogICAgICAgICBteSAkc2VwYXJhdG9yID0g
Jy0nIHggNjc7CkBAIC0xODAsNiArMTUzLDggQEAgc3ViIHBhdGNoKCQpCiAgICAgbXkgJGFkZGl0
aW9uID0gMDsKICAgICBteSAkaXNCaW5hcnkgPSAwOwogCisgICAgIyBGSVhNRTogVGhpcyBpbmZv
cm1hdGlvbiBzaG91bGQgYmUgZXh0cmFjdGVkIGZyb20gdGhlIGRpZmYgZmlsZSBhcworICAgICMg
ICAgICAgIHBhcnQgb2YgdGhlIHBhcnNpbmcgc3RhZ2UsIGkuZS4gdGhlIGNhbGwgdG8gcGFyc2VQ
YXRjaCgpLgogICAgICRhZGRpdGlvbiA9IDEgaWYgKCRwYXRjaCA9fiAvXG4tLS0gLitcKHJldmlz
aW9uIDBcKVxuLyB8fCAkcGF0Y2ggPX4gL1xuQEAgLTAsMCAuKiBAQC8pOwogICAgICRkZWxldGlv
biA9IDEgaWYgJHBhdGNoID1+IC9cbkBAIC4qIFwrMCwwIEBALzsKICAgICAkaXNCaW5hcnkgPSAx
IGlmICRwYXRjaCA9fiAvXG5DYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkg
dHlwZVwuLzsKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvdGVzdC13ZWJraXRwZXJs
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy90ZXN0LXdlYmtpdHBlcmwKaW5kZXggMmUzMTU5My4uNGU2
M2I4YSAxMDA3NTUKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy90ZXN0LXdlYmtpdHBlcmwKKysr
IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy90ZXN0LXdlYmtpdHBlcmwKQEAgLTM5LDEwICszOSwyMCBA
QCB1c2UgVGVzdDo6SGFybmVzczsKIHVzZSBsaWIgJEZpbmRCaW46OkJpbjsgIyBzbyB0aGlzIHNj
cmlwdCBjYW4gYmUgcnVuIGZyb20gYW55IGRpcmVjdG9yeS4KIHVzZSBWQ1NVdGlsczsKIAotIyBV
c2UgYW4gYWJzb2x1dGUgcGF0aCBzbyB0aGlzIHNjcmlwdCBjYW4gYmUgcnVuIGZyb20gYW55IGRp
cmVjdG9yeS4KLW15ICRzY3JpcHRzRGlyID0gJEZpbmRCaW46OkJpbjsKKyMgQ2hhbmdlIHRoZSB3
b3JraW5nIGRpcmVjdG9yeSBzbyB0aGF0IHdlIGNhbiBwYXNzIHNob3J0ZXIsIHJlbGF0aXZlCisj
IHBhdGhzIHRvIHJ1bnRlc3RzKCksIHJhdGhlciB0aGFuIGxvbmdlciwgYWJzb2x1dGUgcGF0aHMu
CisjCisjIFdlIGNoYW5nZSB0byB0aGUgc291cmNlIHJvb3Qgc28gdGhlIHBhdGhzIGNhbiBiZSBy
ZWxhdGl2ZSB0byB0aGUKKyMgc291cmNlIHJvb3QuIFRoZXNlIHBhdGhzIGRpc3BsYXkgb24gdGhl
IHNjcmVlbiwgYW5kIHRoZWlyIG1lYW5pbmcKKyMgd2lsbCBiZSBjbGVhcmVyIHRvIHRoZSB1c2Vy
IGlmIHJlbGF0aXZlIHRvIHRoZSByb290LCByYXRoZXIgdGhhbiB0bworIyB0aGUgU2NyaXB0cyBk
aXJlY3RvcnksIHNheS4KKyMKKyMgU291cmNlIHJvb3QgaXMgdHdvIGxldmVscyB1cCBmcm9tIHRo
ZSBTY3JpcHRzIGRpcmVjdG9yeS4KK215ICRzb3VyY2VSb290RGlyID0gRmlsZTo6U3BlYy0+Y2F0
ZmlsZSgkRmluZEJpbjo6QmluLCAiLi4vLi4iKTsKK2NoZGlyKCRzb3VyY2VSb290RGlyKTsKIAot
bXkgJHBhdHRlcm4gPSBGaWxlOjpTcGVjLT5jYXRmaWxlKCRzY3JpcHRzRGlyLCAid2Via2l0cGVy
bC8qX3VuaXR0ZXN0LyoucGwiKTsKKyMgUmVsYXRpdmUgdG8gcm9vdAorbXkgJHBhdHRlcm4gPSAi
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsLypfdW5pdHRlc3QvKi5wbCI7CiAKIG15IEBm
aWxlcyA9IDwke3BhdHRlcm59PjsgIyBsaXN0cyBmaWxlcyBhbHBoYWJldGljYWxseQogCmRpZmYg
LS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHBlcmwvVkNTVXRpbHNfdW5pdHRlc3Qv
cHJlcGFyZVBhcnNlZFBhdGNoLnBsIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL1ZD
U1V0aWxzX3VuaXR0ZXN0L3ByZXBhcmVQYXJzZWRQYXRjaC5wbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5hN2FlODA3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRwZXJsL1ZDU1V0aWxzX3VuaXR0ZXN0L3ByZXBhcmVQYXJzZWRQYXRjaC5w
bApAQCAtMCwwICsxLDEzNiBAQAorIyEvdXNyL2Jpbi9wZXJsIC13CisjCisjIENvcHlyaWdodCAo
QykgMjAxMCBDaHJpcyBKZXJkb25layAoY2plcmRvbmVrQHdlYmtpdC5vcmcpCisjCisjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisj
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyMgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworIyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyMgQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyMgVW5pdCB0ZXN0cyBvZiBwcmVwYXJl
UGFyc2VkUGF0Y2goKS4KKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKKwordXNlIFRlc3Q6
Ok1vcmU7Cit1c2UgVkNTVXRpbHM7CisKK215ICRkaWZmSGFzaFJlZjEgPSB7ICMgbm90IGEgY29w
eSwgbm8gc291cmNlIHJldmlzaW9uCisgICAgY29waWVkRnJvbVBhdGggPT4gdW5kZWYsCisgICAg
aW5kZXhQYXRoID0+ICJpbmRleFBhdGgxIiwKKyAgICBzb3VyY2VSZXZpc2lvbiA9PiB1bmRlZiwK
KyAgICBzdm5Db252ZXJ0ZWRUZXh0ID0+ICJkaWZmMSIsCit9OworbXkgJGRpZmZIYXNoUmVmMiA9
IHsgIyBub3QgYSBjb3B5LCBoYXMgc291cmNlIHJldmlzaW9uCisgICAgY29waWVkRnJvbVBhdGgg
PT4gdW5kZWYsCisgICAgaW5kZXhQYXRoID0+ICJpbmRleFBhdGgyIiwKKyAgICBzb3VyY2VSZXZp
c2lvbiA9PiAyMCwKKyAgICBzdm5Db252ZXJ0ZWRUZXh0ID0+ICJkaWZmMiIsCit9OworbXkgJGRp
ZmZIYXNoUmVmMyA9IHsgIyBhIGNvcHkgKGNvcGllcyBhbHdheXMgaGF2ZSBzb3VyY2UgcmV2aXNp
b24pCisgICAgY29waWVkRnJvbVBhdGggPT4gInNvdXJjZVBhdGgzIiwKKyAgICBpbmRleFBhdGgg
PT4gImluZGV4UGF0aDIiLCAjIERlbGliZXJhdGVseSBjaG9vc2luZyBzYW1lIGFzICRkaWZmSGFz
aFJlZjIKKyAgICBzb3VyY2VSZXZpc2lvbiA9PiAzLAorICAgIHN2bkNvbnZlcnRlZFRleHQgPT4g
ImRpZmYzIiwKK307CisKK215IEB0ZXN0Q2FzZXMgPSAoCit7CisgICAgIyBOZXcgdGVzdAorICAg
IHRlc3ROYW1lID0+ICJ6ZXJvIGRpZmZzOiBlbXB0eSBhcnJheSIsCisgICAgZGlmZkhhc2hSZWZz
SW5wdXQgPT4gW10sCisgICAgZXhwZWN0ZWQgPT4geworICAgICAgICBjb3B5RGlmZkhhc2hSZWZz
ID0+IFtdLAorICAgICAgICBub25Db3B5RGlmZkhhc2hSZWZzID0+IFtdLAorICAgICAgICBzb3Vy
Y2VSZXZpc2lvbkhhc2ggPT4ge30sCisgICAgfSwKK30sCit7CisgICAgIyBOZXcgdGVzdAorICAg
IHRlc3ROYW1lID0+ICJvbmUgZGlmZjogbm9uLWNvcHksIG5vIHJldmlzaW9uIiwKKyAgICBkaWZm
SGFzaFJlZnNJbnB1dCA9PiBbJGRpZmZIYXNoUmVmMV0sCisgICAgZXhwZWN0ZWQgPT4geworICAg
ICAgICBjb3B5RGlmZkhhc2hSZWZzID0+IFtdLAorICAgICAgICBub25Db3B5RGlmZkhhc2hSZWZz
ID0+IFskZGlmZkhhc2hSZWYxXSwKKyAgICAgICAgc291cmNlUmV2aXNpb25IYXNoID0+IHt9LAor
ICAgIH0sCit9LAoreworICAgICMgTmV3IHRlc3QKKyAgICB0ZXN0TmFtZSA9PiAib25lIGRpZmY6
IG5vbi1jb3B5LCBoYXMgcmV2aXNpb24iLAorICAgIGRpZmZIYXNoUmVmc0lucHV0ID0+IFskZGlm
Zkhhc2hSZWYyXSwKKyAgICBleHBlY3RlZCA9PiB7CisgICAgICAgIGNvcHlEaWZmSGFzaFJlZnMg
PT4gW10sCisgICAgICAgIG5vbkNvcHlEaWZmSGFzaFJlZnMgPT4gWyRkaWZmSGFzaFJlZjJdLAor
ICAgICAgICBzb3VyY2VSZXZpc2lvbkhhc2ggPT4geworICAgICAgICAgICAgImluZGV4UGF0aDIi
ID0+IDIwLAorICAgICAgICB9CisgICAgfSwKK30sCit7CisgICAgIyBOZXcgdGVzdAorICAgIHRl
c3ROYW1lID0+ICJvbmUgZGlmZjogY29weSAoaGFzIHJldmlzaW9uKSIsCisgICAgZGlmZkhhc2hS
ZWZzSW5wdXQgPT4gWyRkaWZmSGFzaFJlZjNdLAorICAgIGV4cGVjdGVkID0+IHsKKyAgICAgICAg
Y29weURpZmZIYXNoUmVmcyA9PiBbJGRpZmZIYXNoUmVmM10sCisgICAgICAgIG5vbkNvcHlEaWZm
SGFzaFJlZnMgPT4gW10sCisgICAgICAgIHNvdXJjZVJldmlzaW9uSGFzaCA9PiB7CisgICAgICAg
ICAgICAic291cmNlUGF0aDMiID0+IDMsCisgICAgICAgIH0KKyAgICB9LAorfSwKK3sKKyAgICAj
IE5ldyB0ZXN0CisgICAgdGVzdE5hbWUgPT4gInR3byBkaWZmczogdHdvIG5vbi1jb3BpZXMiLAor
ICAgIGRpZmZIYXNoUmVmc0lucHV0ID0+IFskZGlmZkhhc2hSZWYxLCAkZGlmZkhhc2hSZWYyXSwK
KyAgICBleHBlY3RlZCA9PiB7CisgICAgICAgIGNvcHlEaWZmSGFzaFJlZnMgPT4gW10sCisgICAg
ICAgIG5vbkNvcHlEaWZmSGFzaFJlZnMgPT4gWyRkaWZmSGFzaFJlZjEsICRkaWZmSGFzaFJlZjJd
LAorICAgICAgICBzb3VyY2VSZXZpc2lvbkhhc2ggPT4geworICAgICAgICAgICAgImluZGV4UGF0
aDIiID0+IDIwLAorICAgICAgICB9CisgICAgfSwKK30sCit7CisgICAgIyBOZXcgdGVzdAorICAg
IHRlc3ROYW1lID0+ICJ0d28gZGlmZnM6IG5vbi1jb3B5IGFuZCBjb3B5IiwKKyAgICBkaWZmSGFz
aFJlZnNJbnB1dCA9PiBbJGRpZmZIYXNoUmVmMiwgJGRpZmZIYXNoUmVmM10sCisgICAgZXhwZWN0
ZWQgPT4geworICAgICAgICBjb3B5RGlmZkhhc2hSZWZzID0+IFskZGlmZkhhc2hSZWYzXSwKKyAg
ICAgICAgbm9uQ29weURpZmZIYXNoUmVmcyA9PiBbJGRpZmZIYXNoUmVmMl0sCisgICAgICAgIHNv
dXJjZVJldmlzaW9uSGFzaCA9PiB7CisgICAgICAgICAgICAic291cmNlUGF0aDMiID0+IDMsCisg
ICAgICAgICAgICAiaW5kZXhQYXRoMiIgPT4gMjAsCisgICAgICAgIH0KKyAgICB9LAorfSwKKyk7
CisKK215ICR0ZXN0Q2FzZXNDb3VudCA9IEB0ZXN0Q2FzZXM7CitwbGFuKHRlc3RzID0+ICR0ZXN0
Q2FzZXNDb3VudCk7CisKK2ZvcmVhY2ggbXkgJHRlc3RDYXNlIChAdGVzdENhc2VzKSB7CisgICAg
bXkgJHRlc3ROYW1lID0gJHRlc3RDYXNlLT57dGVzdE5hbWV9OworICAgIG15IEBkaWZmSGFzaFJl
ZnMgPSBAeyR0ZXN0Q2FzZS0+e2RpZmZIYXNoUmVmc0lucHV0fX07CisgICAgbXkgJGV4cGVjdGVk
ID0gJHRlc3RDYXNlLT57ZXhwZWN0ZWR9OworCisgICAgbXkgJGdvdCA9IHByZXBhcmVQYXJzZWRQ
YXRjaCgwLCBAZGlmZkhhc2hSZWZzKTsKKworICAgIGlzX2RlZXBseSgkZ290LCAkZXhwZWN0ZWQs
ICR0ZXN0TmFtZSk7Cit9CisK
</data>
<flag name="review"
          id="37871"
          type_id="1"
          status="+"
          setter="eric"
    />
    <flag name="commit-queue"
          id="37872"
          type_id="3"
          status="-"
          setter="cjerdonek"
    />
          </attachment>
      

    </bug>

</bugzilla>