<?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>27291</bug_id>
          
          <creation_ts>2009-07-15 01:49:36 -0700</creation_ts>
          <short_desc>Support lint for patches</short_desc>
          <delta_ts>2009-07-21 22:47:38 -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>PC</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Shinichiro Hamaji">hamaji</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>levin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>131824</commentid>
    <comment_count>0</comment_count>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2009-07-15 01:49:36 -0700</bug_when>
    <thetext>The lint tool added in Bug 25884 doesn&apos;t understand patch files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131826</commentid>
    <comment_count>1</comment_count>
      <attachid>32771</attachid>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2009-07-15 01:53:08 -0700</bug_when>
    <thetext>Created attachment 32771
Patch v1


---
 3 files changed, 414 insertions(+), 3 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131885</commentid>
    <comment_count>2</comment_count>
      <attachid>32771</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-07-15 07:56:07 -0700</bug_when>
    <thetext>Comment on attachment 32771
Patch v1



&gt; diff --git a/WebKitTools/Scripts/cpplint.py b/WebKitTools/Scripts/cpplint.py

&gt; +# From http://code.google.com/p/rietveld/source/browse/branches/chromium/codereview/engine.py
This code may not be used in WebKit because it has an incompatible license: &quot;Licensed under the Apache License&quot;

By the way, this is the typical license for Google code. (cpplint.py was relicense due to Albert Wong asking the author so that it could be used in WebKit.)

So there are two options:
1. See if the code can be relicensed (or dual licensed) (which may not be easy to do if people outside of Google contributed) OR
2. Write something equivalent from scratch.

&gt; +# From http://code.google.com/p/rietveld/source/browse/branches/chromium/codereview/patching.py

Same license issue.



*** General comment ***
For the rest of this, it feels like the use case should be someone who has the patch in their scm. The user would be to run the lint tool on the patch that would be created.

With that in mind could this change would do the following: 
1. Getting the current diff from the scm (use &quot;create_patch&quot; in scm.py.  A subsequent change can add support to call create_patch_from_local_commit for git users.)
2. Run cpplint on the files in that diff.
3. Filter the output from cpplint to only include the lines that changed in that diff.

Also, this logic could reside outside of cpplint.py, there could be a run-webkit-lint that did most of this and then called cpplint to do the linting of cpp/h files (with what lines to filter the results to).

I like this approach because you&apos;ll get less false lint warnings from running it on the whole file and it feels like it fits the usage model.  (If I want to lint someone else&apos;s patch, I could always patch it into my local system and then run the lint tool on it.) 

As you do this work, don&apos;t feel like you need a fully completely functional thing to submit a patch.  Just take logical chunks that are complete by themselves but may not provide all the functionality and submit patches as you go along so that the patches stay small which will make the review process faster.

For example one patch, may be just to move cpplint.py (and its unit test) into Scripts/modules since we&apos;ll probably call it from &quot;run-webkit-lint&quot; (which would be the harness you&apos;ll write in these patches).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131907</commentid>
    <comment_count>3</comment_count>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2009-07-15 09:00:46 -0700</bug_when>
    <thetext>Thanks for the comments, I&apos;ll change the order of your comments.

&gt; *** General comment ***
&gt; For the rest of this, it feels like the use case should be someone who has the
&gt; patch in their scm. The user would be to run the lint tool on the patch that
&gt; would be created.
&gt; 
&gt; With that in mind could this change would do the following: 
&gt; 1. Getting the current diff from the scm (use &quot;create_patch&quot; in scm.py.  A
&gt; subsequent change can add support to call create_patch_from_local_commit for
&gt; git users.)
&gt; 2. Run cpplint on the files in that diff.
&gt; 3. Filter the output from cpplint to only include the lines that changed in
&gt; that diff.
&gt; 
&gt; Also, this logic could reside outside of cpplint.py, there could be a
&gt; run-webkit-lint that did most of this and then called cpplint to do the linting
&gt; of cpp/h files (with what lines to filter the results to).
&gt; 
&gt; I like this approach because you&apos;ll get less false lint warnings from running
&gt; it on the whole file and it feels like it fits the usage model.  (If I want to
&gt; lint someone else&apos;s patch, I could always patch it into my local system and
&gt; then run the lint tool on it.) 

I see. I considered we may eventually want to integrate the linter into bugzilla so that submitted patch will be automatically linted and reviewees may see style issues even if they forget to apply the linter. Anyway, it&apos;s reasonable to implement scm integration first.

&gt; This code may not be used in WebKit because it has an incompatible license:
&gt; &quot;Licensed under the Apache License&quot;
&gt; 
&gt; By the way, this is the typical license for Google code. (cpplint.py was
&gt; relicense due to Albert Wong asking the author so that it could be used in
&gt; WebKit.)
&gt; 
&gt; So there are two options:
&gt; 1. See if the code can be relicensed (or dual licensed) (which may not be easy
&gt; to do if people outside of Google contributed) OR
&gt; 2. Write something equivalent from scratch.

The approach you suggested would be easier than the original way (we don&apos;t need to have equivalent of parse_patch_to_chunks, which is the biggest function in my patch). So, it may be not so difficult to re-invent other parts. Do you think it&apos;s reasonable to re-implement them? Or, should we ask the authors of rietveld about the license first?

&gt; As you do this work, don&apos;t feel like you need a fully completely functional
&gt; thing to submit a patch.  Just take logical chunks that are complete by
&gt; themselves but may not provide all the functionality and submit patches as you
&gt; go along so that the patches stay small which will make the review process
&gt; faster.

OK, I&apos;ll split my patch into small pieces. I know big patches are not good, but I thought it would be OK in this case as this patch was mostly copy&amp;paste and unittest.

&gt; For example one patch, may be just to move cpplint.py (and its unit test) into
&gt; Scripts/modules since we&apos;ll probably call it from &quot;run-webkit-lint&quot; (which
&gt; would be the harness you&apos;ll write in these patches).

Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133374</commentid>
    <comment_count>4</comment_count>
      <attachid>33148</attachid>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2009-07-20 23:38:14 -0700</bug_when>
    <thetext>Created attachment 33148
Patch v1


---
 3 files changed, 159 insertions(+), 11 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133379</commentid>
    <comment_count>5</comment_count>
      <attachid>33148</attachid>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2009-07-20 23:57:15 -0700</bug_when>
    <thetext>Comment on attachment 33148
Patch v1

&gt; Patch v1

Actually, this is v2 :(

Hmm... the usage of current patch is

% run-webkit-lint [options] [commitish]...

with this syntax, we cannot add support of linting files. Maybe the following syntax would be better?

% run-webkit-lint [--git-commit=&lt;commitish&gt;] [options] [file]...

For now, to keep the patch small, I&apos;ll re-upload a patch with removing support of linting specified commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133389</commentid>
    <comment_count>6</comment_count>
      <attachid>33148</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-07-21 00:56:54 -0700</bug_when>
    <thetext>Comment on attachment 33148
Patch v1

I saw that you unmarked this for review but I suspect these comments apply to what you are about to submit.  btw, I agree completely with making the git commit argument --git-commit=&lt;committish&gt; and was about to suggest it simply because that is consistent with prepare-ChangeLog.


&gt; diff --git a/WebKitTools/Scripts/modules/cpplint.py b/WebKitTools/Scripts/modules/cpplint.py

The changes done here look good but I think you missed the call in def main() to process_file(filename, _cpplint_state.verbose_level)
It should be easy enough to set the verbose level and omit the second parameter.


&gt; diff --git a/WebKitTools/Scripts/run-webkit-lint b/WebKitTools/Scripts/run-webkit-lint

&gt; +# Override the usage of the lint tool.
&gt; +cpplint._USAGE = &quot;&quot;&quot;
&gt; +Syntax: webkit-run-lint [--verbose=#] [--output=vs7] [--filter=-x,+y,...]
&gt; +        [COMMITISH] ...
&gt; +
&gt; +  The style guidelines this tries to follow are those in
&gt; +    http://webkit.org/coding/coding-style.html
&gt; +
&gt; +  Every problem is given a confidence score from 1-5, with 5 meaning we are
&gt; +  certain of the problem, and 1 meaning it could be a legitimate construct.
&gt; +  This will miss some errors, and is not a substitute for a code review.
&gt; +
&gt; +  To prevent specific lines from being linted, add a &apos;// NOLINT&apos; comment to the
&gt; +  end of the line.
&gt; +
&gt; +  If you don&apos;t specify COMMITISH, the current change on your repository will
&gt; +  be linted.  Otherwise, the specified commits will be linted based on your
&gt; +  local files.  Note that if you specify old commits which are modified in
&gt; +  newer patches, the line number of the lint results may be wrong.
&gt; +  Linted extensions are .cc, .cpp, and .h.  Other file types will be ignored.
&gt; +
&gt; +  Flags:
&gt; +
&gt; +    output=vs7
&gt; +      By default, the output is formatted to ease emacs parsing.  Visual Studio
&gt; +      compatible output (vs7) may also be used.  Other formats are unsupported.
&gt; +
&gt; +    verbose=#
&gt; +      Specify a number 0-5 to restrict errors to certain verbosity levels.
&gt; +
&gt; +    filter=-x,+y,...
&gt; +      Specify a comma-separated list of category-filters to apply: only
&gt; +      error messages whose category names pass the filters will be printed.
&gt; +      (Category names are printed with the message and look like
&gt; +      &quot;[whitespace/indent]&quot;.)  Filters are evaluated left to right.
&gt; +      &quot;-FOO&quot; and &quot;FOO&quot; means &quot;do not print categories that start with FOO&quot;.
&gt; +      &quot;+FOO&quot; means &quot;do print categories that start with FOO&quot;.
&gt; +
&gt; +      Examples: --filter=-whitespace,+whitespace/braces
&gt; +                --filter=whitespace,runtime/printf,+runtime/printf_format
&gt; +                --filter=-,+build/include_what_you_use
&gt; +
&gt; +      To see a list of all the categories used in cpplint, pass no arg:
&gt; +         --filter=
&gt; +&quot;&quot;&quot;

Consider doing this

&quot;&quot;&quot; ....&quot;&quot;&quot; % {&apos;program_name&apos; sys.argv[0]}
In the description text replace &quot;webkit-run-lint&quot; and &quot;cpplint&quot; with &quot;%{program_name}s&quot;


&gt; +def process_patch(patch_string):
&gt; +    &quot;&quot;&quot;Does lint on a single patch.
&gt; +
&gt; +    Args:
&gt; +      patch_string: A string of a patch.
&gt; +    &quot;&quot;&quot;
&gt; +    patch = DiffParser(patch_string.splitlines())
&gt; +    for filename, diff in patch.files.iteritems():
&gt; +        file_extension = os.path.splitext(filename)[1]
&gt; +
&gt; +        if file_extension in [&apos;.cc&apos;, &apos;.cpp&apos;, &apos;.h&apos;]:
&gt; +            line_numbers = set()

Consider creating this on demand, so if there are no lint errors, it just doesn&apos;t get created.  Like this:

               line_numbers = None            
&gt; +
&gt; +            def error_for_patch(filename, line_number, category, confidence, message):
&gt; +                &quot;&quot;&quot;Wrapper function of cpplint.error for patches.
&gt; +
&gt; +                This function outputs errors only if the line number
&gt; +                corresponds to lines which are modified or added.
&gt; +                &quot;&quot;&quot;
                   if line_numbers is None:
                       line_numbers = set()
                       for line in diff.lines:
                           line_numbers.add(line[1])

&gt; +                if line_number in line_numbers:
&gt; +                    cpplint.error(filename, line_number, category, confidence, message)
&gt; +
&gt; +            cpplint.process_file(filename, error=error_for_patch)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133409</commentid>
    <comment_count>7</comment_count>
      <attachid>33158</attachid>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2009-07-21 01:53:11 -0700</bug_when>
    <thetext>Created attachment 33158
Patch v3


---
 3 files changed, 149 insertions(+), 7 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133411</commentid>
    <comment_count>8</comment_count>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2009-07-21 02:00:24 -0700</bug_when>
    <thetext>&gt; The changes done here look good but I think you missed the call in def main()
&gt; to process_file(filename, _cpplint_state.verbose_level)
&gt; It should be easy enough to set the verbose level and omit the second
&gt; parameter.

Ah, thanks, fixed.

&gt; Consider doing this
&gt; 
&gt; &quot;&quot;&quot; ....&quot;&quot;&quot; % {&apos;program_name&apos; sys.argv[0]}
&gt; In the description text replace &quot;webkit-run-lint&quot; and &quot;cpplint&quot; with
&gt; &quot;%{program_name}s&quot;

There is one more change other than the program name. Though cpplint.py requires at least one file in the arguments and this was mentioned in _USAGE of cpplint.py, webkit-run-lint is not. I think we will eventually remove main() and _USAGE from cpplint module when webkit-run-lint is ready. So, can i leave the copy of _USAGE in run-webkit-lint for now?

&gt; Consider creating this on demand, so if there are no lint errors, it just
&gt; doesn&apos;t get created.  Like this:
&gt; 
&gt;                line_numbers = None            
&gt; &gt; +
&gt; &gt; +            def error_for_patch(filename, line_number, category, confidence, message):
&gt; &gt; +                &quot;&quot;&quot;Wrapper function of cpplint.error for patches.
&gt; &gt; +
&gt; &gt; +                This function outputs errors only if the line number
&gt; &gt; +                corresponds to lines which are modified or added.
&gt; &gt; +                &quot;&quot;&quot;
&gt;                    if line_numbers is None:
&gt;                        line_numbers = set()
&gt;                        for line in diff.lines:
&gt;                            line_numbers.add(line[1])
&gt; 
&gt; &gt; +                if line_number in line_numbers:
&gt; &gt; +                    cpplint.error(filename, line_number, category, confidence, message)
&gt; &gt; +
&gt; &gt; +            cpplint.process_file(filename, error=error_for_patch)

Ah, nice suggestion. However, Python seems not to like this as is. It says:

UnboundLocalError: local variable &apos;line_numbers&apos; referenced before assignment

I&apos;m not sure what is the best way to fix, but I initialized line_numbers by an empty set. Maybe it&apos;s OK as valid diff chunks should have at least one diff line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133421</commentid>
    <comment_count>9</comment_count>
      <attachid>33158</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-07-21 02:39:10 -0700</bug_when>
    <thetext>Comment on attachment 33158
Patch v3

A few things to consider....

&gt; diff --git a/WebKitTools/Scripts/modules/cpplint.py b/WebKitTools/Scripts/modules/cpplint.py

&gt; +# FIXME: Once run-webkit-lint script becomes ready, we don&apos;t need to
&gt; +#        support standalone execution for this module.
&gt; +#        So, we should remove _USAGE and main() eventually.

I&apos;m not sure this is necessary (maybe).


&gt;      _cpplint_state.reset_error_count()

Add this line here:

   _set_verbose_level(_cpplint_state.verbose_level)

&gt;      for filename in filenames:
&gt; -        process_file(filename, _cpplint_state.verbose_level)
&gt; +        process_file(filename)


&gt; diff --git a/WebKitTools/Scripts/run-webkit-lint b/WebKitTools/Scripts/run-webkit-lint

&gt; +cpplint._USAGE = &quot;&quot;&quot;
&gt; +Syntax: webkit-run-lint [--verbose=#] [--output=vs7] [--filter=-x,+y,...]
&gt; +
&gt; +  The style guidelines this tries to follow are those in
&gt; +    http://webkit.org/coding/coding-style.html
&gt; +
&gt; +  Every problem is given a confidence score from 1-5, with 5 meaning we are
&gt; +  certain of the problem, and 1 meaning it could be a legitimate construct.
&gt; +  This will miss some errors, and is not a substitute for a code review.
&gt; +
&gt; +  To prevent specific lines from being linted, add a &apos;// NOLINT&apos; comment to the
&gt; +  end of the line.
&gt; +
&gt; +  Linted extensions are .cc, .cpp, and .h.  Other file types will be ignored.
&gt; +
&gt; +  Flags:
&gt; +
&gt; +    output=vs7
&gt; +      By default, the output is formatted to ease emacs parsing.  Visual Studio
&gt; +      compatible output (vs7) may also be used.  Other formats are unsupported.
&gt; +
&gt; +    verbose=#
&gt; +      Specify a number 0-5 to restrict errors to certain verbosity levels.
&gt; +
&gt; +    filter=-x,+y,...
&gt; +      Specify a comma-separated list of category-filters to apply: only
&gt; +      error messages whose category names pass the filters will be printed.
&gt; +      (Category names are printed with the message and look like
&gt; +      &quot;[whitespace/indent]&quot;.)  Filters are evaluated left to right.
&gt; +      &quot;-FOO&quot; and &quot;FOO&quot; means &quot;do not print categories that start with FOO&quot;.
&gt; +      &quot;+FOO&quot; means &quot;do print categories that start with FOO&quot;.
&gt; +
&gt; +      Examples: --filter=-whitespace,+whitespace/braces
&gt; +                --filter=whitespace,runtime/printf,+runtime/printf_format
&gt; +                --filter=-,+build/include_what_you_use
&gt; +
&gt; +      To see a list of all the categories used in cpplint, pass no arg:
&gt; +         --filter=
&gt; +&quot;&quot;&quot;

When I said this:  Consider doing this

&quot;&quot;&quot; ....&quot;&quot;&quot; % {&apos;program_name&apos; sys.argv[0]}
In the description text replace &quot;webkit-run-lint&quot; and &quot;cpplint&quot; with
&quot;%{program_name}s&quot;

I was referring to this comment (not the one in cpplint.py).  It would fix two things: &quot;webkit-run-lint&quot; is not the program name. &quot;cpplint&quot; is also not the name of the program being run.
sys.argv[0] is the program name.

&gt;
&gt; +        if file_extension in [&apos;.cc&apos;, &apos;.cpp&apos;, &apos;.h&apos;]:
&gt; +            line_numbers = set()
This looks fine.  The problem with my suggestion was the assigment inside of error_for_patch which made the variable have scope local to that block.


&gt; +    if args:
&gt; +        sys.stderr.write(&apos;ERROR: We don\&apos;t support files as arguments for now.\n&apos; + cpplint._USAGE)

Consider using &quot;&quot; for the outside quotes and change \&apos; to &apos;.  Like this

        sys.stderr.write(&quot;ERROR: We don&apos;t support files as arguments for now.\n&quot; + cpplint._USAGE)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133435</commentid>
    <comment_count>10</comment_count>
      <attachid>33167</attachid>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2009-07-21 03:19:02 -0700</bug_when>
    <thetext>Created attachment 33167
Patch v4


---
 3 files changed, 146 insertions(+), 7 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133437</commentid>
    <comment_count>11</comment_count>
      <attachid>33167</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-07-21 03:28:47 -0700</bug_when>
    <thetext>Comment on attachment 33167
Patch v4

Ok I see there is no need to call _set_verbose_level(_cpplint_state.verbose_level) because that is just redundant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133438</commentid>
    <comment_count>12</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-07-21 03:33:04 -0700</bug_when>
    <thetext>I forgot to note that run-webkit-list should have the executable bit set, but
I&apos;ll do this on landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133439</commentid>
    <comment_count>13</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-07-21 03:35:40 -0700</bug_when>
    <thetext>Committed as http://trac.webkit.org/changeset/46166</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133701</commentid>
    <comment_count>14</comment_count>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2009-07-21 22:47:38 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 33167 [details])
&gt; Ok I see there is no need to call
&gt; _set_verbose_level(_cpplint_state.verbose_level) because that is just
&gt; redundant.

Ah, thanks for finding this. My comment on this was conflicted and I didn&apos;t notice the conflict. As for &quot;program_name&quot;, I completely misunderstood your comments, sorry.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32771</attachid>
            <date>2009-07-15 01:53:08 -0700</date>
            <delta_ts>2009-07-20 23:38:11 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>bug-27291-20090715015307.patch</filename>
            <type>text/plain</type>
            <size>20299</size>
            <attacher name="Shinichiro Hamaji">hamaji</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAwMjA3YjgzLi5kMWViMjhkIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMDktMDct
MTUgIFNoaW5pY2hpcm8gSGFtYWppICA8aGFtYWppQGNocm9taXVtLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTdXBwb3J0IGxpbnQgZm9yIHBh
dGNoZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3
MjkxCisKKyAgICAgICAgU3VwcG9ydCAtLXBhdGNoIG9wdGlvbiBpbiBjcHBsaW50LgorICAgICAg
ICBUaGUgcGF0Y2ggcGFyc2VyIGlzIGJhc2VkIG9uIHJpZXR2ZWxkJ3MuCisgICAgICAgIGh0dHA6
Ly9jb2RlLmdvb2dsZS5jb20vcC9yaWV0dmVsZC9zb3VyY2UvYnJvd3NlL2JyYW5jaGVzL2Nocm9t
aXVtL2NvZGVyZXZpZXcvCisKKyAgICAgICAgKiBTY3JpcHRzL2NwcGxpbnQucHk6CisgICAgICAg
ICogU2NyaXB0cy9jcHBsaW50X3VuaXR0ZXN0LnB5OgorCiAyMDA5LTA3LTE0ICBTaGluaWNoaXJv
IEhhbWFqaSAgPGhhbWFqaUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2
aWQgTGV2aW4uCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL2NwcGxpbnQucHkgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL2NwcGxpbnQucHkKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEw
MDc1NQppbmRleCAxODU0OTIxLi5jODE1NGU3Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvY3Bw
bGludC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL2NwcGxpbnQucHkKQEAgLTQ2LDYgKzQ2
LDcgQEAgc2FtZSBsaW5lLCBidXQgaXQgaXMgZmFyIGZyb20gcGVyZmVjdCAoaW4gZWl0aGVyIGRp
cmVjdGlvbikuCiAKIGltcG9ydCBjb2RlY3MKIGltcG9ydCBnZXRvcHQKK2ltcG9ydCBsb2dnaW5n
CiBpbXBvcnQgbWF0aCAgIyBmb3IgbG9nCiBpbXBvcnQgb3MKIGltcG9ydCBvcy5wYXRoCkBAIC05
Niw2ICs5NywxMSBAQCBTeW50YXg6IGNwcGxpbnQucHkgWy0tdmVyYm9zZT0jXSBbLS1vdXRwdXQ9
dnM3XSBbLS1maWx0ZXI9LXgsK3ksLi4uXQogCiAgICAgICBUbyBzZWUgYSBsaXN0IG9mIGFsbCB0
aGUgY2F0ZWdvcmllcyB1c2VkIGluIGNwcGxpbnQsIHBhc3Mgbm8gYXJnOgogICAgICAgICAgLS1m
aWx0ZXI9CisKKyAgICBwYXRjaAorICAgICAgTGludCBjb2RlIGluIHBhdGNoZXMuCisKKyAgICAg
IEV4YW1wbGU6IGdpdCBkaWZmIHwgY3BwbGludC5weSAtLXBhdGNoIC0KICIiIgogCiAjIFdlIGNh
dGVnb3JpemUgZWFjaCBlcnJvciBtZXNzYWdlIHdlIHByaW50LiAgSGVyZSBhcmUgdGhlIGNhdGVn
b3JpZXMuCkBAIC0zNTAsNiArMzU2LDcgQEAgY2xhc3MgX0NwcExpbnRTdGF0ZShvYmplY3QpOgog
ICAgICAgICBzZWxmLmVycm9yX2NvdW50ID0gMCAgICAjIGdsb2JhbCBjb3VudCBvZiByZXBvcnRl
ZCBlcnJvcnMKICAgICAgICAgIyBmaWx0ZXJzIHRvIGFwcGx5IHdoZW4gZW1pdHRpbmcgZXJyb3Ig
bWVzc2FnZXMKICAgICAgICAgc2VsZi5maWx0ZXJzID0gX0RFRkFVTFRfRklMVEVSU1s6XQorICAg
ICAgICBzZWxmLnBhdGNoX21vZGUgPSBGYWxzZQogCiAgICAgICAgICMgb3V0cHV0IGZvcm1hdDoK
ICAgICAgICAgIyAiZW1hY3MiIC0gZm9ybWF0IHRoYXQgZW1hY3MgY2FuIHBhcnNlIChkZWZhdWx0
KQpAQCAtMzkxLDYgKzM5OCwxMiBAQCBjbGFzcyBfQ3BwTGludFN0YXRlKG9iamVjdCk6CiAgICAg
ICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignRXZlcnkgZmlsdGVyIGluIC0tZmlsdGVycyBt
dXN0IHN0YXJ0IHdpdGggJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJysgb3Ig
LSAoJXMgZG9lcyBub3QpJyAlIGZpbHRlcikKIAorICAgIGRlZiBzZXRfcGF0Y2hfbW9kZShzZWxm
LCBwYXRjaF9tb2RlKToKKyAgICAgICAgIiIiU2V0cyB0aGUgbW9kdWxlJ3MgcGF0Y2ggbW9kZSwg
YW5kIHJldHVybnMgdGhlIHByZXZpb3VzIHNldHRpbmcuIiIiCisgICAgICAgIGxhc3RfcGF0Y2hf
bW9kZSA9IHNlbGYucGF0Y2hfbW9kZQorICAgICAgICBzZWxmLnBhdGNoX21vZGUgPSBwYXRjaF9t
b2RlCisgICAgICAgIHJldHVybiBsYXN0X3BhdGNoX21vZGUKKwogICAgIGRlZiByZXNldF9lcnJv
cl9jb3VudChzZWxmKToKICAgICAgICAgIiIiU2V0cyB0aGUgbW9kdWxlJ3MgZXJyb3Igc3RhdGlz
dGljIGJhY2sgdG8gemVyby4iIiIKICAgICAgICAgc2VsZi5lcnJvcl9jb3VudCA9IDAKQEAgLTQ0
MSw2ICs0NTQsMTEgQEAgZGVmIF9zZXRfZmlsdGVycyhmaWx0ZXJzKToKICAgICBfY3BwbGludF9z
dGF0ZS5zZXRfZmlsdGVycyhmaWx0ZXJzKQogCiAKK2RlZiBfc2V0X3BhdGNoX21vZGUocGF0Y2hf
bW9kZSk6CisgICAgIiIiU2V0cyB0aGUgbW9kdWxlJ3MgcGF0Y2ggbW9kZSwgYW5kIHJldHVybnMg
dGhlIHByZXZpb3VzIHNldHRpbmcuIiIiCisgICAgcmV0dXJuIF9jcHBsaW50X3N0YXRlLnNldF9w
YXRjaF9tb2RlKHBhdGNoX21vZGUpCisKKwogY2xhc3MgX0Z1bmN0aW9uU3RhdGUob2JqZWN0KToK
ICAgICAiIiJUcmFja3MgY3VycmVudCBmdW5jdGlvbiBuYW1lIGFuZCB0aGUgbnVtYmVyIG9mIGxp
bmVzIGluIGl0cyBib2R5LiIiIgogCkBAIC02MDQsNyArNjIyLDcgQEAgZGVmIF9zaG91bGRfcHJp
bnRfZXJyb3IoY2F0ZWdvcnksIGNvbmZpZGVuY2UpOgogICAgICAgICAgICAgaWYgY2F0ZWdvcnku
c3RhcnRzd2l0aChvbmVfZmlsdGVyWzE6XSk6CiAgICAgICAgICAgICAgICAgaXNfZmlsdGVyZWQg
PSBGYWxzZQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgYXNzZXJ0IEZhbHNlICAjIHNob3Vs
ZCBoYXZlIGJlZW4gY2hlY2tlZCBmb3IgaW4gU2V0RmlsdGVyLgorICAgICAgICAgICAgYXNzZXJ0
IEZhbHNlICAjIHNob3VsZCBoYXZlIGJlZW4gY2hlY2tlZCBmb3IgaW4gc2V0X2ZpbHRlcnMuCiAg
ICAgaWYgaXNfZmlsdGVyZWQ6CiAgICAgICAgIHJldHVybiBGYWxzZQogCkBAIC0yNjI2LDYgKzI2
NDQsMjc4IEBAIGRlZiBwcm9jZXNzX2ZpbGVfZGF0YShmaWxlbmFtZSwgZmlsZV9leHRlbnNpb24s
IGxpbmVzLCBlcnJvcik6CiAgICAgY2hlY2tfZm9yX25ld19saW5lX2F0X2VvZihmaWxlbmFtZSwg
bGluZXMsIGVycm9yKQogCiAKKyMgRnJvbSBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvcmlldHZl
bGQvc291cmNlL2Jyb3dzZS9icmFuY2hlcy9jaHJvbWl1bS9jb2RlcmV2aWV3L2VuZ2luZS5weQor
ZGVmIHNwbGl0X3BhdGNoKGxpbmVzKToKKyAgICAiIiJTcGxpdHMgYSBwYXRjaCBpbnRvIHNlcGFy
YXRlIHBpZWNlcyBmb3IgZWFjaCBmaWxlLgorCisgICAgQXJnczoKKyAgICAgIGxpbmVzOiBBbiBh
cnJheSBvZiBzdHJpbmdzLCBlYWNoIHJlcHJlc2VudGluZyBhIGxpbmUgb2YgdGhlIGZpbGUsIHdp
dGggdGhlCisgICAgICAgICAgICAgbGFzdCBlbGVtZW50IGJlaW5nIGVtcHR5IGlmIHRoZSBmaWxl
IGlzIHRlcm1pbmVkIHdpdGggYSBuZXdsaW5lLgorCisgICAgUmV0dXJuczoKKyAgICAgIEEgbGlz
dCBvZiAyLXR1cGxlIChmaWxlbmFtZSwgdGV4dCkgd2hlcmUgdGV4dCBpcyB0aGUgZ2l0L3N2bgor
ICAgICAgZGlmZiBvdXRwdXQgcGVydGFpbmluZyB0byBmaWxlbmFtZS4KKyAgICAiIiIKKyAgICBw
YXRjaGVzID0gW10KKyAgICBmaWxlbmFtZSA9IE5vbmUKKyAgICBkaWZmID0gW10KKyAgICBmb3Ig
bGluZSBpbiBsaW5lczoKKyAgICAgICAgbmV3X2ZpbGVuYW1lID0gTm9uZQorICAgICAgICBpZiBs
aW5lLnN0YXJ0c3dpdGgoJ0luZGV4OicpOiAgIyBmb3IgU1ZOCisgICAgICAgICAgICB1bnVzZWQs
IG5ld19maWxlbmFtZSA9IGxpbmUuc3BsaXQoJzonLCAxKQorICAgICAgICAgICAgbmV3X2ZpbGVu
YW1lID0gbmV3X2ZpbGVuYW1lLnN0cmlwKCkKKyAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgo
J2RpZmYgLS1naXQgJyk6ICAjIGZvciBnaXQKKyAgICAgICAgICAgIG5ld19maWxlbmFtZSA9IGxp
bmUuc3BsaXQoJyAnKVstMV0KKyAgICAgICAgICAgIG5ld19maWxlbmFtZSA9IG5ld19maWxlbmFt
ZS5yZXBsYWNlKCdiLycsICcnLCAxKS5zdHJpcCgpCisgICAgICAgIGVsaWYgbGluZS5zdGFydHN3
aXRoKCdQcm9wZXJ0eSBjaGFuZ2VzIG9uOicpOgorICAgICAgICAgICAgdW51c2VkLCB0ZW1wX2Zp
bGVuYW1lID0gbGluZS5zcGxpdCgnOicsIDEpCisgICAgICAgICAgICAjIFdoZW4gYSBmaWxlIGlz
IG1vZGlmaWVkLCBwYXRocyB1c2UgJy8nIGJldHdlZW4gZGlyZWN0b3JpZXMsCisgICAgICAgICAg
ICAjIGhvd2V2ZXIgd2hlbiBhIHByb3BlcnR5IGlzIG1vZGlmaWVkICdcJyBpcyB1c2VkIG9uIFdp
bmRvd3MuCisgICAgICAgICAgICAjIE1ha2UgdGhlbSB0aGUgc2FtZSBvdGhlcndpc2UgdGhlIGZp
bGUgc2hvd3MgdXAgdHdpY2UuCisgICAgICAgICAgICB0ZW1wX2ZpbGVuYW1lID0gdGVtcF9maWxl
bmFtZS5zdHJpcCgpLnJlcGxhY2UoJ1xcJywgJy8nKQorICAgICAgICAgICAgaWYgdGVtcF9maWxl
bmFtZSAhPSBmaWxlbmFtZToKKyAgICAgICAgICAgICAgICAjIEZpbGUgaGFzIHByb3BlcnR5IGNo
YW5nZXMgYnV0IG5vIG1vZGlmaWNhdGlvbnMsIGNyZWF0ZSBhIG5ldyBkaWZmLgorICAgICAgICAg
ICAgICAgIG5ld19maWxlbmFtZSA9IHRlbXBfZmlsZW5hbWUKKyAgICAgICAgaWYgbmV3X2ZpbGVu
YW1lOgorICAgICAgICAgICAgaWYgZmlsZW5hbWUgYW5kIGRpZmY6CisgICAgICAgICAgICAgICAg
cGF0Y2hlcy5hcHBlbmQoKGZpbGVuYW1lLCAnXG4nLmpvaW4oZGlmZikpKQorICAgICAgICAgICAg
ZmlsZW5hbWUgPSBuZXdfZmlsZW5hbWUKKyAgICAgICAgICAgIGRpZmYgPSBbbGluZV0KKyAgICAg
ICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmIGRpZmYgaXMgbm90IE5vbmU6CisgICAgICAgICAg
ICBkaWZmLmFwcGVuZChsaW5lKQorICAgIGlmIGZpbGVuYW1lIGFuZCBkaWZmOgorICAgICAgICBw
YXRjaGVzLmFwcGVuZCgoZmlsZW5hbWUsICdcbicuam9pbihkaWZmKSkpCisgICAgcmV0dXJuIHBh
dGNoZXMKKworCisjIEZyb20gaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3JpZXR2ZWxkL3NvdXJj
ZS9icm93c2UvYnJhbmNoZXMvY2hyb21pdW0vY29kZXJldmlldy9wYXRjaGluZy5weQorCisKK19D
SFVOS19SRSA9IHJlLmNvbXBpbGUociIiIgorICAgIEBACisgICAgXHMrCisgICAgLQorICAgICg/
OiAoXGQrKSAoPzogLCAoXGQrKSApPykKKyAgICBccysKKyAgICBcKworICAgICg/OiAoXGQrKSAo
PzogLCAoXGQrKSApPykKKyAgICBccysKKyAgICBAQAorIiIiLCByZS5WRVJCT1NFKQorCisKK19O
T19ORVdMSU5FX01FU1NBR0UgPSAiXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZSIKKworCitk
ZWYgcGFyc2VfcGF0Y2hfdG9fY2h1bmtzKGxpbmVzLCBuYW1lPSI8cGF0Y2g+Iik6CisgICAgIiIi
UGFyc2VzIGEgcGF0Y2ggZnJvbSBhIGxpc3Qgb2YgbGluZXMuCisKKyAgICBBcmdzOgorICAgICAg
bGluZXM6IEFuIGFycmF5IG9mIHN0cmluZ3MsIGVhY2ggcmVwcmVzZW50aW5nIGEgbGluZSBvZiBh
IGZpbGUKKyAgICAgICAgICAgICBpbiBhIHBhdGNoLgorICAgICAgbmFtZTogVGhlIG5hbWUgb2Yg
dGhlIGZpbGUgaW4gYSBwYXRjaC4KKworICAgIFJldHVybnM6CisgICAgICBBIGxpc3Qgb2YgY2h1
bmtzIChwb3NzaWJseSBlbXB0eSksIHdoZXJlIGVhY2ggY2h1bmsgaXMgYSB0dXBsZToKKworICAg
ICAgICBvbGRfcmFuZ2UsIG5ld19yYW5nZSwgb2xkX2xpbmVzLCBuZXdfbGluZXMKKworICAgICAg
b3IgTm9uZSBpZiB0aGVyZSdzIGEgcHJvYmxlbS4KKyAgICAiIiIKKyAgICBsaW5lX251bWJlciA9
IDAKKyAgICByYXdfY2h1bmsgPSBbXQorICAgIGNodW5rcyA9IFtdCisgICAgb2xkX3JhbmdlID0g
bmV3X3JhbmdlID0gTm9uZQorICAgIG9sZF9sYXN0ID0gbmV3X2xhc3QgPSAwCisgICAgaW5fcHJl
bHVkZSA9IFRydWUKKyAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgbGluZV9udW1iZXIg
Kz0gMQorICAgICAgICBpZiBpbl9wcmVsdWRlOgorICAgICAgICAgICAgIyBTa2lwIGxlYWRpbmcg
bGluZXMgdW50aWwgYWZ0ZXIgd2UndmUgc2VlbiBvbmUgc3RhcnRpbmcgd2l0aCAnKysrJworICAg
ICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCIrKysiKToKKyAgICAgICAgICAgICAgICBpbl9w
cmVsdWRlID0gRmFsc2UKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIG1hdGNoID0gX0NI
VU5LX1JFLm1hdGNoKGxpbmUpCisgICAgICAgIGlmIG1hdGNoOgorICAgICAgICAgICAgaWYgcmF3
X2NodW5rOgorICAgICAgICAgICAgICAgICMgUHJvY2VzcyB0aGUgbGluZXMgaW4gdGhlIHByZXZp
b3VzIGNodW5rCisgICAgICAgICAgICAgICAgb2xkX2NodW5rID0gW10KKyAgICAgICAgICAgICAg
ICBuZXdfY2h1bmsgPSBbXQorICAgICAgICAgICAgICAgIGZvciB0YWcsIHJlc3QgaW4gcmF3X2No
dW5rOgorICAgICAgICAgICAgICAgICAgICBpZiB0YWcgaW4gKCIgIiwgIi0iKToKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG9sZF9jaHVuay5hcHBlbmQocmVzdCkKKyAgICAgICAgICAgICAgICAg
ICAgaWYgdGFnIGluICgiICIsICIrIik6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdfY2h1
bmsuYXBwZW5kKHJlc3QpCisgICAgICAgICAgICAgICAgIyBDaGVjayBjb25zaXN0ZW5jeQorICAg
ICAgICAgICAgICAgIG9sZF9zdGFydCwgb2xkX2VuZCA9IG9sZF9yYW5nZQorICAgICAgICAgICAg
ICAgIG5ld19zdGFydCwgbmV3X2VuZCA9IG5ld19yYW5nZQorICAgICAgICAgICAgICAgIGlmIGxl
bihvbGRfY2h1bmspICE9IG9sZF9lbmQgLSBvbGRfc3RhcnQgb3IgbGVuKG5ld19jaHVuaykgIT0g
bmV3X2VuZCAtIG5ld19zdGFydDoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2luZy53YXJuKCIl
czolczogcHJldmlvdXMgY2h1bmsgaGFzIGluY29ycmVjdCBsZW5ndGgiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbmFtZSwgbGluZV9udW1iZXIpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBOb25lCisgICAgICAgICAgICAgICAgY2h1bmtzLmFwcGVuZCgob2xkX3Jhbmdl
LCBuZXdfcmFuZ2UsIG9sZF9jaHVuaywgbmV3X2NodW5rKSkKKyAgICAgICAgICAgICAgICByYXdf
Y2h1bmsgPSBbXQorICAgICAgICAgICAgIyBQYXJzZSB0aGUgQEAgaGVhZGVyCisgICAgICAgICAg
ICBvbGRfbGluZSwgb2xkX251bWJlciwgbmV3X2xpbmUsIG5ld19udW1iZXIgPSBtYXRjaC5ncm91
cHMoKQorICAgICAgICAgICAgb2xkX2xpbmUsIG9sZF9udW1iZXIsIG5ld19saW5lLCBuZXdfbnVt
YmVyID0gbWFwKGxvbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChvbGRfbGluZSwgb2xkX251bWJlciBvciAxLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2xpbmUsIG5ld19udW1iZXIgb3IgMSkpCisg
ICAgICAgICAgICAjIENvbnZlcnQgdGhlIG51bWJlcnMgdG8gbGlzdCBpbmRpY2VzIHdlIGNhbiB1
c2UKKyAgICAgICAgICAgIGlmIG9sZF9udW1iZXIgPT0gMDoKKyAgICAgICAgICAgICAgICBvbGRf
c3RhcnQgPSBvbGRfbGluZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvbGRf
c3RhcnQgPSBvbGRfbGluZSAtIDEKKyAgICAgICAgICAgIG9sZF9lbmQgPSBvbGRfc3RhcnQgKyBv
bGRfbnVtYmVyCisgICAgICAgICAgICBvbGRfcmFuZ2UgPSBvbGRfc3RhcnQsIG9sZF9lbmQKKyAg
ICAgICAgICAgIGlmIG5ld19udW1iZXIgPT0gMDoKKyAgICAgICAgICAgICAgICBuZXdfc3RhcnQg
PSBuZXdfbGluZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBuZXdfc3RhcnQg
PSBuZXdfbGluZSAtIDEKKyAgICAgICAgICAgIG5ld19lbmQgPW5ld19zdGFydCArIG5ld19udW1i
ZXIKKyAgICAgICAgICAgIG5ld19yYW5nZSA9IG5ld19zdGFydCwgbmV3X2VuZAorICAgICAgICAg
ICAgIyBDaGVjayBoZWFkZXIgY29uc2lzdGVuY3kgd2l0aCBwcmV2aW91cyBoZWFkZXIKKyAgICAg
ICAgICAgIGlmIG9sZF9zdGFydCA8IG9sZF9sYXN0IG9yIG5ld19zdGFydCA8IG5ld19sYXN0Ogor
ICAgICAgICAgICAgICAgIGxvZ2dpbmcud2FybigiJXM6JXM6IGNodW5rIGhlYWRlciBvdXQgb2Yg
b3JkZXI6ICVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgbGluZV9udW1i
ZXIsIGxpbmUpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIGlmIG9s
ZF9zdGFydCAtIG9sZF9sYXN0ICE9IG5ld19zdGFydCAtIG5ld19sYXN0OgorICAgICAgICAgICAg
ICAgIHByaW50IG9sZF9zdGFydCwgb2xkX2xhc3QsIG5ld19zdGFydCwgbmV3X2xhc3QKKyAgICAg
ICAgICAgICAgICBsb2dnaW5nLndhcm4oIiVzOiVzOiBpbmNvbnNpc3RlbnQgY2h1bmsgaGVhZGVy
OiAlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIGxpbmVfbnVtYmVyLCBs
aW5lKQorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICBvbGRfbGFzdCA9
IG9sZF9lbmQKKyAgICAgICAgICAgIG5ld19sYXN0ID0gbmV3X2VuZAorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgdGFnLCByZXN0ID0gbGluZVswXSwgbGluZVsxOl0KKyAgICAgICAgICAgIGlm
IHRhZyBpbiAoIiAiLCAiLSIsICIrIik6CisgICAgICAgICAgICAgICAgcmF3X2NodW5rLmFwcGVu
ZCgodGFnLCByZXN0KSkKKyAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKF9OT19ORVdM
SU5FX01FU1NBR0UpOgorICAgICAgICAgICAgICAgICMgRklYTUU6IG5lZWQgdG8gY2hlY2sgdGhh
dCBubyBtb3JlIGxpbmVzIGZvbGxvdyBmb3IgdGhpcyBmaWxlCisgICAgICAgICAgICAgICAgaWYg
cmF3X2NodW5rOgorICAgICAgICAgICAgICAgICAgICBsYXN0X3RhZywgbGFzdF9yZXN0ID0gcmF3
X2NodW5rWy0xXQorICAgICAgICAgICAgICAgICAgICBpZiBsYXN0X3Jlc3QuZW5kc3dpdGgoIlxu
Iik6CisgICAgICAgICAgICAgICAgICAgICAgICByYXdfY2h1bmtbLTFdID0gKGxhc3RfdGFnLCBs
YXN0X3Jlc3RbOi0xXSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBPbmx5
IGxvZyBpZiBpdCdzIGEgbm9uLWJsYW5rIGxpbmUuICBCbGFuayBsaW5lcyB3ZSBzZWUgYSBsb3Qu
CisgICAgICAgICAgICAgICAgaWYgbGluZSBhbmQgbGluZS5zdHJpcCgpOgorICAgICAgICAgICAg
ICAgICAgICBsb2dnaW5nLndhcm4oIiVzOiVkOiBpbmRlY3lwaGVyYWJsZSBpbnB1dDogJXIiLCBu
YW1lLCBsaW5lX251bWJlciwgbGluZSkKKyAgICAgICAgICAgICAgICBpZiBjaHVua3Mgb3IgcmF3
X2NodW5rOgorICAgICAgICAgICAgICAgICAgICBicmVhayAgIyBUcmFpbGluZyBnYXJiYWdlIGlz
bid0IHNvIGJhZAorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgaWYgcmF3X2NodW5r
OgorICAgICAgICAjIFByb2Nlc3MgdGhlIGxpbmVzIGluIHRoZSBsYXN0IGNodW5rCisgICAgICAg
IG9sZF9jaHVuayA9IFtdCisgICAgICAgIG5ld19jaHVuayA9IFtdCisgICAgICAgIGZvciB0YWcs
IHJlc3QgaW4gcmF3X2NodW5rOgorICAgICAgICAgICAgaWYgdGFnIGluICgiICIsICItIik6Cisg
ICAgICAgICAgICAgICAgb2xkX2NodW5rLmFwcGVuZChyZXN0KQorICAgICAgICAgICAgaWYgdGFn
IGluICgiICIsICIrIik6CisgICAgICAgICAgICAgICAgbmV3X2NodW5rLmFwcGVuZChyZXN0KQor
ICAgICAgICAjIENoZWNrIGNvbnNpc3RlbmN5CisgICAgICAgIG9sZF9zdGFydCwgb2xkX2VuZCA9
IG9sZF9yYW5nZQorICAgICAgICBuZXdfc3RhcnQsIG5ld19lbmQgPSBuZXdfcmFuZ2UKKyAgICAg
ICAgaWYgbGVuKG9sZF9jaHVuaykgIT0gb2xkX2VuZCAtIG9sZF9zdGFydCBvciBsZW4obmV3X2No
dW5rKSAhPSBuZXdfZW5kIC0gbmV3X3N0YXJ0OgorICAgICAgICAgICAgcHJpbnQgPj5zeXMuc3Rk
ZXJyLCAoIiVzOiVzOiBsYXN0IGNodW5rIGhhcyBpbmNvcnJlY3QgbGVuZ3RoIiAlCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAobmFtZSwgbGluZV9udW1iZXIpKQorICAgICAgICAg
ICAgcmV0dXJuIE5vbmUKKyAgICAgICAgY2h1bmtzLmFwcGVuZCgob2xkX3JhbmdlLCBuZXdfcmFu
Z2UsIG9sZF9jaHVuaywgbmV3X2NodW5rKSkKKyAgICAgICAgcmF3X2NodW5rID0gW10KKyAgICBy
ZXR1cm4gY2h1bmtzCisKKworZGVmIHBhcnNlX3BhdGNoX3RvX2xpbmVzKGxpbmVzKToKKyAgICAi
IiJQYXJzZXMgYSBwYXRjaCBmcm9tIGEgbGlzdCBvZiBsaW5lcy4KKworICAgIEFyZ3M6CisgICAg
ICBsaW5lczogQW4gYXJyYXkgb2Ygc3RyaW5ncywgZWFjaCByZXByZXNlbnRpbmcgYSBsaW5lIG9m
IGEgZmlsZQorICAgICAgICAgICAgIGluIGEgcGF0Y2guCisKKyAgICBSZXR1cm5zOgorICAgICAg
Tm9uZSBvbiBlcnJvciwgb3RoZXJ3aXNlIGEgbGlzdCBvZiAzLXR1cGxlczoKKworICAgICAgICAo
b2xkX2xpbmVfbnVtYmVyLCBuZXdfbGluZV9udW1iZXIsIGxpbmUpCisKKyAgICAgIEEgbGluZSBu
dW1iZXIgY2FuIGJlIDAgaWYgaXQgZG9lc24ndCBleGlzdCBpbiB0aGUgb2xkL25ldyBmaWxlLgor
ICAgICIiIgorICAgICMgRklYTUU6IGNhbiB3ZSBzaGFyZSBzb21lIG9mIHRoaXMgY29kZSB3aXRo
IHBhcnNlX3BhdGNoX3RvX2NodW5rcz8KKyAgICByZXN1bHQgPSBbXQorICAgIGluX3ByZWx1ZGUg
PSBUcnVlCisgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgIGlmIGluX3ByZWx1ZGU6Cisg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKCgwLCAwLCBsaW5lKSkKKyAgICAgICAgICAgICMgU2tp
cCBsZWFkaW5nIGxpbmVzIHVudGlsIGFmdGVyIHdlJ3ZlIHNlZW4gb25lIHN0YXJ0aW5nIHdpdGgg
JysrKycKKyAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiKysrIik6CisgICAgICAgICAg
ICAgICAgaW5fcHJlbHVkZSA9IEZhbHNlCisgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCJA
Iik6CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCgwLCAwLCBsaW5lKSkKKyAgICAgICAgICAg
IG1hdGNoID0gX0NIVU5LX1JFLm1hdGNoKGxpbmUpCisgICAgICAgICAgICBpZiBub3QgbWF0Y2g6
CisgICAgICAgICAgICAgICAgbG9nZ2luZy53YXJuKCJwYXJzZV9wYXRjaF90b19saW5lcyBtYXRj
aCBmYWlsZWQgb24gJXMiLCBsaW5lKQorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAg
ICAgICAgICBvbGRfbGluZSA9IGludChtYXRjaC5ncm91cHMoKVswXSkKKyAgICAgICAgICAgIG5l
d19saW5lID0gaW50KG1hdGNoLmdyb3VwcygpWzJdKQorICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgaWYgbGluZVswXSA9PSAiLSI6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgob2xk
X2xpbmUsIDAsIGxpbmUpKQorICAgICAgICAgICAgICAgIG9sZF9saW5lICs9IDEKKyAgICAgICAg
ICAgIGVsaWYgbGluZVswXSA9PSAiKyI6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgo
MCwgbmV3X2xpbmUsIGxpbmUpKQorICAgICAgICAgICAgICAgIG5ld19saW5lICs9IDEKKyAgICAg
ICAgICAgIGVsaWYgbGluZVswXSA9PSAiICI6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZCgob2xkX2xpbmUsIG5ld19saW5lLCBsaW5lKSkKKyAgICAgICAgICAgICAgICBvbGRfbGluZSAr
PSAxCisgICAgICAgICAgICAgICAgbmV3X2xpbmUgKz0gMQorICAgICAgICAgICAgZWxpZiBsaW5l
LnN0YXJ0c3dpdGgoX05PX05FV0xJTkVfTUVTU0FHRSk6CisgICAgICAgICAgICAgICAgY29udGlu
dWUKKyAgICAgICAgICAgIGVsc2U6ICAjIFNvbWV0aGluZyBlbHNlLCBjb3VsZCBiZSBwcm9wZXJ0
eSBjaGFuZ2VzIGV0Yy4KKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCgwLCAwLCBsaW5l
KSkKKyAgICByZXR1cm4gcmVzdWx0CisKKworZGVmIHByb2Nlc3NfcGF0Y2gobGluZXMsIGVycm9y
KToKKyAgICAiIiJEb2VzIGxpbnQgb24gYSBzaW5nbGUgcGF0Y2guCisKKyAgICBBcmdzOgorICAg
ICAgbGluZXM6IEFuIGFycmF5IG9mIHN0cmluZ3MsIGVhY2ggcmVwcmVzZW50aW5nIGEgbGluZSBv
ZiB0aGUgZmlsZSwgd2l0aCB0aGUKKyAgICAgICAgICAgICBsYXN0IGVsZW1lbnQgYmVpbmcgZW1w
dHkgaWYgdGhlIGZpbGUgaXMgdGVybWluZWQgd2l0aCBhIG5ld2xpbmUuCisgICAgICBlcnJvcjog
QSBjYWxsYWJsZSB0byB3aGljaCBlcnJvcnMgYXJlIHJlcG9ydGVkLCB3aGljaCB0YWtlcyA0IGFy
Z3VtZW50czoKKyAgICAiIiIKKyAgICBmb3IgZmlsZW5hbWUsIHBhdGNoIGluIHNwbGl0X3BhdGNo
KGxpbmVzKToKKyAgICAgICAgZmlsZV9leHRlbnNpb24gPSBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVu
YW1lKVsxXQorICAgICAgICBpZiBmaWxlX2V4dGVuc2lvbiBub3QgaW4gWycuYycsICcuY2MnLCAn
LmNwcCcsICcuaCddOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBwYXRjaF9saW5l
cyA9IHBhdGNoLnNwbGl0bGluZXMoKQorCisgICAgICAgIHBhcnNlZF9saW5lcyA9IHBhcnNlX3Bh
dGNoX3RvX2xpbmVzKHBhdGNoX2xpbmVzKQorICAgICAgICBpZiBwYXJzZWRfbGluZXMgaXMgTm9u
ZToKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgbmV3X2xpbmVfbnVtYmVycyA9IHNl
dCgpCisgICAgICAgIGZvciBvbGRfbGluZV9ubywgbmV3X2xpbmVfbm8sIGxpbmUgaW4gcGFyc2Vk
X2xpbmVzOgorICAgICAgICAgICAgaWYgb2xkX2xpbmVfbm8gPT0gMCBhbmQgbmV3X2xpbmVfbm8g
IT0gMDoKKyAgICAgICAgICAgICAgICAjIExpbmUgaXMgbmV3bHkgYWRkZWQsIHNvIGNoZWNrIGxp
bnQgZXJyb3JzIGluIGl0LgorICAgICAgICAgICAgICAgIG5ld19saW5lX251bWJlcnMuYWRkKG5l
d19saW5lX25vKQorCisgICAgICAgIHBhcnNlZF9jaHVua3MgPSBwYXJzZV9wYXRjaF90b19jaHVu
a3MocGF0Y2hfbGluZXMsIGZpbGVuYW1lKQorICAgICAgICBmb3Igb2xkX3JhbmdlLCBuZXdfcmFu
Z2UsIG9sZF9saW5lcywgbmV3X2xpbmVzIGluIHBhcnNlZF9jaHVua3M6CisgICAgICAgICAgICBk
ZWYgZXJyb3JfZm9yX3BhdGNoKGZpbGVuYW1lLCBsaW5lX251bWJlciwgY2F0ZWdvcnksIGNvbmZp
ZGVuY2UsIG1lc3NhZ2UpOgorICAgICAgICAgICAgICAgICIiIldyYXBwZXIgZnVuY3Rpb24gb2Yg
ZXJyb3IgZm9yIHBhdGNoZXMuCisKKyAgICAgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGNoZWNr
cyBpZiB0aGUgbGluZSBudW1iZXIgY29ycmVzcG9uZHMgdG8KKyAgICAgICAgICAgICAgICBsaW5l
cyB3aGljaCBhcmUgbW9kaWZpZWQvYWRkZWQuICBJZiBzbywgYWRqdXN0cyB0aGUKKyAgICAgICAg
ICAgICAgICBsaW5lIG51bWJlciB0byB0aGUgbGluZSBpbiB0aGUgb3JpZ2luYWwgZmlsZSwgdGhl
bgorICAgICAgICAgICAgICAgIGNhbGxzIGVycm9yKCkgdG8gbG9nIGZhY3RzLgorICAgICAgICAg
ICAgICAgICIiIgorICAgICAgICAgICAgICAgIGxpbmVfbnVtYmVyICs9IG5ld19yYW5nZVswXQor
ICAgICAgICAgICAgICAgIGlmIGxpbmVfbnVtYmVyIGluIG5ld19saW5lX251bWJlcnM6CisgICAg
ICAgICAgICAgICAgICAgIGVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgY2F0ZWdvcnksIGNv
bmZpZGVuY2UsIG1lc3NhZ2UpCisKKyAgICAgICAgICAgIG5ld19saW5lcy5hcHBlbmQoJycpCisg
ICAgICAgICAgICBwcm9jZXNzX2ZpbGVfZGF0YShmaWxlbmFtZSwgZmlsZV9leHRlbnNpb24sIG5l
d19saW5lcywgZXJyb3JfZm9yX3BhdGNoKQorCisKIGRlZiBwcm9jZXNzX2ZpbGUoZmlsZW5hbWUs
IHZsZXZlbCk6CiAgICAgIiIiRG9lcyBnb29nbGUtbGludCBvbiBhIHNpbmdsZSBmaWxlLgogCkBA
IC0yNjcyLDkgKzI5NjIsMTEgQEAgZGVmIHByb2Nlc3NfZmlsZShmaWxlbmFtZSwgdmxldmVsKToK
ICAgICAjIE5vdGUsIGlmIG5vIGRvdCBpcyBmb3VuZCwgdGhpcyB3aWxsIGdpdmUgdGhlIGVudGly
ZSBmaWxlbmFtZSBhcyB0aGUgZXh0LgogICAgIGZpbGVfZXh0ZW5zaW9uID0gZmlsZW5hbWVbZmls
ZW5hbWUucmZpbmQoJy4nKSArIDE6XQogCisgICAgaWYgX2NwcGxpbnRfc3RhdGUucGF0Y2hfbW9k
ZToKKyAgICAgICAgcHJvY2Vzc19wYXRjaChsaW5lcywgZXJyb3IpCiAgICAgIyBXaGVuIHJlYWRp
bmcgZnJvbSBzdGRpbiwgdGhlIGV4dGVuc2lvbiBpcyB1bmtub3duLCBzbyBubyBjcHBsaW50IHRl
c3RzCiAgICAgIyBzaG91bGQgcmVseSBvbiB0aGUgZXh0ZW5zaW9uLgotICAgIGlmIChmaWxlbmFt
ZSAhPSAnLScgYW5kIGZpbGVfZXh0ZW5zaW9uICE9ICdjYycgYW5kIGZpbGVfZXh0ZW5zaW9uICE9
ICdoJworICAgIGVsaWYgKGZpbGVuYW1lICE9ICctJyBhbmQgZmlsZV9leHRlbnNpb24gIT0gJ2Nj
JyBhbmQgZmlsZV9leHRlbnNpb24gIT0gJ2gnCiAgICAgICAgIGFuZCBmaWxlX2V4dGVuc2lvbiAh
PSAnY3BwJyk6CiAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ0lnbm9yaW5nICVzOyBub3QgYSAu
Y2Mgb3IgLmggZmlsZVxuJyAlIGZpbGVuYW1lKQogICAgIGVsc2U6CkBAIC0yNzI0LDEzICszMDE2
LDE0IEBAIGRlZiBwYXJzZV9hcmd1bWVudHMoYXJncyk6CiAgICAgIiIiCiAgICAgdHJ5OgogICAg
ICAgICAob3B0cywgZmlsZW5hbWVzKSA9IGdldG9wdC5nZXRvcHQoYXJncywgJycsIFsnaGVscCcs
ICdvdXRwdXQ9JywgJ3ZlcmJvc2U9JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJ2ZpbHRlcj0nXSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbHRlcj0nLCAncGF0Y2gnXSkKICAgICBl
eGNlcHQgZ2V0b3B0LkdldG9wdEVycm9yOgogICAgICAgICBwcmludF91c2FnZSgnSW52YWxpZCBh
cmd1bWVudHMuJykKIAogICAgIHZlcmJvc2l0eSA9IF92ZXJib3NlX2xldmVsKCkKICAgICBvdXRw
dXRfZm9ybWF0ID0gX291dHB1dF9mb3JtYXQoKQogICAgIGZpbHRlcnMgPSAnJworICAgIHBhdGNo
X21vZGUgPSBGYWxzZQogCiAgICAgZm9yIChvcHQsIHZhbCkgaW4gb3B0czoKICAgICAgICAgaWYg
b3B0ID09ICctLWhlbHAnOgpAQCAtMjc0NSw2ICszMDM4LDEwIEBAIGRlZiBwYXJzZV9hcmd1bWVu
dHMoYXJncyk6CiAgICAgICAgICAgICBmaWx0ZXJzID0gdmFsCiAgICAgICAgICAgICBpZiBub3Qg
ZmlsdGVyczoKICAgICAgICAgICAgICAgICBwcmludF9jYXRlZ29yaWVzKCkKKyAgICAgICAgZWxp
ZiBvcHQgPT0gJy0tcGF0Y2gnOgorICAgICAgICAgICAgcGF0Y2hfbW9kZSA9IFRydWUKKyAgICAg
ICAgICAgICMgQ2h1bmtzIGluIGEgcGF0Y2ggbWF5IGhhdmUgaW5jb21wbGV0ZSBjbGFzc2VzLgor
ICAgICAgICAgICAgX0RFRkFVTFRfRklMVEVSUy5hcHBlbmQoJy1idWlsZC9jbGFzcycpCiAKICAg
ICBpZiBub3QgZmlsZW5hbWVzOgogICAgICAgICBwcmludF91c2FnZSgnTm8gZmlsZXMgd2VyZSBz
cGVjaWZpZWQuJykKQEAgLTI3NTIsNiArMzA0OSw3IEBAIGRlZiBwYXJzZV9hcmd1bWVudHMoYXJn
cyk6CiAgICAgX3NldF9vdXRwdXRfZm9ybWF0KG91dHB1dF9mb3JtYXQpCiAgICAgX3NldF92ZXJi
b3NlX2xldmVsKHZlcmJvc2l0eSkKICAgICBfc2V0X2ZpbHRlcnMoZmlsdGVycykKKyAgICBfc2V0
X3BhdGNoX21vZGUocGF0Y2hfbW9kZSkKIAogICAgIHJldHVybiBmaWxlbmFtZXMKIApkaWZmIC0t
Z2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9jcHBsaW50X3VuaXR0ZXN0LnB5IGIvV2ViS2l0VG9v
bHMvU2NyaXB0cy9jcHBsaW50X3VuaXR0ZXN0LnB5Cm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAx
MDA3NTUKaW5kZXggMTA2MzJhNy4uNmQyMzNkZQotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL2Nw
cGxpbnRfdW5pdHRlc3QucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9jcHBsaW50X3VuaXR0
ZXN0LnB5CkBAIC0yOTIzLDYgKzI5MjMsMTA1IEBAIGNsYXNzIFdlYktpdFN0eWxlVGVzdChDcHBs
aW50VGVzdEJhc2UpOgogICAgICAgICBwYXNzCiAKIAorY2xhc3MgUGF0Y2hUZXN0KENwcGxpbnRU
ZXN0QmFzZSk6CisgICAgX0ZVTExfUEFUQ0ggPSAnJydkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvU3R5bGVGbGV4aWJsZUJveERhdGEuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvU3R5bGVGbGV4aWJsZUJveERhdGEuY3BwCitpbmRleCA3YzAwMDgwLi5jMzAyZDIwIDEw
MDY0NAorLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVGbGV4aWJsZUJveERhdGEu
Y3BwCisrKysgYi9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZUZsZXhpYmxlQm94RGF0YS5j
cHAKK0BAIC00NCw3ICs0Myw2IEBAIFN0eWxlRmxleGlibGVCb3hEYXRhOjpTdHlsZUZsZXhpYmxl
Qm94RGF0YShjb25zdCBTdHlsZUZsZXhpYmxlQm94RGF0YSYgbykKKyAgICAgLCBvcmRpbmFsX2dy
b3VwKG8ub3JkaW5hbF9ncm91cCkKKyAgICAgLCBhbGlnbihvLmFsaWduKQorICAgICAsIHBhY2so
by5wYWNrKQorLSAgICAsIG9yaWVudChvLm9yaWVudCkKKyAgICAgLCBsaW5lcyhvLmxpbmVzKQor
IHsKKyB9CitkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVGbGV4aWJs
ZUJveERhdGEuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlRmxleGlibGVCb3hEYXRh
LmgKK2luZGV4IGY1ZDVlNzQuLjNiNmFhOTIgMTAwNjQ0CistLS0gYS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9TdHlsZUZsZXhpYmxlQm94RGF0YS5oCisrKysgYi9XZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9TdHlsZUZsZXhpYmxlQm94RGF0YS5oCitAQCAtNDcsNyArNDcsNiBAQCBwdWJsaWM6CisK
KyAgICAgdW5zaWduZWQgYWxpZ24gOiAzOyAvLyBFQm94QWxpZ25tZW50CisgICAgIHVuc2lnbmVk
IHBhY2s6IDM7IC8vIEVCb3hBbGlnbm1lbnQKKy0gICAgdW5zaWduZWQgb3JpZW50OiAxOyAvLyBF
Qm94T3JpZW50CisgICAgIHVuc2lnbmVkIGxpbmVzIDogMTsgLy8gRUJveExpbmVzCisKKyBwcml2
YXRlOgorJycnLnNwbGl0bGluZXMoKQorCisgICAgX09ORV9GSUxFX1BBVENIID0gJycnZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZUluaGVyaXRlZERhdGEuY3Bw
IGIvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVSYXJlSW5oZXJpdGVkRGF0YS5jcHAKK2lu
ZGV4IGNlMjE3MjAuLjMyNDkyOWUgMTAwNjQ0CistLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9TdHlsZVJhcmVJbmhlcml0ZWREYXRhLmNwcAorKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvU3R5bGVSYXJlSW5oZXJpdGVkRGF0YS5jcHAKK0BAIC0zOSw2ICszOSw3IEBAIFN0eWxlUmFy
ZUluaGVyaXRlZERhdGE6OlN0eWxlUmFyZUluaGVyaXRlZERhdGEoKQorICAgICAsIHRleHRTaXpl
QWRqdXN0KFJlbmRlclN0eWxlOjppbml0aWFsVGV4dFNpemVBZGp1c3QoKSkKKyAgICAgLCByZXNp
emUoUmVuZGVyU3R5bGU6OmluaXRpYWxSZXNpemUoKSkKKyAgICAgLCB1c2VyU2VsZWN0KFJlbmRl
clN0eWxlOjppbml0aWFsVXNlclNlbGVjdCgpKQorKyAgICAsIGJveE9yaWVudChSZW5kZXJTdHls
ZTo6aW5pdGlhbEJveE9yaWVudCgpKQorIHsKKyB9CisgCitAQCAtNTgsNiArNTksNyBAQCBTdHls
ZVJhcmVJbmhlcml0ZWREYXRhOjpTdHlsZVJhcmVJbmhlcml0ZWREYXRhKGNvbnN0IFN0eWxlUmFy
ZUluaGVyaXRlZERhdGEmIG8pCisgICAgICwgdGV4dFNpemVBZGp1c3Qoby50ZXh0U2l6ZUFkanVz
dCkKKyAgICAgLCByZXNpemUoby5yZXNpemUpCisgICAgICwgdXNlclNlbGVjdChvLnVzZXJTZWxl
Y3QpCisrICAgICwgYm94T3JpZW50KG8uYm94T3JpZW50KQorIHsKKyB9CisgCitAQCAtODEsNyAr
ODMsOCBAQCBib29sIFN0eWxlUmFyZUluaGVyaXRlZERhdGE6Om9wZXJhdG9yPT0oY29uc3QgU3R5
bGVSYXJlSW5oZXJpdGVkRGF0YSYgbykgY29uc3QKKyAgICAgICAgICYmIGtodG1sTGluZUJyZWFr
ID09IG8ua2h0bWxMaW5lQnJlYWsKKyAgICAgICAgICYmIHRleHRTaXplQWRqdXN0ID09IG8udGV4
dFNpemVBZGp1c3QKKyAgICAgICAgICYmIHJlc2l6ZSA9PSBvLnJlc2l6ZQorLSAgICAgICAgJiYg
dXNlclNlbGVjdCA9PSBvLnVzZXJTZWxlY3Q7CisrICAgICAgICAmJiB1c2VyU2VsZWN0ID09IG8u
dXNlclNlbGVjdAorKyAgICAgICAgJiYgYm94T3JpZW50ID09IG8uYm94T3JpZW50OworIH0KKyAK
KyBib29sIFN0eWxlUmFyZUluaGVyaXRlZERhdGE6OnNoYWRvd0RhdGFFcXVpdmFsZW50KGNvbnN0
IFN0eWxlUmFyZUluaGVyaXRlZERhdGEmIG8pIGNvbnN0CisnJycuc3BsaXRsaW5lcygpCisKKyAg
ICBkZWYgdGVzdF9zcGxpdF9wYXRjaChzZWxmKToKKyAgICAgICAgcGF0Y2hlcyA9IGNwcGxpbnQu
c3BsaXRfcGF0Y2goc2VsZi5fRlVMTF9QQVRDSCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMo
MiwgbGVuKHBhdGNoZXMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscygnV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvU3R5bGVGbGV4aWJsZUJveERhdGEuY3BwJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGF0Y2hlc1swXVswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJ1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlRmxleGlibGVCb3hEYXRhLmgnLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICBwYXRjaGVzWzFdWzBdKQorCisgICAgZGVmIHRlc3RfcGFyc2VfcGF0Y2hf
dG9fY2h1bmtzKHNlbGYpOgorICAgICAgICBjaHVua3MgPSBjcHBsaW50LnBhcnNlX3BhdGNoX3Rv
X2NodW5rcyhzZWxmLl9PTkVfRklMRV9QQVRDSCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMo
MywgbGVuKGNodW5rcykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCgzOEwsIDQ0TCksIGNo
dW5rc1swXVswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKDM4TCwgNDVMKSwgY2h1bmtz
WzBdWzFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyg2LCBsZW4oY2h1bmtzWzBdWzJdKSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoNywgbGVuKGNodW5rc1swXVszXSkpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWxzKCg1N0wsIDYzTCksIGNodW5rc1sxXVswXSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbHMoKDU4TCwgNjVMKSwgY2h1bmtzWzFdWzFdKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFscyg2LCBsZW4oY2h1bmtzWzFdWzJdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bHMoNywgbGVuKGNodW5rc1sxXVszXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCg4MEws
IDg3TCksIGNodW5rc1syXVswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKDgyTCwgOTBM
KSwgY2h1bmtzWzJdWzFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyg3LCBsZW4oY2h1bmtz
WzJdWzJdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoOCwgbGVuKGNodW5rc1syXVszXSkp
CisKKyAgICBkZWYgdGVzdF9wYXJzZV9wYXRjaF90b19saW5lcyhzZWxmKToKKyAgICAgICAgbGlu
ZXMgPSBjcHBsaW50LnBhcnNlX3BhdGNoX3RvX2xpbmVzKHNlbGYuX09ORV9GSUxFX1BBVENIKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFscygzMCwgbGVuKGxpbmVzKSkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbHMoKDAsIDApLCBsaW5lc1swXVswOjJdKQorICAgICAgICAjIFRoZSBmaXJzdCBs
aW5lIG9mIHRoZSBmaXJzdCBjaHVuay4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKDM5LCAz
OSksIGxpbmVzWzVdWzA6Ml0pCisgICAgICAgICMgVGhpcyBsaW5lIGRpZCBub3QgZXhpc3QgYmVm
b3JlIHRoZSBwYXRjaC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoKDAsIDQyKSwgbGluZXNb
OF1bMDoyXSkKKyAgICAgICAgIyBMaW5lcyBhcm91bmQgbW9kaWZpZWQgbGluZXMuCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWxzKCg4MywgODUpLCBsaW5lc1syM11bMDoyXSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbHMoKDg0LCAwKSwgbGluZXNbMjRdWzA6Ml0pCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKCgwLCA4NiksIGxpbmVzWzI1XVswOjJdKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFscygoMCwgODcpLCBsaW5lc1syNl1bMDoyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMo
KDg1LCA4OCksIGxpbmVzWzI3XVswOjJdKQorCisKIGRlZiB0ZWFyRG93bigpOgogICAgICIiIkEg
Z2xvYmFsIGNoZWNrIHRvIG1ha2Ugc3VyZSBhbGwgZXJyb3ItY2F0ZWdvcmllcyBoYXZlIGJlZW4g
dGVzdGVkLg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33148</attachid>
            <date>2009-07-20 23:38:14 -0700</date>
            <delta_ts>2009-07-21 00:56:54 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>bug-27291-20090721153813.patch</filename>
            <type>text/plain</type>
            <size>8597</size>
            <attacher name="Shinichiro Hamaji">hamaji</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBkZDZhYWU0Li43MzMwOWEzIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMDktMDct
MjAgIFNoaW5pY2hpcm8gSGFtYWppICA8aGFtYWppQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3VwcG9ydCBsaW50IGZvciBwYXRj
aGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzI5
MQorCisgICAgICAgIEFkZCBydW4td2Via2l0LWxpbnQgc2NyaXB0LCB3aGljaCBsaW50cyByZWNl
bnQgY2hhbmdlcyBpbiBsb2NhbAorICAgICAgICByZXBvc2l0b3J5LiAgQWxzbywgbW9kaWZpZWQg
Y3BwbGludC5weSBzbyB0aGF0IHRoZSBlcnJvciBjb3VudCBjYW4KKyAgICAgICAgYmUgb2J0YWlu
ZWQgZnJvbSBvdXRzaWRlIG1vZHVsZSwgY2hhbmdlZCB0aGUgaW50ZXJmYWNlIG9mCisgICAgICAg
IHByb2Nlc3NfZmlsZSgpLCBhbmQgbW92ZWQgZXJyb3IgY2hlY2sgb2YgYXJndW1lbnRzLgorCisg
ICAgICAgICogU2NyaXB0cy9tb2R1bGVzL2NwcGxpbnQucHk6CisgICAgICAgICogU2NyaXB0cy9y
dW4td2Via2l0LWxpbnQ6IEFkZGVkLgorCiAyMDA5LTA3LTIwICBTaGluaWNoaXJvIEhhbWFqaSAg
PGhhbWFqaUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvY3BwbGludC5weSBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9jcHBsaW50LnB5Cm9sZCBtb2RlIDEwMDY0NApu
ZXcgbW9kZSAxMDA3NTUKaW5kZXggODk5NzQ0NC4uYzhiOThjMwotLS0gYS9XZWJLaXRUb29scy9T
Y3JpcHRzL21vZHVsZXMvY3BwbGludC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL21vZHVs
ZXMvY3BwbGludC5weQpAQCAtNDQ0LDYgKzQ0NCwxMSBAQCBkZWYgX3NldF9maWx0ZXJzKGZpbHRl
cnMpOgogICAgIF9jcHBsaW50X3N0YXRlLnNldF9maWx0ZXJzKGZpbHRlcnMpCiAKIAorZGVmIGVy
cm9yX2NvdW50KCk6CisgICAgIiIiUmV0dXJucyB0aGUgZ2xvYmFsIGNvdW50IG9mIHJlcG9ydGVk
IGVycm9ycy4iIiIKKyAgICByZXR1cm4gX2NwcGxpbnRfc3RhdGUuZXJyb3JfY291bnQKKworCiBj
bGFzcyBfRnVuY3Rpb25TdGF0ZShvYmplY3QpOgogICAgICIiIlRyYWNrcyBjdXJyZW50IGZ1bmN0
aW9uIG5hbWUgYW5kIHRoZSBudW1iZXIgb2YgbGluZXMgaW4gaXRzIGJvZHkuIiIiCiAKQEAgLTYw
Nyw3ICs2MTIsNyBAQCBkZWYgX3Nob3VsZF9wcmludF9lcnJvcihjYXRlZ29yeSwgY29uZmlkZW5j
ZSk6CiAgICAgICAgICAgICBpZiBjYXRlZ29yeS5zdGFydHN3aXRoKG9uZV9maWx0ZXJbMTpdKToK
ICAgICAgICAgICAgICAgICBpc19maWx0ZXJlZCA9IEZhbHNlCiAgICAgICAgIGVsc2U6Ci0gICAg
ICAgICAgICBhc3NlcnQgRmFsc2UgICMgc2hvdWxkIGhhdmUgYmVlbiBjaGVja2VkIGZvciBpbiBT
ZXRGaWx0ZXIuCisgICAgICAgICAgICBhc3NlcnQgRmFsc2UgICMgc2hvdWxkIGhhdmUgYmVlbiBj
aGVja2VkIGZvciBpbiBzZXRfZmlsdGVycy4KICAgICBpZiBpc19maWx0ZXJlZDoKICAgICAgICAg
cmV0dXJuIEZhbHNlCiAKQEAgLTI2NjUsMTggKzI2NzAsMTMgQEAgZGVmIHByb2Nlc3NfZmlsZV9k
YXRhKGZpbGVuYW1lLCBmaWxlX2V4dGVuc2lvbiwgbGluZXMsIGVycm9yKToKICAgICBjaGVja19m
b3JfbmV3X2xpbmVfYXRfZW9mKGZpbGVuYW1lLCBsaW5lcywgZXJyb3IpCiAKIAotZGVmIHByb2Nl
c3NfZmlsZShmaWxlbmFtZSwgdmxldmVsKToKK2RlZiBwcm9jZXNzX2ZpbGUoZmlsZW5hbWUsIGVy
cm9yPWVycm9yKToKICAgICAiIiJEb2VzIGdvb2dsZS1saW50IG9uIGEgc2luZ2xlIGZpbGUuCiAK
ICAgICBBcmdzOgogICAgICAgZmlsZW5hbWU6IFRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIHBhcnNl
LgotCi0gICAgICB2bGV2ZWw6IFRoZSBsZXZlbCBvZiBlcnJvcnMgdG8gcmVwb3J0LiAgRXZlcnkg
ZXJyb3Igb2YgY29uZmlkZW5jZQotICAgICAgPj0gdmVyYm9zZV9sZXZlbCB3aWxsIGJlIHJlcG9y
dGVkLiAgMCBpcyBhIGdvb2QgZGVmYXVsdC4KKyAgICAgIGVycm9yOiBUaGUgZnVuY3Rpb24gdG8g
Y2FsbCB3aXRoIGFueSBlcnJvcnMgZm91bmQuCiAgICAgIiIiCi0KLSAgICBfc2V0X3ZlcmJvc2Vf
bGV2ZWwodmxldmVsKQotCiAgICAgdHJ5OgogICAgICAgICAjIFN1cHBvcnQgdGhlIFVOSVggY29u
dmVudGlvbiBvZiB1c2luZyAiLSIgZm9yIHN0ZGluLiAgTm90ZSB0aGF0CiAgICAgICAgICMgd2Ug
YXJlIG5vdCBvcGVuaW5nIHRoZSBmaWxlIHdpdGggdW5pdmVyc2FsIG5ld2xpbmUgc3VwcG9ydApA
QCAtMjc4NSw5ICsyNzg1LDYgQEAgZGVmIHBhcnNlX2FyZ3VtZW50cyhhcmdzKToKICAgICAgICAg
ICAgIGlmIG5vdCBmaWx0ZXJzOgogICAgICAgICAgICAgICAgIHByaW50X2NhdGVnb3JpZXMoKQog
Ci0gICAgaWYgbm90IGZpbGVuYW1lczoKLSAgICAgICAgcHJpbnRfdXNhZ2UoJ05vIGZpbGVzIHdl
cmUgc3BlY2lmaWVkLicpCi0KICAgICBfc2V0X291dHB1dF9mb3JtYXQob3V0cHV0X2Zvcm1hdCkK
ICAgICBfc2V0X3ZlcmJvc2VfbGV2ZWwodmVyYm9zaXR5KQogICAgIF9zZXRfZmlsdGVycyhmaWx0
ZXJzKQpAQCAtMjg0Myw2ICsyODQwLDggQEAgdGhhdCB5b3Ugbm90aWNlIHRoYXQgaXQgZmxhZ3Mg
aW5jb3JyZWN0bHkuCiAgICAgdXNlX3dlYmtpdF9zdHlsZXMoKQogCiAgICAgZmlsZW5hbWVzID0g
cGFyc2VfYXJndW1lbnRzKHN5cy5hcmd2WzE6XSkKKyAgICBpZiBub3QgZmlsZW5hbWVzOgorICAg
ICAgICBwcmludF91c2FnZSgnTm8gZmlsZXMgd2VyZSBzcGVjaWZpZWQuJykKIAogICAgICMgQ2hh
bmdlIHN0ZGVyciB0byB3cml0ZSB3aXRoIHJlcGxhY2VtZW50IGNoYXJhY3RlcnMgc28gd2UgZG9u
J3QgZGllCiAgICAgIyBpZiB3ZSB0cnkgdG8gcHJpbnQgc29tZXRoaW5nIGNvbnRhaW5pbmcgbm9u
LUFTQ0lJIGNoYXJhY3RlcnMuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3J1bi13
ZWJraXQtbGludCBiL1dlYktpdFRvb2xzL1NjcmlwdHMvcnVuLXdlYmtpdC1saW50Cm5ldyBmaWxl
IG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFmNWMzNzEKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL3J1bi13ZWJraXQtbGludApAQCAtMCwwICsxLDEzNCBAQAorIyEv
dXNyL2Jpbi9weXRob24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoK
KyMKKyMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyMgZGlzdHJpYnV0aW9uLgorIyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
IyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJTY3JpcHQgdG8gcnVuIHRoZSBs
aW50ZXIgZm9yIHNvdXJjZSBjb2RlIG9mIFdlYktpdC4iIiIKKworaW1wb3J0IG9zCitpbXBvcnQg
b3MucGF0aAoraW1wb3J0IHN5cworCitpbXBvcnQgbW9kdWxlcy5jcHBsaW50IGFzIGNwcGxpbnQK
K2Zyb20gbW9kdWxlcy5kaWZmX3BhcnNlciBpbXBvcnQgRGlmZlBhcnNlcgorZnJvbSBtb2R1bGVz
LnNjbSBpbXBvcnQgZGV0ZWN0X3NjbV9zeXN0ZW0KKworCisjIE92ZXJyaWRlIHRoZSB1c2FnZSBv
ZiB0aGUgbGludCB0b29sLgorY3BwbGludC5fVVNBR0UgPSAiIiIKK1N5bnRheDogd2Via2l0LXJ1
bi1saW50IFstLXZlcmJvc2U9I10gWy0tb3V0cHV0PXZzN10gWy0tZmlsdGVyPS14LCt5LC4uLl0K
KyAgICAgICAgW0NPTU1JVElTSF0gLi4uCisKKyAgVGhlIHN0eWxlIGd1aWRlbGluZXMgdGhpcyB0
cmllcyB0byBmb2xsb3cgYXJlIHRob3NlIGluCisgICAgaHR0cDovL3dlYmtpdC5vcmcvY29kaW5n
L2NvZGluZy1zdHlsZS5odG1sCisKKyAgRXZlcnkgcHJvYmxlbSBpcyBnaXZlbiBhIGNvbmZpZGVu
Y2Ugc2NvcmUgZnJvbSAxLTUsIHdpdGggNSBtZWFuaW5nIHdlIGFyZQorICBjZXJ0YWluIG9mIHRo
ZSBwcm9ibGVtLCBhbmQgMSBtZWFuaW5nIGl0IGNvdWxkIGJlIGEgbGVnaXRpbWF0ZSBjb25zdHJ1
Y3QuCisgIFRoaXMgd2lsbCBtaXNzIHNvbWUgZXJyb3JzLCBhbmQgaXMgbm90IGEgc3Vic3RpdHV0
ZSBmb3IgYSBjb2RlIHJldmlldy4KKworICBUbyBwcmV2ZW50IHNwZWNpZmljIGxpbmVzIGZyb20g
YmVpbmcgbGludGVkLCBhZGQgYSAnLy8gTk9MSU5UJyBjb21tZW50IHRvIHRoZQorICBlbmQgb2Yg
dGhlIGxpbmUuCisKKyAgSWYgeW91IGRvbid0IHNwZWNpZnkgQ09NTUlUSVNILCB0aGUgY3VycmVu
dCBjaGFuZ2Ugb24geW91ciByZXBvc2l0b3J5IHdpbGwKKyAgYmUgbGludGVkLiAgT3RoZXJ3aXNl
LCB0aGUgc3BlY2lmaWVkIGNvbW1pdHMgd2lsbCBiZSBsaW50ZWQgYmFzZWQgb24geW91cgorICBs
b2NhbCBmaWxlcy4gIE5vdGUgdGhhdCBpZiB5b3Ugc3BlY2lmeSBvbGQgY29tbWl0cyB3aGljaCBh
cmUgbW9kaWZpZWQgaW4KKyAgbmV3ZXIgcGF0Y2hlcywgdGhlIGxpbmUgbnVtYmVyIG9mIHRoZSBs
aW50IHJlc3VsdHMgbWF5IGJlIHdyb25nLgorICBMaW50ZWQgZXh0ZW5zaW9ucyBhcmUgLmNjLCAu
Y3BwLCBhbmQgLmguICBPdGhlciBmaWxlIHR5cGVzIHdpbGwgYmUgaWdub3JlZC4KKworICBGbGFn
czoKKworICAgIG91dHB1dD12czcKKyAgICAgIEJ5IGRlZmF1bHQsIHRoZSBvdXRwdXQgaXMgZm9y
bWF0dGVkIHRvIGVhc2UgZW1hY3MgcGFyc2luZy4gIFZpc3VhbCBTdHVkaW8KKyAgICAgIGNvbXBh
dGlibGUgb3V0cHV0ICh2czcpIG1heSBhbHNvIGJlIHVzZWQuICBPdGhlciBmb3JtYXRzIGFyZSB1
bnN1cHBvcnRlZC4KKworICAgIHZlcmJvc2U9IworICAgICAgU3BlY2lmeSBhIG51bWJlciAwLTUg
dG8gcmVzdHJpY3QgZXJyb3JzIHRvIGNlcnRhaW4gdmVyYm9zaXR5IGxldmVscy4KKworICAgIGZp
bHRlcj0teCwreSwuLi4KKyAgICAgIFNwZWNpZnkgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBj
YXRlZ29yeS1maWx0ZXJzIHRvIGFwcGx5OiBvbmx5CisgICAgICBlcnJvciBtZXNzYWdlcyB3aG9z
ZSBjYXRlZ29yeSBuYW1lcyBwYXNzIHRoZSBmaWx0ZXJzIHdpbGwgYmUgcHJpbnRlZC4KKyAgICAg
IChDYXRlZ29yeSBuYW1lcyBhcmUgcHJpbnRlZCB3aXRoIHRoZSBtZXNzYWdlIGFuZCBsb29rIGxp
a2UKKyAgICAgICJbd2hpdGVzcGFjZS9pbmRlbnRdIi4pICBGaWx0ZXJzIGFyZSBldmFsdWF0ZWQg
bGVmdCB0byByaWdodC4KKyAgICAgICItRk9PIiBhbmQgIkZPTyIgbWVhbnMgImRvIG5vdCBwcmlu
dCBjYXRlZ29yaWVzIHRoYXQgc3RhcnQgd2l0aCBGT08iLgorICAgICAgIitGT08iIG1lYW5zICJk
byBwcmludCBjYXRlZ29yaWVzIHRoYXQgc3RhcnQgd2l0aCBGT08iLgorCisgICAgICBFeGFtcGxl
czogLS1maWx0ZXI9LXdoaXRlc3BhY2UsK3doaXRlc3BhY2UvYnJhY2VzCisgICAgICAgICAgICAg
ICAgLS1maWx0ZXI9d2hpdGVzcGFjZSxydW50aW1lL3ByaW50ZiwrcnVudGltZS9wcmludGZfZm9y
bWF0CisgICAgICAgICAgICAgICAgLS1maWx0ZXI9LSwrYnVpbGQvaW5jbHVkZV93aGF0X3lvdV91
c2UKKworICAgICAgVG8gc2VlIGEgbGlzdCBvZiBhbGwgdGhlIGNhdGVnb3JpZXMgdXNlZCBpbiBj
cHBsaW50LCBwYXNzIG5vIGFyZzoKKyAgICAgICAgIC0tZmlsdGVyPQorIiIiCisKKworZGVmIHBy
b2Nlc3NfcGF0Y2gocGF0Y2hfc3RyaW5nKToKKyAgICAiIiJEb2VzIGxpbnQgb24gYSBzaW5nbGUg
cGF0Y2guCisKKyAgICBBcmdzOgorICAgICAgcGF0Y2hfc3RyaW5nOiBBIHN0cmluZyBvZiBhIHBh
dGNoLgorICAgICIiIgorICAgIHBhdGNoID0gRGlmZlBhcnNlcihwYXRjaF9zdHJpbmcuc3BsaXRs
aW5lcygpKQorICAgIGZvciBmaWxlbmFtZSwgZGlmZiBpbiBwYXRjaC5maWxlcy5pdGVyaXRlbXMo
KToKKyAgICAgICAgZmlsZV9leHRlbnNpb24gPSBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKVsx
XQorCisgICAgICAgIGlmIGZpbGVfZXh0ZW5zaW9uIGluIFsnLmNjJywgJy5jcHAnLCAnLmgnXToK
KyAgICAgICAgICAgIGxpbmVfbnVtYmVycyA9IHNldCgpCisgICAgICAgICAgICBmb3IgbGluZSBp
biBkaWZmLmxpbmVzOgorICAgICAgICAgICAgICAgIGxpbmVfbnVtYmVycy5hZGQobGluZVsxXSkK
KworICAgICAgICAgICAgZGVmIGVycm9yX2Zvcl9wYXRjaChmaWxlbmFtZSwgbGluZV9udW1iZXIs
IGNhdGVnb3J5LCBjb25maWRlbmNlLCBtZXNzYWdlKToKKyAgICAgICAgICAgICAgICAiIiJXcmFw
cGVyIGZ1bmN0aW9uIG9mIGNwcGxpbnQuZXJyb3IgZm9yIHBhdGNoZXMuCisKKyAgICAgICAgICAg
ICAgICBUaGlzIGZ1bmN0aW9uIG91dHB1dHMgZXJyb3JzIG9ubHkgaWYgdGhlIGxpbmUgbnVtYmVy
CisgICAgICAgICAgICAgICAgY29ycmVzcG9uZHMgdG8gbGluZXMgd2hpY2ggYXJlIG1vZGlmaWVk
IG9yIGFkZGVkLgorICAgICAgICAgICAgICAgICIiIgorICAgICAgICAgICAgICAgIGlmIGxpbmVf
bnVtYmVyIGluIGxpbmVfbnVtYmVyczoKKyAgICAgICAgICAgICAgICAgICAgY3BwbGludC5lcnJv
cihmaWxlbmFtZSwgbGluZV9udW1iZXIsIGNhdGVnb3J5LCBjb25maWRlbmNlLCBtZXNzYWdlKQor
CisgICAgICAgICAgICBjcHBsaW50LnByb2Nlc3NfZmlsZShmaWxlbmFtZSwgZXJyb3I9ZXJyb3Jf
Zm9yX3BhdGNoKQorCisKK2RlZiBtYWluKCk6CisgICAgY3BwbGludC51c2Vfd2Via2l0X3N0eWxl
cygpCisgICAgYXJncyA9IGNwcGxpbnQucGFyc2VfYXJndW1lbnRzKHN5cy5hcmd2WzE6XSkKKwor
ICAgIGN3ZCA9IG9zLnBhdGguYWJzcGF0aCgnLicpCisgICAgc2NtID0gZGV0ZWN0X3NjbV9zeXN0
ZW0oY3dkKQorCisgICAgaWYgYXJnczoKKyAgICAgICAgZm9yIGFyZyBpbiBhcmdzOgorICAgICAg
ICAgICAgcHJvY2Vzc19wYXRjaChzY20uY3JlYXRlX3BhdGNoX2Zyb21fbG9jYWxfY29tbWl0KGFy
ZykpCisgICAgZWxzZToKKyAgICAgICAgcHJvY2Vzc19wYXRjaChzY20uY3JlYXRlX3BhdGNoKCkp
CisKKyAgICBzeXMuc3RkZXJyLndyaXRlKCdUb3RhbCBlcnJvcnMgZm91bmQ6ICVkXG4nICUgY3Bw
bGludC5lcnJvcl9jb3VudCgpKQorICAgIHN5cy5leGl0KGNwcGxpbnQuZXJyb3JfY291bnQoKSA+
IDApCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBtYWluKCk=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33158</attachid>
            <date>2009-07-21 01:53:11 -0700</date>
            <delta_ts>2009-07-21 03:18:58 -0700</delta_ts>
            <desc>Patch v3</desc>
            <filename>bug-27291-20090721175309.patch</filename>
            <type>text/plain</type>
            <size>7715</size>
            <attacher name="Shinichiro Hamaji">hamaji</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA2MWQ4NzY1Li4wM2NkZTE3IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0yLDYgKzIsMjAgQEAKIAogICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAorICAgICAgICBTdXBwb3J0IGxpbnQgZm9y
IHBhdGNoZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTI3MjkxCisKKyAgICAgICAgQWRkIHJ1bi13ZWJraXQtbGludCBzY3JpcHQsIHdoaWNoIGxpbnRz
IHJlY2VudCBjaGFuZ2VzIGluIGxvY2FsCisgICAgICAgIHJlcG9zaXRvcnkuICBBbHNvLCBtb2Rp
ZmllZCBjcHBsaW50LnB5IHNvIHRoYXQgd2UgZG9uJ3QgbmVlZCB0bworICAgICAgICBzcGVjaWZ5
IHZlcmJvc2UgbGV2ZWwgZm9yIHByb2Nlc3NfZmlsZSgpLgorCisgICAgICAgICogU2NyaXB0cy9t
b2R1bGVzL2NwcGxpbnQucHk6CisgICAgICAgICogU2NyaXB0cy9ydW4td2Via2l0LWxpbnQ6IEFk
ZGVkLgorCisyMDA5LTA3LTIxICBTaGluaWNoaXJvIEhhbWFqaSAgPGhhbWFqaUBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKICAgICAgICAgY3Bw
bGludCdzIHBhcnNlX2FyZ3VtZW50IHNob3VsZCBub3QgZXhpdCBldmVuIGlmIG5vIGZpbGVzIGFy
ZSBzcGVjaWZpZWQKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTI3NDg5CiAKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9jcHBs
aW50LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2NwcGxpbnQucHkKaW5kZXggMTZl
YjQ3Yy4uMDIyNWZjYyAxMDA3NTUKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2Nw
cGxpbnQucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2NwcGxpbnQucHkKQEAg
LTU3LDYgKzU3LDkgQEAgaW1wb3J0IHN5cwogaW1wb3J0IHVuaWNvZGVkYXRhCiAKIAorIyBGSVhN
RTogT25jZSBydW4td2Via2l0LWxpbnQgc2NyaXB0IGJlY29tZXMgcmVhZHksIHdlIGRvbid0IG5l
ZWQgdG8KKyMgICAgICAgIHN1cHBvcnQgc3RhbmRhbG9uZSBleGVjdXRpb24gZm9yIHRoaXMgbW9k
dWxlLgorIyAgICAgICAgU28sIHdlIHNob3VsZCByZW1vdmUgX1VTQUdFIGFuZCBtYWluKCkgZXZl
bnR1YWxseS4KIF9VU0FHRSA9ICIiIgogU3ludGF4OiBjcHBsaW50LnB5IFstLXZlcmJvc2U9I10g
Wy0tb3V0cHV0PXZzN10gWy0tZmlsdGVyPS14LCt5LC4uLl0KICAgICAgICAgPGZpbGU+IFtmaWxl
XSAuLi4KQEAgLTI2NzAsMTggKzI2NzMsMTMgQEAgZGVmIHByb2Nlc3NfZmlsZV9kYXRhKGZpbGVu
YW1lLCBmaWxlX2V4dGVuc2lvbiwgbGluZXMsIGVycm9yKToKICAgICBjaGVja19mb3JfbmV3X2xp
bmVfYXRfZW9mKGZpbGVuYW1lLCBsaW5lcywgZXJyb3IpCiAKIAotZGVmIHByb2Nlc3NfZmlsZShm
aWxlbmFtZSwgdmxldmVsLCBlcnJvcj1lcnJvcik6CitkZWYgcHJvY2Vzc19maWxlKGZpbGVuYW1l
LCBlcnJvcj1lcnJvcik6CiAgICAgIiIiRG9lcyBnb29nbGUtbGludCBvbiBhIHNpbmdsZSBmaWxl
LgogCiAgICAgQXJnczoKICAgICAgIGZpbGVuYW1lOiBUaGUgbmFtZSBvZiB0aGUgZmlsZSB0byBw
YXJzZS4KLSAgICAgIHZsZXZlbDogVGhlIGxldmVsIG9mIGVycm9ycyB0byByZXBvcnQuICBFdmVy
eSBlcnJvciBvZiBjb25maWRlbmNlCi0gICAgICA+PSB2ZXJib3NlX2xldmVsIHdpbGwgYmUgcmVw
b3J0ZWQuICAwIGlzIGEgZ29vZCBkZWZhdWx0LgogICAgICAgZXJyb3I6IFRoZSBmdW5jdGlvbiB0
byBjYWxsIHdpdGggYW55IGVycm9ycyBmb3VuZC4KICAgICAiIiIKLQotICAgIF9zZXRfdmVyYm9z
ZV9sZXZlbCh2bGV2ZWwpCi0KICAgICB0cnk6CiAgICAgICAgICMgU3VwcG9ydCB0aGUgVU5JWCBj
b252ZW50aW9uIG9mIHVzaW5nICItIiBmb3Igc3RkaW4uICBOb3RlIHRoYXQKICAgICAgICAgIyB3
ZSBhcmUgbm90IG9wZW5pbmcgdGhlIGZpbGUgd2l0aCB1bml2ZXJzYWwgbmV3bGluZSBzdXBwb3J0
CkBAIC0yODU3LDcgKzI4NTUsNyBAQCB0aGF0IHlvdSBub3RpY2UgdGhhdCBpdCBmbGFncyBpbmNv
cnJlY3RseS4KIAogICAgIF9jcHBsaW50X3N0YXRlLnJlc2V0X2Vycm9yX2NvdW50KCkKICAgICBm
b3IgZmlsZW5hbWUgaW4gZmlsZW5hbWVzOgotICAgICAgICBwcm9jZXNzX2ZpbGUoZmlsZW5hbWUs
IF9jcHBsaW50X3N0YXRlLnZlcmJvc2VfbGV2ZWwpCisgICAgICAgIHByb2Nlc3NfZmlsZShmaWxl
bmFtZSkKICAgICBzeXMuc3RkZXJyLndyaXRlKCdUb3RhbCBlcnJvcnMgZm91bmQ6ICVkXG4nICUg
X2NwcGxpbnRfc3RhdGUuZXJyb3JfY291bnQpCiAgICAgc3lzLmV4aXQoX2NwcGxpbnRfc3RhdGUu
ZXJyb3JfY291bnQgPiAwKQogCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3J1bi13
ZWJraXQtbGludCBiL1dlYktpdFRvb2xzL1NjcmlwdHMvcnVuLXdlYmtpdC1saW50Cm5ldyBmaWxl
IG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZhN2JiOTkKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJLaXRUb29scy9TY3JpcHRzL3J1bi13ZWJraXQtbGludApAQCAtMCwwICsxLDEzMCBAQAorIyEv
dXNyL2Jpbi9weXRob24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoK
KyMKKyMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyMgZGlzdHJpYnV0aW9uLgorIyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
IyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJTY3JpcHQgdG8gcnVuIHRoZSBs
aW50ZXIgZm9yIHNvdXJjZSBjb2RlIG9mIFdlYktpdC4iIiIKKworaW1wb3J0IG9zCitpbXBvcnQg
b3MucGF0aAoraW1wb3J0IHN5cworCitpbXBvcnQgbW9kdWxlcy5jcHBsaW50IGFzIGNwcGxpbnQK
K2Zyb20gbW9kdWxlcy5kaWZmX3BhcnNlciBpbXBvcnQgRGlmZlBhcnNlcgorZnJvbSBtb2R1bGVz
LnNjbSBpbXBvcnQgZGV0ZWN0X3NjbV9zeXN0ZW0KKworCisjIE92ZXJyaWRlIHRoZSB1c2FnZSBv
ZiB0aGUgbGludCB0b29sLgorY3BwbGludC5fVVNBR0UgPSAiIiIKK1N5bnRheDogd2Via2l0LXJ1
bi1saW50IFstLXZlcmJvc2U9I10gWy0tb3V0cHV0PXZzN10gWy0tZmlsdGVyPS14LCt5LC4uLl0K
KworICBUaGUgc3R5bGUgZ3VpZGVsaW5lcyB0aGlzIHRyaWVzIHRvIGZvbGxvdyBhcmUgdGhvc2Ug
aW4KKyAgICBodHRwOi8vd2Via2l0Lm9yZy9jb2RpbmcvY29kaW5nLXN0eWxlLmh0bWwKKworICBF
dmVyeSBwcm9ibGVtIGlzIGdpdmVuIGEgY29uZmlkZW5jZSBzY29yZSBmcm9tIDEtNSwgd2l0aCA1
IG1lYW5pbmcgd2UgYXJlCisgIGNlcnRhaW4gb2YgdGhlIHByb2JsZW0sIGFuZCAxIG1lYW5pbmcg
aXQgY291bGQgYmUgYSBsZWdpdGltYXRlIGNvbnN0cnVjdC4KKyAgVGhpcyB3aWxsIG1pc3Mgc29t
ZSBlcnJvcnMsIGFuZCBpcyBub3QgYSBzdWJzdGl0dXRlIGZvciBhIGNvZGUgcmV2aWV3LgorCisg
IFRvIHByZXZlbnQgc3BlY2lmaWMgbGluZXMgZnJvbSBiZWluZyBsaW50ZWQsIGFkZCBhICcvLyBO
T0xJTlQnIGNvbW1lbnQgdG8gdGhlCisgIGVuZCBvZiB0aGUgbGluZS4KKworICBMaW50ZWQgZXh0
ZW5zaW9ucyBhcmUgLmNjLCAuY3BwLCBhbmQgLmguICBPdGhlciBmaWxlIHR5cGVzIHdpbGwgYmUg
aWdub3JlZC4KKworICBGbGFnczoKKworICAgIG91dHB1dD12czcKKyAgICAgIEJ5IGRlZmF1bHQs
IHRoZSBvdXRwdXQgaXMgZm9ybWF0dGVkIHRvIGVhc2UgZW1hY3MgcGFyc2luZy4gIFZpc3VhbCBT
dHVkaW8KKyAgICAgIGNvbXBhdGlibGUgb3V0cHV0ICh2czcpIG1heSBhbHNvIGJlIHVzZWQuICBP
dGhlciBmb3JtYXRzIGFyZSB1bnN1cHBvcnRlZC4KKworICAgIHZlcmJvc2U9IworICAgICAgU3Bl
Y2lmeSBhIG51bWJlciAwLTUgdG8gcmVzdHJpY3QgZXJyb3JzIHRvIGNlcnRhaW4gdmVyYm9zaXR5
IGxldmVscy4KKworICAgIGZpbHRlcj0teCwreSwuLi4KKyAgICAgIFNwZWNpZnkgYSBjb21tYS1z
ZXBhcmF0ZWQgbGlzdCBvZiBjYXRlZ29yeS1maWx0ZXJzIHRvIGFwcGx5OiBvbmx5CisgICAgICBl
cnJvciBtZXNzYWdlcyB3aG9zZSBjYXRlZ29yeSBuYW1lcyBwYXNzIHRoZSBmaWx0ZXJzIHdpbGwg
YmUgcHJpbnRlZC4KKyAgICAgIChDYXRlZ29yeSBuYW1lcyBhcmUgcHJpbnRlZCB3aXRoIHRoZSBt
ZXNzYWdlIGFuZCBsb29rIGxpa2UKKyAgICAgICJbd2hpdGVzcGFjZS9pbmRlbnRdIi4pICBGaWx0
ZXJzIGFyZSBldmFsdWF0ZWQgbGVmdCB0byByaWdodC4KKyAgICAgICItRk9PIiBhbmQgIkZPTyIg
bWVhbnMgImRvIG5vdCBwcmludCBjYXRlZ29yaWVzIHRoYXQgc3RhcnQgd2l0aCBGT08iLgorICAg
ICAgIitGT08iIG1lYW5zICJkbyBwcmludCBjYXRlZ29yaWVzIHRoYXQgc3RhcnQgd2l0aCBGT08i
LgorCisgICAgICBFeGFtcGxlczogLS1maWx0ZXI9LXdoaXRlc3BhY2UsK3doaXRlc3BhY2UvYnJh
Y2VzCisgICAgICAgICAgICAgICAgLS1maWx0ZXI9d2hpdGVzcGFjZSxydW50aW1lL3ByaW50Ziwr
cnVudGltZS9wcmludGZfZm9ybWF0CisgICAgICAgICAgICAgICAgLS1maWx0ZXI9LSwrYnVpbGQv
aW5jbHVkZV93aGF0X3lvdV91c2UKKworICAgICAgVG8gc2VlIGEgbGlzdCBvZiBhbGwgdGhlIGNh
dGVnb3JpZXMgdXNlZCBpbiBjcHBsaW50LCBwYXNzIG5vIGFyZzoKKyAgICAgICAgIC0tZmlsdGVy
PQorIiIiCisKKworZGVmIHByb2Nlc3NfcGF0Y2gocGF0Y2hfc3RyaW5nKToKKyAgICAiIiJEb2Vz
IGxpbnQgb24gYSBzaW5nbGUgcGF0Y2guCisKKyAgICBBcmdzOgorICAgICAgcGF0Y2hfc3RyaW5n
OiBBIHN0cmluZyBvZiBhIHBhdGNoLgorICAgICIiIgorICAgIHBhdGNoID0gRGlmZlBhcnNlcihw
YXRjaF9zdHJpbmcuc3BsaXRsaW5lcygpKQorICAgIGZvciBmaWxlbmFtZSwgZGlmZiBpbiBwYXRj
aC5maWxlcy5pdGVyaXRlbXMoKToKKyAgICAgICAgZmlsZV9leHRlbnNpb24gPSBvcy5wYXRoLnNw
bGl0ZXh0KGZpbGVuYW1lKVsxXQorCisgICAgICAgIGlmIGZpbGVfZXh0ZW5zaW9uIGluIFsnLmNj
JywgJy5jcHAnLCAnLmgnXToKKyAgICAgICAgICAgIGxpbmVfbnVtYmVycyA9IHNldCgpCisKKyAg
ICAgICAgICAgIGRlZiBlcnJvcl9mb3JfcGF0Y2goZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCBjYXRl
Z29yeSwgY29uZmlkZW5jZSwgbWVzc2FnZSk6CisgICAgICAgICAgICAgICAgIiIiV3JhcHBlciBm
dW5jdGlvbiBvZiBjcHBsaW50LmVycm9yIGZvciBwYXRjaGVzLgorCisgICAgICAgICAgICAgICAg
VGhpcyBmdW5jdGlvbiBvdXRwdXRzIGVycm9ycyBvbmx5IGlmIHRoZSBsaW5lIG51bWJlcgorICAg
ICAgICAgICAgICAgIGNvcnJlc3BvbmRzIHRvIGxpbmVzIHdoaWNoIGFyZSBtb2RpZmllZCBvciBh
ZGRlZC4KKyAgICAgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgICAgICBpZiBub3QgbGluZV9u
dW1iZXJzOgorICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBkaWZmLmxpbmVzOgorICAg
ICAgICAgICAgICAgICAgICAgICAgbGluZV9udW1iZXJzLmFkZChsaW5lWzFdKQorCisgICAgICAg
ICAgICAgICAgaWYgbGluZV9udW1iZXIgaW4gbGluZV9udW1iZXJzOgorICAgICAgICAgICAgICAg
ICAgICBjcHBsaW50LmVycm9yKGZpbGVuYW1lLCBsaW5lX251bWJlciwgY2F0ZWdvcnksIGNvbmZp
ZGVuY2UsIG1lc3NhZ2UpCisKKyAgICAgICAgICAgIGNwcGxpbnQucHJvY2Vzc19maWxlKGZpbGVu
YW1lLCBlcnJvcj1lcnJvcl9mb3JfcGF0Y2gpCisKKworZGVmIG1haW4oKToKKyAgICBjcHBsaW50
LnVzZV93ZWJraXRfc3R5bGVzKCkKKyAgICBhcmdzID0gY3BwbGludC5wYXJzZV9hcmd1bWVudHMo
c3lzLmFyZ3ZbMTpdKQorICAgIGlmIGFyZ3M6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ0VS
Uk9SOiBXZSBkb25cJ3Qgc3VwcG9ydCBmaWxlcyBhcyBhcmd1bWVudHMgZm9yIG5vdy5cbicgKyBj
cHBsaW50Ll9VU0FHRSkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGN3ZCA9IG9zLnBhdGgu
YWJzcGF0aCgnLicpCisgICAgc2NtID0gZGV0ZWN0X3NjbV9zeXN0ZW0oY3dkKQorCisgICAgcHJv
Y2Vzc19wYXRjaChzY20uY3JlYXRlX3BhdGNoKCkpCisKKyAgICBzeXMuc3RkZXJyLndyaXRlKCdU
b3RhbCBlcnJvcnMgZm91bmQ6ICVkXG4nICUgY3BwbGludC5lcnJvcl9jb3VudCgpKQorICAgIHN5
cy5leGl0KGNwcGxpbnQuZXJyb3JfY291bnQoKSA+IDApCisKKworaWYgX19uYW1lX18gPT0gIl9f
bWFpbl9fIjoKKyAgICBtYWluKCk=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33167</attachid>
            <date>2009-07-21 03:19:02 -0700</date>
            <delta_ts>2009-07-21 03:28:47 -0700</delta_ts>
            <desc>Patch v4</desc>
            <filename>bug-27291-20090721191901.patch</filename>
            <type>text/plain</type>
            <size>7405</size>
            <attacher name="Shinichiro Hamaji">hamaji</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA2MWQ4NzY1Li4wM2NkZTE3IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0yLDYgKzIsMjAgQEAKIAogICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAorICAgICAgICBTdXBwb3J0IGxpbnQgZm9y
IHBhdGNoZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTI3MjkxCisKKyAgICAgICAgQWRkIHJ1bi13ZWJraXQtbGludCBzY3JpcHQsIHdoaWNoIGxpbnRz
IHJlY2VudCBjaGFuZ2VzIGluIGxvY2FsCisgICAgICAgIHJlcG9zaXRvcnkuICBBbHNvLCBtb2Rp
ZmllZCBjcHBsaW50LnB5IHNvIHRoYXQgd2UgZG9uJ3QgbmVlZCB0bworICAgICAgICBzcGVjaWZ5
IHZlcmJvc2UgbGV2ZWwgZm9yIHByb2Nlc3NfZmlsZSgpLgorCisgICAgICAgICogU2NyaXB0cy9t
b2R1bGVzL2NwcGxpbnQucHk6CisgICAgICAgICogU2NyaXB0cy9ydW4td2Via2l0LWxpbnQ6IEFk
ZGVkLgorCisyMDA5LTA3LTIxICBTaGluaWNoaXJvIEhhbWFqaSAgPGhhbWFqaUBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKICAgICAgICAgY3Bw
bGludCdzIHBhcnNlX2FyZ3VtZW50IHNob3VsZCBub3QgZXhpdCBldmVuIGlmIG5vIGZpbGVzIGFy
ZSBzcGVjaWZpZWQKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTI3NDg5CiAKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9jcHBs
aW50LnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2NwcGxpbnQucHkKaW5kZXggMTZl
YjQ3Yy4uNmE5Y2E4YSAxMDA3NTUKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2Nw
cGxpbnQucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2NwcGxpbnQucHkKQEAg
LTI2NzAsMTggKzI2NzAsMTMgQEAgZGVmIHByb2Nlc3NfZmlsZV9kYXRhKGZpbGVuYW1lLCBmaWxl
X2V4dGVuc2lvbiwgbGluZXMsIGVycm9yKToKICAgICBjaGVja19mb3JfbmV3X2xpbmVfYXRfZW9m
KGZpbGVuYW1lLCBsaW5lcywgZXJyb3IpCiAKIAotZGVmIHByb2Nlc3NfZmlsZShmaWxlbmFtZSwg
dmxldmVsLCBlcnJvcj1lcnJvcik6CitkZWYgcHJvY2Vzc19maWxlKGZpbGVuYW1lLCBlcnJvcj1l
cnJvcik6CiAgICAgIiIiRG9lcyBnb29nbGUtbGludCBvbiBhIHNpbmdsZSBmaWxlLgogCiAgICAg
QXJnczoKICAgICAgIGZpbGVuYW1lOiBUaGUgbmFtZSBvZiB0aGUgZmlsZSB0byBwYXJzZS4KLSAg
ICAgIHZsZXZlbDogVGhlIGxldmVsIG9mIGVycm9ycyB0byByZXBvcnQuICBFdmVyeSBlcnJvciBv
ZiBjb25maWRlbmNlCi0gICAgICA+PSB2ZXJib3NlX2xldmVsIHdpbGwgYmUgcmVwb3J0ZWQuICAw
IGlzIGEgZ29vZCBkZWZhdWx0LgogICAgICAgZXJyb3I6IFRoZSBmdW5jdGlvbiB0byBjYWxsIHdp
dGggYW55IGVycm9ycyBmb3VuZC4KICAgICAiIiIKLQotICAgIF9zZXRfdmVyYm9zZV9sZXZlbCh2
bGV2ZWwpCi0KICAgICB0cnk6CiAgICAgICAgICMgU3VwcG9ydCB0aGUgVU5JWCBjb252ZW50aW9u
IG9mIHVzaW5nICItIiBmb3Igc3RkaW4uICBOb3RlIHRoYXQKICAgICAgICAgIyB3ZSBhcmUgbm90
IG9wZW5pbmcgdGhlIGZpbGUgd2l0aCB1bml2ZXJzYWwgbmV3bGluZSBzdXBwb3J0CkBAIC0yODU3
LDcgKzI4NTIsNyBAQCB0aGF0IHlvdSBub3RpY2UgdGhhdCBpdCBmbGFncyBpbmNvcnJlY3RseS4K
IAogICAgIF9jcHBsaW50X3N0YXRlLnJlc2V0X2Vycm9yX2NvdW50KCkKICAgICBmb3IgZmlsZW5h
bWUgaW4gZmlsZW5hbWVzOgotICAgICAgICBwcm9jZXNzX2ZpbGUoZmlsZW5hbWUsIF9jcHBsaW50
X3N0YXRlLnZlcmJvc2VfbGV2ZWwpCisgICAgICAgIHByb2Nlc3NfZmlsZShmaWxlbmFtZSkKICAg
ICBzeXMuc3RkZXJyLndyaXRlKCdUb3RhbCBlcnJvcnMgZm91bmQ6ICVkXG4nICUgX2NwcGxpbnRf
c3RhdGUuZXJyb3JfY291bnQpCiAgICAgc3lzLmV4aXQoX2NwcGxpbnRfc3RhdGUuZXJyb3JfY291
bnQgPiAwKQogCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3J1bi13ZWJraXQtbGlu
dCBiL1dlYktpdFRvb2xzL1NjcmlwdHMvcnVuLXdlYmtpdC1saW50Cm5ldyBmaWxlIG1vZGUgMTAw
NzU1CmluZGV4IDAwMDAwMDAuLmJlYjI0OTcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29s
cy9TY3JpcHRzL3J1bi13ZWJraXQtbGludApAQCAtMCwwICsxLDEzMCBAQAorIyEvdXNyL2Jpbi9w
eXRob24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisjICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJp
YnV0aW9uLgorIyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiJTY3JpcHQgdG8gcnVuIHRoZSBsaW50ZXIgZm9y
IHNvdXJjZSBjb2RlIG9mIFdlYktpdC4iIiIKKworaW1wb3J0IG9zCitpbXBvcnQgb3MucGF0aAor
aW1wb3J0IHN5cworCitpbXBvcnQgbW9kdWxlcy5jcHBsaW50IGFzIGNwcGxpbnQKK2Zyb20gbW9k
dWxlcy5kaWZmX3BhcnNlciBpbXBvcnQgRGlmZlBhcnNlcgorZnJvbSBtb2R1bGVzLnNjbSBpbXBv
cnQgZGV0ZWN0X3NjbV9zeXN0ZW0KKworCisjIE92ZXJyaWRlIHRoZSB1c2FnZSBvZiB0aGUgbGlu
dCB0b29sLgorY3BwbGludC5fVVNBR0UgPSAiIiIKK1N5bnRheDogJShwcm9ncmFtX25hbWUpcyBb
LS12ZXJib3NlPSNdIFstLW91dHB1dD12czddIFstLWZpbHRlcj0teCwreSwuLi5dCisKKyAgVGhl
IHN0eWxlIGd1aWRlbGluZXMgdGhpcyB0cmllcyB0byBmb2xsb3cgYXJlIHRob3NlIGluCisgICAg
aHR0cDovL3dlYmtpdC5vcmcvY29kaW5nL2NvZGluZy1zdHlsZS5odG1sCisKKyAgRXZlcnkgcHJv
YmxlbSBpcyBnaXZlbiBhIGNvbmZpZGVuY2Ugc2NvcmUgZnJvbSAxLTUsIHdpdGggNSBtZWFuaW5n
IHdlIGFyZQorICBjZXJ0YWluIG9mIHRoZSBwcm9ibGVtLCBhbmQgMSBtZWFuaW5nIGl0IGNvdWxk
IGJlIGEgbGVnaXRpbWF0ZSBjb25zdHJ1Y3QuCisgIFRoaXMgd2lsbCBtaXNzIHNvbWUgZXJyb3Jz
LCBhbmQgaXMgbm90IGEgc3Vic3RpdHV0ZSBmb3IgYSBjb2RlIHJldmlldy4KKworICBUbyBwcmV2
ZW50IHNwZWNpZmljIGxpbmVzIGZyb20gYmVpbmcgbGludGVkLCBhZGQgYSAnLy8gTk9MSU5UJyBj
b21tZW50IHRvIHRoZQorICBlbmQgb2YgdGhlIGxpbmUuCisKKyAgTGludGVkIGV4dGVuc2lvbnMg
YXJlIC5jYywgLmNwcCwgYW5kIC5oLiAgT3RoZXIgZmlsZSB0eXBlcyB3aWxsIGJlIGlnbm9yZWQu
CisKKyAgRmxhZ3M6CisKKyAgICBvdXRwdXQ9dnM3CisgICAgICBCeSBkZWZhdWx0LCB0aGUgb3V0
cHV0IGlzIGZvcm1hdHRlZCB0byBlYXNlIGVtYWNzIHBhcnNpbmcuICBWaXN1YWwgU3R1ZGlvCisg
ICAgICBjb21wYXRpYmxlIG91dHB1dCAodnM3KSBtYXkgYWxzbyBiZSB1c2VkLiAgT3RoZXIgZm9y
bWF0cyBhcmUgdW5zdXBwb3J0ZWQuCisKKyAgICB2ZXJib3NlPSMKKyAgICAgIFNwZWNpZnkgYSBu
dW1iZXIgMC01IHRvIHJlc3RyaWN0IGVycm9ycyB0byBjZXJ0YWluIHZlcmJvc2l0eSBsZXZlbHMu
CisKKyAgICBmaWx0ZXI9LXgsK3ksLi4uCisgICAgICBTcGVjaWZ5IGEgY29tbWEtc2VwYXJhdGVk
IGxpc3Qgb2YgY2F0ZWdvcnktZmlsdGVycyB0byBhcHBseTogb25seQorICAgICAgZXJyb3IgbWVz
c2FnZXMgd2hvc2UgY2F0ZWdvcnkgbmFtZXMgcGFzcyB0aGUgZmlsdGVycyB3aWxsIGJlIHByaW50
ZWQuCisgICAgICAoQ2F0ZWdvcnkgbmFtZXMgYXJlIHByaW50ZWQgd2l0aCB0aGUgbWVzc2FnZSBh
bmQgbG9vayBsaWtlCisgICAgICAiW3doaXRlc3BhY2UvaW5kZW50XSIuKSAgRmlsdGVycyBhcmUg
ZXZhbHVhdGVkIGxlZnQgdG8gcmlnaHQuCisgICAgICAiLUZPTyIgYW5kICJGT08iIG1lYW5zICJk
byBub3QgcHJpbnQgY2F0ZWdvcmllcyB0aGF0IHN0YXJ0IHdpdGggRk9PIi4KKyAgICAgICIrRk9P
IiBtZWFucyAiZG8gcHJpbnQgY2F0ZWdvcmllcyB0aGF0IHN0YXJ0IHdpdGggRk9PIi4KKworICAg
ICAgRXhhbXBsZXM6IC0tZmlsdGVyPS13aGl0ZXNwYWNlLCt3aGl0ZXNwYWNlL2JyYWNlcworICAg
ICAgICAgICAgICAgIC0tZmlsdGVyPXdoaXRlc3BhY2UscnVudGltZS9wcmludGYsK3J1bnRpbWUv
cHJpbnRmX2Zvcm1hdAorICAgICAgICAgICAgICAgIC0tZmlsdGVyPS0sK2J1aWxkL2luY2x1ZGVf
d2hhdF95b3VfdXNlCisKKyAgICAgIFRvIHNlZSBhIGxpc3Qgb2YgYWxsIHRoZSBjYXRlZ29yaWVz
IHVzZWQgaW4gJShwcm9ncmFtX25hbWUpcywgcGFzcyBubyBhcmc6CisgICAgICAgICAtLWZpbHRl
cj0KKyIiIiAlIHsncHJvZ3JhbV9uYW1lJzogc3lzLmFyZ3ZbMF19CisKKworZGVmIHByb2Nlc3Nf
cGF0Y2gocGF0Y2hfc3RyaW5nKToKKyAgICAiIiJEb2VzIGxpbnQgb24gYSBzaW5nbGUgcGF0Y2gu
CisKKyAgICBBcmdzOgorICAgICAgcGF0Y2hfc3RyaW5nOiBBIHN0cmluZyBvZiBhIHBhdGNoLgor
ICAgICIiIgorICAgIHBhdGNoID0gRGlmZlBhcnNlcihwYXRjaF9zdHJpbmcuc3BsaXRsaW5lcygp
KQorICAgIGZvciBmaWxlbmFtZSwgZGlmZiBpbiBwYXRjaC5maWxlcy5pdGVyaXRlbXMoKToKKyAg
ICAgICAgZmlsZV9leHRlbnNpb24gPSBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKVsxXQorCisg
ICAgICAgIGlmIGZpbGVfZXh0ZW5zaW9uIGluIFsnLmNjJywgJy5jcHAnLCAnLmgnXToKKyAgICAg
ICAgICAgIGxpbmVfbnVtYmVycyA9IHNldCgpCisKKyAgICAgICAgICAgIGRlZiBlcnJvcl9mb3Jf
cGF0Y2goZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCBjYXRlZ29yeSwgY29uZmlkZW5jZSwgbWVzc2Fn
ZSk6CisgICAgICAgICAgICAgICAgIiIiV3JhcHBlciBmdW5jdGlvbiBvZiBjcHBsaW50LmVycm9y
IGZvciBwYXRjaGVzLgorCisgICAgICAgICAgICAgICAgVGhpcyBmdW5jdGlvbiBvdXRwdXRzIGVy
cm9ycyBvbmx5IGlmIHRoZSBsaW5lIG51bWJlcgorICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRz
IHRvIGxpbmVzIHdoaWNoIGFyZSBtb2RpZmllZCBvciBhZGRlZC4KKyAgICAgICAgICAgICAgICAi
IiIKKyAgICAgICAgICAgICAgICBpZiBub3QgbGluZV9udW1iZXJzOgorICAgICAgICAgICAgICAg
ICAgICBmb3IgbGluZSBpbiBkaWZmLmxpbmVzOgorICAgICAgICAgICAgICAgICAgICAgICAgbGlu
ZV9udW1iZXJzLmFkZChsaW5lWzFdKQorCisgICAgICAgICAgICAgICAgaWYgbGluZV9udW1iZXIg
aW4gbGluZV9udW1iZXJzOgorICAgICAgICAgICAgICAgICAgICBjcHBsaW50LmVycm9yKGZpbGVu
YW1lLCBsaW5lX251bWJlciwgY2F0ZWdvcnksIGNvbmZpZGVuY2UsIG1lc3NhZ2UpCisKKyAgICAg
ICAgICAgIGNwcGxpbnQucHJvY2Vzc19maWxlKGZpbGVuYW1lLCBlcnJvcj1lcnJvcl9mb3JfcGF0
Y2gpCisKKworZGVmIG1haW4oKToKKyAgICBjcHBsaW50LnVzZV93ZWJraXRfc3R5bGVzKCkKKyAg
ICBhcmdzID0gY3BwbGludC5wYXJzZV9hcmd1bWVudHMoc3lzLmFyZ3ZbMTpdKQorICAgIGlmIGFy
Z3M6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkVSUk9SOiBXZSBkb24ndCBzdXBwb3J0IGZp
bGVzIGFzIGFyZ3VtZW50cyBmb3Igbm93LlxuIiArIGNwcGxpbnQuX1VTQUdFKQorICAgICAgICBz
eXMuZXhpdCgxKQorCisgICAgY3dkID0gb3MucGF0aC5hYnNwYXRoKCcuJykKKyAgICBzY20gPSBk
ZXRlY3Rfc2NtX3N5c3RlbShjd2QpCisKKyAgICBwcm9jZXNzX3BhdGNoKHNjbS5jcmVhdGVfcGF0
Y2goKSkKKworICAgIHN5cy5zdGRlcnIud3JpdGUoJ1RvdGFsIGVycm9ycyBmb3VuZDogJWRcbicg
JSBjcHBsaW50LmVycm9yX2NvdW50KCkpCisgICAgc3lzLmV4aXQoY3BwbGludC5lcnJvcl9jb3Vu
dCgpID4gMCkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQ==
</data>
<flag name="review"
          id="17488"
          type_id="1"
          status="+"
          setter="levin"
    />
          </attachment>
      

    </bug>

</bugzilla>