<?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>131004</bug_id>
          
          <creation_ts>2014-03-31 19:36:13 -0700</creation_ts>
          <short_desc>Add a --functionsToDFGCompile option.</short_desc>
          <delta_ts>2014-05-22 15:42:26 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>132437</dup_id>
          
          <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="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>996100</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-03-31 19:36:13 -0700</bug_when>
    <thetext>... because sometimes, --bytecodeRangeToDFGCompile just isn&apos;t enough to minimize the functions to compile.

If --functionsToDFGCompile is unspecified, all functions will be compiled (i.e. unrestricted).  If we wish to filter the functions to be compiled to a specified list (by name), we can now do so in 2 ways:
1. specify the list on the command line:
    --functionsToDFGCompile=functionA,functionB,functionC
2. provide a list of function names in a file:
    --functionsToDFGCompile=myListOfFunctionNames.txt

The benefit of using the list is that it also support C++ style comments.  For example:

=== BEGIN myListOfFunctionNames.txt ===
functionA
// functionB
functionC
/*
functionD
functionE
*/
=== END myListOfFunctionNames.txt ===

With this example list, only functionA and function C will be compiled.  This makes it easier for us to grab a list of functions that were compiled using --reportCompileTimes to make the compile list file, and then selectively commenting out entries in that list to isolate the minimum set of functions that need to be compiled in order to reproduce an issue.

Technically, in the implementation of --functionsToDFGCompile, the file option loads the file into a big string and parses that string as if it came from the command line.  Hence, technically, the command line list option also supports commenting, but it wouldn&apos;t be how one would typically use that option.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996101</commentid>
    <comment_count>1</comment_count>
      <attachid>228234</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-03-31 19:49:20 -0700</bug_when>
    <thetext>Created attachment 228234
the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996102</commentid>
    <comment_count>2</comment_count>
      <attachid>228234</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-03-31 19:49:52 -0700</bug_when>
    <thetext>Comment on attachment 228234
the patch.

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

&gt; Source/JavaScriptCore/ChangeLog:9
&gt; +        minimize the list of functions to compile in order to reproduce an issue

&quot;minimize&quot; ==&gt; &quot;minimal&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996103</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-03-31 19:50:52 -0700</bug_when>
    <thetext>Attachment 228234 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/Options.h:308:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Total errors found: 1 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996117</commentid>
    <comment_count>4</comment_count>
      <attachid>228234</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-03-31 21:04:19 -0700</bug_when>
    <thetext>Comment on attachment 228234
the patch.

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

&gt; Source/JavaScriptCore/ChangeLog:41
&gt; +        Hence, we can use indentations, line breaks, and comments in the compilation
&gt; +        list.  Here&apos;s an example of such a file:
&gt; +
&gt; +            // Start of myListOfFunctionNames.txt
&gt; +            functionA,
&gt; +            // functionB
&gt; +            functionC
&gt; +            /*
&gt; +            functionD
&gt; +            functionE
&gt; +            */
&gt; +            // End of myListOfFunctionNames.txt

Do we really need a fully generalized lexer and parser for this one little command-line option? And not just one but two different comment syntaxes? Really?

&gt; Source/JavaScriptCore/dfg/DFGCapabilities.cpp:168
&gt; +static inline bool inOKToDFGCompileList(CodeBlock* codeBlock)
&gt; +{
&gt; +    return !Options::functionsToDFGCompile() || slowInOKToDFGCompileList(codeBlock);
&gt; +}

All of this command-line handling belongs in Options.cpp. It has nothing to do with the capabilities of the DFG.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996122</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-03-31 21:41:16 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 228234 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=228234&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:41
&gt; &gt; +        Hence, we can use indentations, line breaks, and comments in the compilation
&gt; &gt; +        list.  Here&apos;s an example of such a file:
&gt; &gt; +
&gt; &gt; +            // Start of myListOfFunctionNames.txt
&gt; &gt; +            functionA,
&gt; &gt; +            // functionB
&gt; &gt; +            functionC
&gt; &gt; +            /*
&gt; &gt; +            functionD
&gt; &gt; +            functionE
&gt; &gt; +            */
&gt; &gt; +            // End of myListOfFunctionNames.txt
&gt; 
&gt; Do we really need a fully generalized lexer and parser for this one little command-line option? And not just one but two different comment syntaxes? Really?

You may already know this, but just to make sure that we’re on the same page, here’s the use case scenario I have in mind and indeed encountered a need for: 

1. After reducing the set of compiled function to some small-ish set using --bytecodeRangeToDFGCompile, I have a list of functions produced by --reportCompileTimes.

Note: I’ve already determined that I can no longer reduce the bytecode range further or the issue will cease to manifest.  However, with this bytecode range, I still have about 10 functions to work with.  However, depending on the workload, the list could have easily been 100 functions or some unwieldy number. 

2. I put this list in a file use the --functionsToDFGCompile to only filter out any functions on in that file.

Being able to use /* */ comments allows me to rule out groups of functions at a time and employ a bisecting search.   Note that the search requires that I speculatively remove groups of functions and be able to add them (or subsets of them) back in if my speculation fails to be true.  Without comments, I will have to do a lot of cutting and pasting into and out of that file, and this can be error prone.  With /* */ comments, it’s easier to comment out and in groups of functions while allowing me to see at a glance which groups of functions I’m including / excluding.

The // comments is just a convenience.  We can certainly make do with just the /* */ comments, but it was not difficult to add.  So, I added it.


&gt; &gt; Source/JavaScriptCore/dfg/DFGCapabilities.cpp:168
&gt; &gt; +static inline bool inOKToDFGCompileList(CodeBlock* codeBlock)
&gt; &gt; +{
&gt; &gt; +    return !Options::functionsToDFGCompile() || slowInOKToDFGCompileList(codeBlock);
&gt; &gt; +}
&gt; 
&gt; All of this command-line handling belongs in Options.cpp. It has nothing to do with the capabilities of the DFG.

I agree.  I will move them over.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996146</commentid>
    <comment_count>6</comment_count>
      <attachid>228246</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-03-31 23:31:14 -0700</bug_when>
    <thetext>Created attachment 228246
patch 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996148</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-03-31 23:34:05 -0700</bug_when>
    <thetext>Attachment 228246 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/Options.h:315:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Total errors found: 1 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996268</commentid>
    <comment_count>8</comment_count>
      <attachid>228246</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-04-01 07:45:41 -0700</bug_when>
    <thetext>Comment on attachment 228246
patch 2

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

&gt; Source/JavaScriptCore/runtime/Options.cpp:427
&gt; +}

I agree with Geoff--this could be way simpler. If it were me, I&apos;d get rid of the inline option (for which you haven&apos;t listed a use case), treat the file list as one function per line, and just allow one-line comments that can only start at the beginning of the line. No need to keep track of the current position in the file, no need to worry about whitespace, no need to write weird pseudo regular expressions. Just read line by line (using fgetln or something similar), look at the very beginning of the line for comments, and assume everything else is a function.

You should be able to add/remove blocks of one-line comments very easily in almost any text editor, which allows you to bisect like you want. 

In this case I believe it&apos;s better to think like a scripter and not like a compiler writer :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996271</commentid>
    <comment_count>9</comment_count>
      <attachid>228286</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-04-01 08:14:11 -0700</bug_when>
    <thetext>Created attachment 228286
patch 3: removed unnecessary white space checks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996272</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-01 08:16:03 -0700</bug_when>
    <thetext>Attachment 228286 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/Options.h:315:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Total errors found: 1 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996290</commentid>
    <comment_count>11</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-04-01 08:42:37 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; I agree with Geoff--this could be way simpler. If it were me, I&apos;d get rid of the inline option (for which you haven&apos;t listed a use case), treat the file list as one function per line, and just allow one-line comments that can only start at the beginning of the line. No need to keep track of the current position in the file, no need to worry about whitespace, no need to write weird pseudo regular expressions. Just read line by line (using fgetln or something similar), look at the very beginning of the line for comments, and assume everything else is a function.

You’re only thinking of the mode where we load the function names from a file.  I also support the ability to specify the function names on the command line.  This is useful and convenient when the list of functions is small.  Are you also suggesting that I get rid of the option to specify the list on the command line?  fgetln() will not work if I’m parsing the list from the command line.

That said, your comment made me realize that I don’t need to explicitly check for white space.  Any illegal characters are effectively whitespace and are already ignored.  My 3rd patch removes the explicit white space checks.

&gt; You should be able to add/remove blocks of one-line comments very easily in almost any text editor, which allows you to bisect like you want. 

Maybe I need to learn how to use my text editor better.

I still stand by my implementation.  I think it provides many advantages and conveniences in the workflow of debugging this class of bugs, and I don’t think the code to make it work isn’t all that complex.  These advantages include being able to specify the list on the command line (useful for short lists).  Once we support parsing the list from the command line, I have to scan the character stream anyway, and hence, it isn’t difficult to do a little bit of work to skip comments.

In the end, what are you guys objecting to? The complexity of the code?  This code isn’t that complex, and is not in any critical path.  The amount of memory space taken up by the code?  I think this code isn’t that big.

My goal is to make the JIT debugging workflow (for this class of JIT bugs) as convenient and simple as possible without too much cost.  I think this patch achieves that.  If you guys are strongly opposed to this patch, I can replace it with the fgetln() approach and remove the convenience of specifying the list on the command line.  Please advise.  Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996291</commentid>
    <comment_count>12</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-04-01 08:45:16 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #8)
&gt; &gt; I&apos;d get rid of the inline option (for which you haven&apos;t listed a use case), ...

One more note for consideration.  When choosing which blocks of functions to comment out, I sometimes like to leave notes for myself to track what and why I’m commenting out certain blocks or individual functions.  I find the single line comments useful for this.  Again, it is possible to use the block /* */ comments for this, but it’s less convenient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996329</commentid>
    <comment_count>13</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-04-01 09:56:29 -0700</bug_when>
    <thetext>(In reply to comment #11)

&gt; You’re only thinking of the mode where we load the function names from a file.  I also support the ability to specify the function names on the command line.  This is useful and convenient when the list of functions is small.  Are you also suggesting that I get rid of the option to specify the list on the command line?  fgetln() will not work if I’m parsing the list from the command line.

I explicitly said I&apos;d forgo the &quot;inline&quot; option in favor of just having the file. You said yourself that you already had the function names in a file from --reportCompileTimes.

&gt; Maybe I need to learn how to use my text editor better.

Vim: ctrl + v to start a visual block, &apos;d&apos; to delete the block
Emacs: c-spce to set the mark, select the block similar to vim but with one extra column, c-x r k to kill the block.
Xcode: cmd + / to toggle comments
This is a common feature in most text editors/IDEs.

&gt; In the end, what are you guys objecting to? The complexity of the code?  This code isn’t that complex, and is not in any critical path.  The amount of memory space taken up by the code?  I think this code isn’t that big.

It just feels over engineered. Simplicity is a Good Thing (TM), both in implementation and in use. Finding the right balance is what we&apos;re trying to do here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996330</commentid>
    <comment_count>14</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-04-01 09:57:24 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; I&apos;d get rid of the inline option (for which you haven&apos;t listed a use case), ...
&gt; 
&gt; One more note for consideration.  When choosing which blocks of functions to comment out, I sometimes like to leave notes for myself to track what and why I’m commenting out certain blocks or individual functions.  I find the single line comments useful for this.  Again, it is possible to use the block /* */ comments for this, but it’s less convenient.

Like I said, I&apos;d get rid of the &apos;/* */&apos; comments in favor of &apos;//&apos; comments because they&apos;re easier to check for at the beginning of each line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996337</commentid>
    <comment_count>15</comment_count>
      <attachid>228286</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-04-01 10:11:30 -0700</bug_when>
    <thetext>Comment on attachment 228286
patch 3: removed unnecessary white space checks

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

This feature isn&apos;t very useful to me, for a few reasons:

(1) It relies on function names, but not all functions have names, and names can overlap. This would be much more useful to me if its input were &quot;filename:line,column&quot; instead.

(2) It doesn&apos;t produce the initial exhaustive file, that I would start cutting down.

(3) There are enough special modes here -- three kinds of comments (//, /* */, and certain combinations of &quot;non-function&quot; characters), a special header delimiter if you&apos;re going to supply a file, all text assumed to be ASCII, limited range of parseable characters -- that I&apos;m probably going to have to re-read the parsers every time I use this feature, and the parsers aren&apos;t super readable.

Now, maybe I should say r+ because you used this feature once and you like it, and it&apos;s only debugging code anyway. But I think the bar needs to be higher for code that we agree to maintain together.

I&apos;m not convinced when you list out all the ways you could use all the features here. Every feature can be used in some circumstance, but that doesn&apos;t make every feature good, nor does it make all implementations of the same feature equally good. We need to weigh a feature against other ways to accomplish the same task, and against simplicity, clarity, maintainability, and robustness.

&gt; Source/JavaScriptCore/runtime/Options.cpp:85
&gt; +static bool parse(const char* string, const char*&amp; value)
&gt; +{
&gt; +    value = string;
&gt; +    return true;
&gt; +}

This function returns bool but never returns false. Confusing.

&gt; Source/JavaScriptCore/runtime/Options.cpp:352
&gt; +struct FunctionsFilter {

This should be a class.

&gt; Source/JavaScriptCore/runtime/Options.cpp:359
&gt; +    Vector&lt;CString&gt; functionNames;

This should be Vector&lt;String&gt;.

&gt; Source/JavaScriptCore/runtime/Options.cpp:362
&gt; +static inline bool isFunctionNameStart(char c)

This is not a correct definition of the start of a function name in JavaScript. Many important details are missing, including escapes and Unicode.

&gt; Source/JavaScriptCore/runtime/Options.cpp:367
&gt; +static inline bool isFunctionNameChar(char c)

Ditto.

&gt; Source/JavaScriptCore/runtime/Options.cpp:376
&gt; +    char c = *p;
&gt; +    while (c) {

It is better for a parser to operate on a set of characters and a length. In-band signaling of end-of-data often produces bugs.

&gt; Source/JavaScriptCore/runtime/Options.cpp:378
&gt; +        // Skip // or /* */ comment entries:
&gt; +        if (c &amp;&amp; c == &apos;/&apos;) {

If you factored this out into a helper function, you wouldn&apos;t need a comment to give it a name.

&gt; Source/JavaScriptCore/runtime/Options.cpp:381
&gt; +                continue;

continue is misleading / slow here. You want break.

&gt; Source/JavaScriptCore/runtime/Options.cpp:386
&gt; +

Extra newline.

You should put some explicit control flow here to make it easier to follow.

&gt; Source/JavaScriptCore/runtime/Options.cpp:432
&gt; +    std::unique_ptr&lt;char[]&gt; buffer(new char[size + 1]);

This should be &quot;auto buffer = make_unique&lt;&gt;...&quot;.

&gt; Source/JavaScriptCore/runtime/Options.cpp:459
&gt; +    if (filters.isInitialized &amp;&amp; !filters.functionNames.size())
&gt; +        return true;
&gt; +
&gt; +    if (!filters.isInitialized) {
&gt; +        if (!strncmp(filterOption, &quot;file:&quot;, 5))
&gt; +            parseFunctionNamesInFile(filters, &amp;filterOption[5]);
&gt; +        else
&gt; +            parseFunctionNamesInString(filters, filterOption);
&gt; +        filters.isInitialized = true;
&gt; +    }

Lazy initialization should be built into the class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996358</commentid>
    <comment_count>16</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2014-04-01 10:41:41 -0700</bug_when>
    <thetext>I will join in the discussion as well.  The tool seems bigger than the problem to solve. I concur with simple is better.

IF we add a file name filter, I suggest the following
* The function names need to be the &quot;cooked&quot; or hashed name, e.g. foo#fTeGe3, that a compiled function is known by internally. That way we handle global functions, etc.  This isn&apos;t too much to ask, since this option will likely only be used after some range pruning.

 - for command line options:
* A comma separated list of hash named functions for the option value.
 - or for a file:
* It should be one function per line.
* No parsing, just grab the whole line, prune whitespace and add to vector.
* A simple comment of leading # or // to kill a line (pick one).

If we add a function name file parser that is only used for a debugging option, we are likely adding single use code subject to bit rot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011070</commentid>
    <comment_count>17</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-05-22 15:42:26 -0700</bug_when>
    <thetext>https://bugs.webkit.org/show_bug.cgi?id=132437 took care of the implementation that we decided to implement in the end.  No need to do any further work on this.

*** This bug has been marked as a duplicate of bug 132437 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>228234</attachid>
            <date>2014-03-31 19:49:20 -0700</date>
            <delta_ts>2014-03-31 23:31:14 -0700</delta_ts>
            <desc>the patch.</desc>
            <filename>bug-131004.patch</filename>
            <type>text/plain</type>
            <size>9124</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY2NTYwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYwIEBA
CisyMDE0LTAzLTMxICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGQgYSAtLWZ1bmN0aW9uc1RvREZHQ29tcGlsZSBKU0Mgb3B0aW9uLgorICAgICAgICA8aHR0cHM6
Ly93ZWJraXQub3JnL2IvMTMxMDA0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFNvbWV0aW1lcywgLS1ieXRlY29kZVJhbmdlVG9ERkdDb21waWxlIGp1
c3QgaXNuJ3QgZW5vdWdoIHRvIGlzb2xhdGUgdGhlCisgICAgICAgIG1pbmltaXplIHRoZSBsaXN0
IG9mIGZ1bmN0aW9ucyB0byBjb21waWxlIGluIG9yZGVyIHRvIHJlcHJvZHVjZSBhbiBpc3N1ZQor
ICAgICAgICBpLmUuIHdoZW4gd2UgbmVlZCBtb3JlIHRoYW4gMSBmdW5jdGlvbiB0byBjb21waWxl
LCBhbmQgdGhleSBoYXZlIGJ5dGVjb2RlCisgICAgICAgIHNpemVzIGluIDIgZGlmZmVyZW50IHJh
bmdlcy4KKworICAgICAgICBUaGUgLS1mdW5jdGlvbnNUb0RGR0NvbXBpbGUgd2lsbCBwcm92aWRl
IDIgd2F5cyB0byBzcGVjaWZ5IGEgbGlzdCBvZgorICAgICAgICBmdW5jdGlvbnMgKGJ5IG5hbWUp
IHRvIGNvbXBpbGU6CisgICAgICAgIDEuIHNwZWNpZnkgdGhlIGxpc3Qgb24gdGhlIGNvbW1hbmQg
bGluZToKKyAgICAgICAgICAgLS1mdW5jdGlvbnNUb0RGR0NvbXBpbGU9ZnVuY3Rpb25BLGZ1bmN0
aW9uQixmdW5jdGlvbkMKKyAgICAgICAgMi4gcHJvdmlkZSBhIGxpc3Qgb2YgZnVuY3Rpb24gbmFt
ZXMgaW4gYSBmaWxlOgorICAgICAgICAgICAtLWZ1bmN0aW9uc1RvREZHQ29tcGlsZT1maWxlOm15
TGlzdE9mRnVuY3Rpb25OYW1lcy50eHQKKworICAgICAgICBJZiAtLWZ1bmN0aW9uc1RvREZHQ29t
cGlsZSBpcyB1bnNwZWNpZmllZCwgYWxsIGZ1bmN0aW9ucyB3aWxsIGJlIGNvbXBpbGVkCisgICAg
ICAgIChpLmUuIHVucmVzdHJpY3RlZCkgc3ViamVjdCB0byBvdGhlciBvcHRpb25zIGxpa2UgLS1i
eXRlY29kZVJhbmdlVG9ERkdDb21waWxlLgorCisgICAgICAgIFNvbWUgZGV0YWlscyBhYm91dCB0
aGUgY29tcGlsYXRpb24gbGlzdCBhbHNvOgorICAgICAgICAxLiBJdCBzdXBwb3J0IEMrKyBzdHls
ZSBjb21tZW50cy4KKyAgICAgICAgMi4gVGhlIGxpc3QgaXMgb25seSBwYXJzZWQgb25jZSBhdCBW
TSBzdGFydC4KKyAgICAgICAgMy4gRnVuY3Rpb24gbmFtZXMgYXJlIHNlcGFyYXRlZCBieSB3aGl0
ZSBzcGFjZSBjaGFyYWN0ZXJzIGFzIHdlbGwgYXMKKyAgICAgICAgICAgY2hhcmFjdGVycyBub3Qg
bGVnYWwgdG8gYmUgaW4gZnVuY3Rpb24gbmFtZXMuCisgICAgICAgIDQuICdcbicsICdccicsIFx0
JywgJyAnLCAnLCcgYXJlIGFsbCB0cmVhdGVkIGFzIHdoaXRlIHNwYWNlLgorCisgICAgICAgIEhl
bmNlLCB3ZSBjYW4gdXNlIGluZGVudGF0aW9ucywgbGluZSBicmVha3MsIGFuZCBjb21tZW50cyBp
biB0aGUgY29tcGlsYXRpb24KKyAgICAgICAgbGlzdC4gIEhlcmUncyBhbiBleGFtcGxlIG9mIHN1
Y2ggYSBmaWxlOgorCisgICAgICAgICAgICAvLyBTdGFydCBvZiBteUxpc3RPZkZ1bmN0aW9uTmFt
ZXMudHh0CisgICAgICAgICAgICBmdW5jdGlvbkEsCisgICAgICAgICAgICAvLyBmdW5jdGlvbkIK
KyAgICAgICAgICAgIGZ1bmN0aW9uQworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgIGZ1bmN0
aW9uRAorICAgICAgICAgICAgZnVuY3Rpb25FCisgICAgICAgICAgICAqLworICAgICAgICAgICAg
Ly8gRW5kIG9mIG15TGlzdE9mRnVuY3Rpb25OYW1lcy50eHQKKworICAgICAgICAqIGRmZy9ERkdD
YXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZ1bmN0aW9uc0ZpbHRlcjo6RnVu
Y3Rpb25zRmlsdGVyKToKKyAgICAgICAgKEpTQzo6REZHOjppc1doaXRlU3BhY2UpOgorICAgICAg
ICAoSlNDOjpERkc6OmlzRnVuY3Rpb25OYW1lU3RhcnQpOgorICAgICAgICAoSlNDOjpERkc6Omlz
RnVuY3Rpb25OYW1lQ2hhcik6CisgICAgICAgIChKU0M6OkRGRzo6cGFyc2VGdW5jdGlvbk5hbWVz
SW5TdHJpbmcpOgorICAgICAgICAoSlNDOjpERkc6OnBhcnNlRnVuY3Rpb25OYW1lc0luRmlsZSk6
CisgICAgICAgIChKU0M6OkRGRzo6c2xvd0luT0tUb0RGR0NvbXBpbGVMaXN0KToKKyAgICAgICAg
KEpTQzo6REZHOjppbk9LVG9ERkdDb21waWxlTGlzdCk6CisgICAgICAgIChKU0M6OkRGRzo6aXNT
dXBwb3J0ZWQpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5jcHA6CisgICAgICAgIChKU0M6
OnBhcnNlKToKKyAgICAgICAgKEpTQzo6T3B0aW9uczo6ZHVtcE9wdGlvbik6CisgICAgICAgICog
cnVudGltZS9PcHRpb25zLmg6CisKIDIwMTQtMDMtMzEgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9m
ZkBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTihyMTY2NDE1KTogSlNPYmplY3R7R2V0
LFNldH1Qcml2YXRlKCkgZG9uJ3Qgd29yayB3aXRoIHByb3hpZXMgb2JqZWN0cwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24g
MTY2NDM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMiArMzMsMTQ0IEBACiAjaW5jbHVkZSAiSW50ZXJwcmV0
ZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgorI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAKK3N0cnVjdCBGdW5jdGlvbnNGaWx0ZXIgeworICAgIEZ1bmN0aW9uc0ZpbHRlcigp
CisgICAgICAgIDogaXNJbml0aWFsaXplZChmYWxzZSkKKyAgICB7CisgICAgfQorCisgICAgYm9v
bCBpc0luaXRpYWxpemVkOworICAgIFZlY3RvcjxDU3RyaW5nPiBmdW5jdGlvbk5hbWVzOworfTsK
Kworc3RhdGljIGlubGluZSBib29sIGlzV2hpdGVTcGFjZShjaGFyIGMpCit7CisgICAgcmV0dXJu
IChjID09ICcgJykgfHwgKGMgPT0gJ1x0JykgfHwgKGMgPT0gJywnKSB8fCAoYyA9PSAnXG4nKSB8
fCAoYyA9PSAnXHInKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzRnVuY3Rpb25OYW1lU3Rh
cnQoY2hhciBjKQoreworICAgIHJldHVybiAoKGMgPj0gJ2EnKSAmJiAoYyA8PSAneicpKSB8fCAo
KGMgPj0gJ0EnKSAmJiAoYyA8PSAnWicpKSB8fCAoYyA9PSAnJCcpIHx8IChjID09ICdfJyk7Cit9
CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0Z1bmN0aW9uTmFtZUNoYXIoY2hhciBjKQoreworICAg
IHJldHVybiBpc0Z1bmN0aW9uTmFtZVN0YXJ0KGMpIHx8ICgoYyA+PSAnMCcpICYmIChjIDw9ICc5
JykpOworfQorCitzdGF0aWMgdm9pZCBwYXJzZUZ1bmN0aW9uTmFtZXNJblN0cmluZyhGdW5jdGlv
bnNGaWx0ZXImIGZpbHRlciwgY29uc3QgY2hhciogc3RyKQoreworICAgIGNvbnN0IGNoYXIqIHAg
PSBzdHI7CisgICAgY2hhciBjID0gKnA7CisgICAgd2hpbGUgKGMpIHsKKyAgICAgICAgLy8gU2tp
cCB3aGl0ZSBzcGFjZSAoaW5jbHVkaW5nIGNvbW1hcyBhbmQgbGluZSBzZXBhcmF0b3JzKToKKyAg
ICAgICAgd2hpbGUgKGMgJiYgaXNXaGl0ZVNwYWNlKGMpKQorICAgICAgICAgICAgYyA9ICooKytw
KTsKKworICAgICAgICAvLyBTa2lwIC8vIG9yIC8qICovIGNvbW1lbnQgZW50cmllczoKKyAgICAg
ICAgaWYgKGMgJiYgYyA9PSAnLycpIHsKKyAgICAgICAgICAgIGMgPSAqKCsrcCk7CisgICAgICAg
ICAgICBpZiAoIWMpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAo
YyA9PSAnLycpIHsKKyAgICAgICAgICAgICAgICBjID0gKigrK3ApOworICAgICAgICAgICAgICAg
IHdoaWxlIChjICYmIGMgIT0gJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgYyA9ICooKytwKTsK
KworICAgICAgICAgICAgfSBlbHNlIGlmIChjID09ICcqJykgeworICAgICAgICAgICAgICAgIGMg
PSAqKCsrcCk7CisgICAgICAgICAgICAgICAgd2hpbGUgKGMgJiYgYyAhPSAnKicpIHsKKyAgICAg
ICAgICAgICAgICAgICAgYyA9ICooKytwKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT0g
Jy8nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjID0gKigrK3ApOworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChpc0Z1bmN0aW9uTmFtZVN0YXJ0KGMpKSB7CisgICAgICAgICAgICBjb25zdCBj
aGFyKiBzdGFydCA9IHA7CisgICAgICAgICAgICBjID0gKigrK3ApOworICAgICAgICAgICAgd2hp
bGUgKGMgJiYgaXNGdW5jdGlvbk5hbWVDaGFyKGMpKQorICAgICAgICAgICAgICAgIGMgPSAqKCsr
cCk7CisgICAgICAgICAgICBmaWx0ZXIuZnVuY3Rpb25OYW1lcy5hcHBlbmQoQ1N0cmluZyhzdGFy
dCwgcCAtIHN0YXJ0KSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChjKQorICAgICAgICAgICAgYyA9ICooKytwKTsKKyAgICB9CisKKyAgICBpZiAoT3B0
aW9uczo6dmVyYm9zZUNvbXBpbGF0aW9uKCkpIHsKKyAgICAgICAgZGF0YUxvZygiRnVuY3Rpb25z
IHRvIERGRyBjb21waWxlOlxuIik7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmls
dGVyLmZ1bmN0aW9uTmFtZXMuc2l6ZSgpOyBpKyspCisgICAgICAgICAgICBkYXRhTG9nRigiICAg
WyV6dV0gJXNcbiIsIGkgKyAxLCBmaWx0ZXIuZnVuY3Rpb25OYW1lc1tpXS5kYXRhKCkpOworICAg
IH0KK30KKworc3RhdGljIHZvaWQgcGFyc2VGdW5jdGlvbk5hbWVzSW5GaWxlKEZ1bmN0aW9uc0Zp
bHRlciYgZmlsdGVyLCBjb25zdCBjaGFyKiBmaWxlbmFtZSkKK3sKKyAgICBGSUxFKiBmaWxlID0g
Zm9wZW4oZmlsZW5hbWUsICJyIik7CisgICAgaWYgKCFmaWxlKQorICAgICAgICByZXR1cm47CisK
KyAgICBmc2VlayhmaWxlLCAwLCBTRUVLX0VORCk7CisgICAgc2l6ZV90IHNpemUgPSBmdGVsbChm
aWxlKTsKKyAgICByZXdpbmQoZmlsZSk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Y2hhcltdPiBi
dWZmZXIobmV3IGNoYXJbc2l6ZSArIDFdKTsKKyAgICBpZiAoYnVmZmVyKSB7CisgICAgICAgIHNp
emVfdCByZXN1bHQgPSBmcmVhZChidWZmZXIuZ2V0KCksIDEsIHNpemUsIGZpbGUpOworICAgICAg
ICBpZiAocmVzdWx0ID09IHNpemUpIHsKKyAgICAgICAgICAgIGJ1ZmZlcltzaXplXSA9ICdcMCc7
CisgICAgICAgICAgICBwYXJzZUZ1bmN0aW9uTmFtZXNJblN0cmluZyhmaWx0ZXIsIGJ1ZmZlci5n
ZXQoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZmNsb3NlKGZpbGUpOworfQorCitzdGF0aWMg
Ym9vbCBzbG93SW5PS1RvREZHQ29tcGlsZUxpc3QoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7Cisg
ICAgY29uc3QgY2hhciogZmlsdGVyT3B0aW9uID0gT3B0aW9uczo6ZnVuY3Rpb25zVG9ERkdDb21w
aWxlKCk7CisgICAgQVNTRVJUKGZpbHRlck9wdGlvbik7CisKKyAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8RnVuY3Rpb25zRmlsdGVyPiBzdGF0aWNGaWx0ZXJzOworICAgIEZ1bmN0aW9uc0ZpbHRl
ciYgZmlsdGVycyA9IHN0YXRpY0ZpbHRlcnMuZ2V0KCk7CisgICAgaWYgKGZpbHRlcnMuaXNJbml0
aWFsaXplZCAmJiAhZmlsdGVycy5mdW5jdGlvbk5hbWVzLnNpemUoKSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICBpZiAoIWZpbHRlcnMuaXNJbml0aWFsaXplZCkgeworICAgICAgICBpZiAo
IXN0cm5jbXAoZmlsdGVyT3B0aW9uLCAiZmlsZToiLCA1KSkKKyAgICAgICAgICAgIHBhcnNlRnVu
Y3Rpb25OYW1lc0luRmlsZShmaWx0ZXJzLCAmZmlsdGVyT3B0aW9uWzVdKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgcGFyc2VGdW5jdGlvbk5hbWVzSW5TdHJpbmcoZmlsdGVycywgZmlsdGVy
T3B0aW9uKTsKKyAgICAgICAgZmlsdGVycy5pc0luaXRpYWxpemVkID0gdHJ1ZTsKKyAgICB9CisK
KyAgICBDU3RyaW5nIGluZmVycmVkTmFtZSA9IGNvZGVCbG9jay0+aW5mZXJyZWROYW1lKCk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWx0ZXJzLmZ1bmN0aW9uTmFtZXMuc2l6ZSgpOyBp
KyspIHsKKyAgICAgICAgaWYgKGluZmVycmVkTmFtZSA9PSBmaWx0ZXJzLmZ1bmN0aW9uTmFtZXNb
aV0pCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpbk9LVG9ERkdDb21waWxlTGlzdChDb2RlQmxvY2sq
IGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gIU9wdGlvbnM6OmZ1bmN0aW9uc1RvREZHQ29tcGls
ZSgpIHx8IHNsb3dJbk9LVG9ERkdDb21waWxlTGlzdChjb2RlQmxvY2spOworfQorCiBib29sIGlz
U3VwcG9ydGVkKENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIHJldHVybiBPcHRpb25zOjp1
c2VERkdKSVQoKQorICAgICAgICAmJiBpbk9LVG9ERkdDb21waWxlTGlzdChjb2RlQmxvY2spCiAg
ICAgICAgICYmIE1hY3JvQXNzZW1ibGVyOjpzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKQogICAgICAg
ICAmJiBPcHRpb25zOjpieXRlY29kZVJhbmdlVG9ERkdDb21waWxlKCkuaXNJblJhbmdlKGNvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnMuY3BwCShyZXZpc2lvbiAxNjY0MzkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYs
MTIgQEAgc3RhdGljIGJvb2wgcGFyc2UoY29uc3QgY2hhciogc3RyaW5nLCBPcAogICAgIHJldHVy
biB2YWx1ZS5pbml0KHN0cmluZyk7CiB9CiAKK3N0YXRpYyBib29sIHBhcnNlKGNvbnN0IGNoYXIq
IHN0cmluZywgY29uc3QgY2hhciomIHZhbHVlKQoreworICAgIHZhbHVlID0gc3RyaW5nOworICAg
IHJldHVybiB0cnVlOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogYm9vbCBvdmVycmlkZU9w
dGlvbldpdGhIZXVyaXN0aWMoVCYgdmFyaWFibGUsIGNvbnN0IGNoYXIqIG5hbWUpCiB7CkBAIC0z
MzAsNiArMzM2LDEzIEBAIHZvaWQgT3B0aW9uczo6ZHVtcE9wdGlvbihPcHRpb25JRCBpZCwgRkkK
ICAgICBjYXNlIG9wdGlvblJhbmdlVHlwZToKICAgICAgICAgZnByaW50ZihzdHJlYW0sICIlcyIs
IHNfb3B0aW9uc1tpZF0udS5vcHRpb25SYW5nZVZhbC5yYW5nZVN0cmluZygpKTsKICAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBvcHRpb25TdHJpbmdUeXBlOiB7CisgICAgICAgIGNvbnN0IGNoYXIq
IG9wdGlvbiA9IHNfb3B0aW9uc1tpZF0udS5vcHRpb25TdHJpbmdWYWw7CisgICAgICAgIGlmICgh
b3B0aW9uKQorICAgICAgICAgICAgb3B0aW9uID0gIiI7CisgICAgICAgIGZwcmludGYoc3RyZWFt
LCAiJXMiLCBvcHRpb24pOworICAgICAgICBicmVhazsKKyAgICB9CiAgICAgfQogICAgIGZwcmlu
dGYoc3RyZWFtLCAiJXMiLCBmb290ZXIpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMTY2NDM5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC04OCw2ICs4OCw3IEBAIHBy
aXZhdGU6CiB9OwogCiB0eXBlZGVmIE9wdGlvblJhbmdlIG9wdGlvblJhbmdlOwordHlwZWRlZiBj
b25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAKICNkZWZpbmUgSlNDX09QVElPTlModikgXAogICAg
IHYoYm9vbCwgdXNlTExJbnQsICB0cnVlKSBcCkBAIC0xMTUsNiArMTE2LDcgQEAgdHlwZWRlZiBP
cHRpb25SYW5nZSBvcHRpb25SYW5nZTsKICAgICB2KGJvb2wsIHNob3dGVExEaXNhc3NlbWJseSwg
ZmFsc2UpIFwKICAgICB2KGJvb2wsIHNob3dBbGxERkdOb2RlcywgZmFsc2UpIFwKICAgICB2KG9w
dGlvblJhbmdlLCBieXRlY29kZVJhbmdlVG9ERkdDb21waWxlLCAwKSBcCisgICAgdihvcHRpb25T
dHJpbmcsIGZ1bmN0aW9uc1RvREZHQ29tcGlsZSwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgZHVt
cEJ5dGVjb2RlQXRERkdUaW1lLCBmYWxzZSkgXAogICAgIHYoYm9vbCwgZHVtcEdyYXBoQXRFYWNo
UGhhc2UsIGZhbHNlKSBcCiAgICAgdihib29sLCB2ZXJib3NlREZHQnl0ZUNvZGVQYXJzaW5nLCBm
YWxzZSkgXApAQCAtMjk5LDYgKzMwMSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGRvdWJsZVR5cGUs
CiAgICAgICAgIGludDMyVHlwZSwKICAgICAgICAgb3B0aW9uUmFuZ2VUeXBlLAorICAgICAgICBv
cHRpb25TdHJpbmdUeXBlLAogICAgIH07CiAKICAgICAvLyBGb3Igc3RvcmluZyBmb3IgYW4gb3B0
aW9uIHZhbHVlOgpAQCAtMzA5LDYgKzMxMiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBkb3Vi
bGUgZG91YmxlVmFsOwogICAgICAgICAgICAgaW50MzIgaW50MzJWYWw7CiAgICAgICAgICAgICBP
cHRpb25SYW5nZSBvcHRpb25SYW5nZVZhbDsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIG9wdGlv
blN0cmluZ1ZhbDsKICAgICAgICAgfSB1OwogICAgICAgICBib29sIGRpZE92ZXJyaWRlOwogICAg
IH07Cg==
</data>
<flag name="review"
          id="252522"
          type_id="1"
          status="-"
          setter="mark.lam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>228246</attachid>
            <date>2014-03-31 23:31:14 -0700</date>
            <delta_ts>2014-04-01 08:14:11 -0700</delta_ts>
            <desc>patch 2</desc>
            <filename>bug-131004.patch</filename>
            <type>text/plain</type>
            <size>10014</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY2NTY2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYwIEBA
CisyMDE0LTAzLTMxICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGQgYSAtLWZ1bmN0aW9uc1RvREZHQ29tcGlsZSBKU0Mgb3B0aW9uLgorICAgICAgICA8aHR0cHM6
Ly93ZWJraXQub3JnL2IvMTMxMDA0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFNvbWV0aW1lcywgLS1ieXRlY29kZVJhbmdlVG9ERkdDb21waWxlIGp1
c3QgaXNuJ3QgZW5vdWdoIHRvIGlzb2xhdGUgdGhlCisgICAgICAgIG1pbmltYWwgdGhlIGxpc3Qg
b2YgZnVuY3Rpb25zIHRvIGNvbXBpbGUgaW4gb3JkZXIgdG8gcmVwcm9kdWNlIGFuIGlzc3VlCisg
ICAgICAgIGkuZS4gd2hlbiB3ZSBuZWVkIG1vcmUgdGhhbiAxIGZ1bmN0aW9uIHRvIGNvbXBpbGUs
IGFuZCB0aGV5IGhhdmUgYnl0ZWNvZGUKKyAgICAgICAgc2l6ZXMgaW4gMiBkaWZmZXJlbnQgcmFu
Z2VzLgorCisgICAgICAgIFRoZSAtLWZ1bmN0aW9uc1RvREZHQ29tcGlsZSB3aWxsIHByb3ZpZGUg
MiB3YXlzIHRvIHNwZWNpZnkgYSBsaXN0IG9mCisgICAgICAgIGZ1bmN0aW9ucyAoYnkgbmFtZSkg
dG8gY29tcGlsZToKKyAgICAgICAgMS4gc3BlY2lmeSB0aGUgbGlzdCBvbiB0aGUgY29tbWFuZCBs
aW5lOgorICAgICAgICAgICAtLWZ1bmN0aW9uc1RvREZHQ29tcGlsZT1mdW5jdGlvbkEsZnVuY3Rp
b25CLGZ1bmN0aW9uQworICAgICAgICAyLiBwcm92aWRlIGEgbGlzdCBvZiBmdW5jdGlvbiBuYW1l
cyBpbiBhIGZpbGU6CisgICAgICAgICAgIC0tZnVuY3Rpb25zVG9ERkdDb21waWxlPWZpbGU6bXlM
aXN0T2ZGdW5jdGlvbk5hbWVzLnR4dAorCisgICAgICAgIElmIC0tZnVuY3Rpb25zVG9ERkdDb21w
aWxlIGlzIHVuc3BlY2lmaWVkLCBhbGwgZnVuY3Rpb25zIHdpbGwgYmUgY29tcGlsZWQKKyAgICAg
ICAgKGkuZS4gdW5yZXN0cmljdGVkKSBzdWJqZWN0IHRvIG90aGVyIG9wdGlvbnMgbGlrZSAtLWJ5
dGVjb2RlUmFuZ2VUb0RGR0NvbXBpbGUuCisKKyAgICAgICAgU29tZSBkZXRhaWxzIGFib3V0IHRo
ZSBjb21waWxhdGlvbiBsaXN0IGFsc286CisgICAgICAgIDEuIEl0IHN1cHBvcnQgQysrIHN0eWxl
IGNvbW1lbnRzLgorICAgICAgICAyLiBUaGUgbGlzdCBpcyBvbmx5IHBhcnNlZCBvbmNlIGF0IFZN
IHN0YXJ0LgorICAgICAgICAzLiBGdW5jdGlvbiBuYW1lcyBhcmUgc2VwYXJhdGVkIGJ5IHdoaXRl
IHNwYWNlIGNoYXJhY3RlcnMgYXMgd2VsbCBhcworICAgICAgICAgICBjaGFyYWN0ZXJzIG5vdCBs
ZWdhbCB0byBiZSBpbiBmdW5jdGlvbiBuYW1lcy4KKyAgICAgICAgNC4gJ1xuJywgJ1xyJywgXHQn
LCAnICcsICcsJyBhcmUgYWxsIHRyZWF0ZWQgYXMgd2hpdGUgc3BhY2UuCisKKyAgICAgICAgSGVu
Y2UsIHdlIGNhbiB1c2UgaW5kZW50YXRpb25zLCBsaW5lIGJyZWFrcywgYW5kIGNvbW1lbnRzIGlu
IHRoZSBjb21waWxhdGlvbgorICAgICAgICBsaXN0LiAgSGVyZSdzIGFuIGV4YW1wbGUgb2Ygc3Vj
aCBhIGZpbGU6CisKKyAgICAgICAgICAgIC8vIFN0YXJ0IG9mIG15TGlzdE9mRnVuY3Rpb25OYW1l
cy50eHQKKyAgICAgICAgICAgIGZ1bmN0aW9uQSwKKyAgICAgICAgICAgIC8vIGZ1bmN0aW9uQgor
ICAgICAgICAgICAgZnVuY3Rpb25DCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgZnVuY3Rp
b25ECisgICAgICAgICAgICBmdW5jdGlvbkUKKyAgICAgICAgICAgICovCisgICAgICAgICAgICAv
LyBFbmQgb2YgbXlMaXN0T2ZGdW5jdGlvbk5hbWVzLnR4dAorCisgICAgICAgICogZGZnL0RGR0Nh
cGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6aXNTdXBwb3J0ZWQpOgorICAgICAg
ICAqIHJ1bnRpbWUvT3B0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OnBhcnNlKToKKyAgICAgICAg
KEpTQzo6T3B0aW9uczo6ZHVtcE9wdGlvbik6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uc0ZpbHRl
cjo6RnVuY3Rpb25zRmlsdGVyKToKKyAgICAgICAgKEpTQzo6aXNXaGl0ZVNwYWNlKToKKyAgICAg
ICAgKEpTQzo6aXNGdW5jdGlvbk5hbWVTdGFydCk6CisgICAgICAgIChKU0M6OmlzRnVuY3Rpb25O
YW1lQ2hhcik6CisgICAgICAgIChKU0M6OnBhcnNlRnVuY3Rpb25OYW1lc0luU3RyaW5nKToKKyAg
ICAgICAgKEpTQzo6cGFyc2VGdW5jdGlvbk5hbWVzSW5GaWxlKToKKyAgICAgICAgKEpTQzo6T3B0
aW9uczo6c2xvd0luT0tUb0RGR0NvbXBpbGVMaXN0KToKKyAgICAgICAgKiBydW50aW1lL09wdGlv
bnMuaDoKKyAgICAgICAgKEpTQzo6T3B0aW9uczo6aW5PS1RvREZHQ29tcGlsZUxpc3QpOgorCiAy
MDE0LTAzLTMxICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAg
IFJFR1JFU1NJT04ocjE2NjQxNSk6IEpTT2JqZWN0e0dldCxTZXR9UHJpdmF0ZSgpIGRvbid0IHdv
cmsgd2l0aCBwcm94aWVzIG9iamVjdHMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE2NjQzOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAs
NiArNDAsNyBAQCBib29sIGlzU3VwcG9ydGVkKENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAg
IHJldHVybiBPcHRpb25zOjp1c2VERkdKSVQoKQogICAgICAgICAmJiBNYWNyb0Fzc2VtYmxlcjo6
c3VwcG9ydHNGbG9hdGluZ1BvaW50KCkKKyAgICAgICAgJiYgT3B0aW9uczo6aW5PS1RvREZHQ29t
cGlsZUxpc3QoY29kZUJsb2NrKQogICAgICAgICAmJiBPcHRpb25zOjpieXRlY29kZVJhbmdlVG9E
RkdDb21waWxlKCkuaXNJblJhbmdlKGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpKTsKIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHJldmlz
aW9uIDE2NjQzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMiArMjYsMTQgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJPcHRpb25zLmgiCiAKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRl
ICJIZWFwU3RhdGlzdGljcy5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxsaW1p
dHM+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8
d3RmL0RhdGFMb2cuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRl
IDx3dGYvTnVtYmVyT2ZDb3Jlcy5oPgogI2luY2x1ZGUgPHd0Zi9QYWdlQmxvY2suaD4KICNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CkBAIC03Niw2ICs3OCwxMiBAQCBzdGF0aWMgYm9vbCBw
YXJzZShjb25zdCBjaGFyKiBzdHJpbmcsIE9wCiAgICAgcmV0dXJuIHZhbHVlLmluaXQoc3RyaW5n
KTsKIH0KIAorc3RhdGljIGJvb2wgcGFyc2UoY29uc3QgY2hhciogc3RyaW5nLCBjb25zdCBjaGFy
KiYgdmFsdWUpCit7CisgICAgdmFsdWUgPSBzdHJpbmc7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBib29sIG92ZXJyaWRlT3B0aW9uV2l0aEhldXJpc3RpYyhU
JiB2YXJpYWJsZSwgY29uc3QgY2hhciogbmFtZSkKIHsKQEAgLTMzMCw5ICszMzgsMTQwIEBAIHZv
aWQgT3B0aW9uczo6ZHVtcE9wdGlvbihPcHRpb25JRCBpZCwgRkkKICAgICBjYXNlIG9wdGlvblJh
bmdlVHlwZToKICAgICAgICAgZnByaW50ZihzdHJlYW0sICIlcyIsIHNfb3B0aW9uc1tpZF0udS5v
cHRpb25SYW5nZVZhbC5yYW5nZVN0cmluZygpKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBv
cHRpb25TdHJpbmdUeXBlOiB7CisgICAgICAgIGNvbnN0IGNoYXIqIG9wdGlvbiA9IHNfb3B0aW9u
c1tpZF0udS5vcHRpb25TdHJpbmdWYWw7CisgICAgICAgIGlmICghb3B0aW9uKQorICAgICAgICAg
ICAgb3B0aW9uID0gIiI7CisgICAgICAgIGZwcmludGYoc3RyZWFtLCAiJXMiLCBvcHRpb24pOwor
ICAgICAgICBicmVhazsKKyAgICB9CiAgICAgfQogICAgIGZwcmludGYoc3RyZWFtLCAiJXMiLCBm
b290ZXIpOwogfQogCitzdHJ1Y3QgRnVuY3Rpb25zRmlsdGVyIHsKKyAgICBGdW5jdGlvbnNGaWx0
ZXIoKQorICAgICAgICA6IGlzSW5pdGlhbGl6ZWQoZmFsc2UpCisgICAgeworICAgIH0KKworICAg
IGJvb2wgaXNJbml0aWFsaXplZDsKKyAgICBWZWN0b3I8Q1N0cmluZz4gZnVuY3Rpb25OYW1lczsK
K307CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1doaXRlU3BhY2UoY2hhciBjKQoreworICAgIHJl
dHVybiAoYyA9PSAnICcpIHx8IChjID09ICdcdCcpIHx8IChjID09ICcsJykgfHwgKGMgPT0gJ1xu
JykgfHwgKGMgPT0gJ1xyJyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0Z1bmN0aW9uTmFt
ZVN0YXJ0KGNoYXIgYykKK3sKKyAgICByZXR1cm4gKChjID49ICdhJykgJiYgKGMgPD0gJ3onKSkg
fHwgKChjID49ICdBJykgJiYgKGMgPD0gJ1onKSkgfHwgKGMgPT0gJyQnKSB8fCAoYyA9PSAnXycp
OworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNGdW5jdGlvbk5hbWVDaGFyKGNoYXIgYykKK3sK
KyAgICByZXR1cm4gaXNGdW5jdGlvbk5hbWVTdGFydChjKSB8fCAoKGMgPj0gJzAnKSAmJiAoYyA8
PSAnOScpKTsKK30KKworc3RhdGljIHZvaWQgcGFyc2VGdW5jdGlvbk5hbWVzSW5TdHJpbmcoRnVu
Y3Rpb25zRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IGNoYXIqIHN0cikKK3sKKyAgICBjb25zdCBjaGFy
KiBwID0gc3RyOworICAgIGNoYXIgYyA9ICpwOworICAgIHdoaWxlIChjKSB7CisgICAgICAgIC8v
IFNraXAgd2hpdGUgc3BhY2UgKGluY2x1ZGluZyBjb21tYXMgYW5kIGxpbmUgc2VwYXJhdG9ycyk6
CisgICAgICAgIHdoaWxlIChjICYmIGlzV2hpdGVTcGFjZShjKSkKKyAgICAgICAgICAgIGMgPSAq
KCsrcCk7CisKKyAgICAgICAgLy8gU2tpcCAvLyBvciAvKiAqLyBjb21tZW50IGVudHJpZXM6Cisg
ICAgICAgIGlmIChjICYmIGMgPT0gJy8nKSB7CisgICAgICAgICAgICBjID0gKigrK3ApOworICAg
ICAgICAgICAgaWYgKCFjKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
aWYgKGMgPT0gJy8nKSB7CisgICAgICAgICAgICAgICAgYyA9ICooKytwKTsKKyAgICAgICAgICAg
ICAgICB3aGlsZSAoYyAmJiBjICE9ICdcbicpCisgICAgICAgICAgICAgICAgICAgIGMgPSAqKCsr
cCk7CisKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnKicpIHsKKyAgICAgICAgICAgICAg
ICBjID0gKigrK3ApOworICAgICAgICAgICAgICAgIHdoaWxlIChjICYmIGMgIT0gJyonKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGMgPSAqKCsrcCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChj
ID09ICcvJykgeworICAgICAgICAgICAgICAgICAgICAgICAgYyA9ICooKytwKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoaXNGdW5jdGlvbk5hbWVTdGFydChjKSkgeworICAgICAgICAgICAgY29u
c3QgY2hhciogc3RhcnQgPSBwOworICAgICAgICAgICAgYyA9ICooKytwKTsKKyAgICAgICAgICAg
IHdoaWxlIChjICYmIGlzRnVuY3Rpb25OYW1lQ2hhcihjKSkKKyAgICAgICAgICAgICAgICBjID0g
KigrK3ApOworICAgICAgICAgICAgZmlsdGVyLmZ1bmN0aW9uTmFtZXMuYXBwZW5kKENTdHJpbmco
c3RhcnQsIHAgLSBzdGFydCkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoYykKKyAgICAgICAgICAgIGMgPSAqKCsrcCk7CisgICAgfQorCisgICAgaWYg
KE9wdGlvbnM6OnZlcmJvc2VDb21waWxhdGlvbigpKSB7CisgICAgICAgIGRhdGFMb2coIkZ1bmN0
aW9ucyB0byBERkcgY29tcGlsZTpcbiIpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGZpbHRlci5mdW5jdGlvbk5hbWVzLnNpemUoKTsgaSsrKQorICAgICAgICAgICAgZGF0YUxvZ0Yo
IiAgIFslenVdICVzXG4iLCBpICsgMSwgZmlsdGVyLmZ1bmN0aW9uTmFtZXNbaV0uZGF0YSgpKTsK
KyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlRnVuY3Rpb25OYW1lc0luRmlsZShGdW5jdGlv
bnNGaWx0ZXImIGZpbHRlciwgY29uc3QgY2hhciogZmlsZW5hbWUpCit7CisgICAgRklMRSogZmls
ZSA9IGZvcGVuKGZpbGVuYW1lLCAiciIpOworICAgIGlmICghZmlsZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgZnNlZWsoZmlsZSwgMCwgU0VFS19FTkQpOworICAgIHNpemVfdCBzaXplID0gZnRl
bGwoZmlsZSk7CisgICAgcmV3aW5kKGZpbGUpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPGNoYXJb
XT4gYnVmZmVyKG5ldyBjaGFyW3NpemUgKyAxXSk7CisgICAgaWYgKGJ1ZmZlcikgeworICAgICAg
ICBzaXplX3QgcmVzdWx0ID0gZnJlYWQoYnVmZmVyLmdldCgpLCAxLCBzaXplLCBmaWxlKTsKKyAg
ICAgICAgaWYgKHJlc3VsdCA9PSBzaXplKSB7CisgICAgICAgICAgICBidWZmZXJbc2l6ZV0gPSAn
XDAnOworICAgICAgICAgICAgcGFyc2VGdW5jdGlvbk5hbWVzSW5TdHJpbmcoZmlsdGVyLCBidWZm
ZXIuZ2V0KCkpOworICAgICAgICB9CisgICAgfQorICAgIGZjbG9zZShmaWxlKTsKK30KKworYm9v
bCBPcHRpb25zOjpzbG93SW5PS1RvREZHQ29tcGlsZUxpc3QoQ29kZUJsb2NrKiBjb2RlQmxvY2sp
Cit7CisgICAgY29uc3QgY2hhciogZmlsdGVyT3B0aW9uID0gT3B0aW9uczo6ZnVuY3Rpb25zVG9E
RkdDb21waWxlKCk7CisgICAgQVNTRVJUKGZpbHRlck9wdGlvbik7CisKKyAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8RnVuY3Rpb25zRmlsdGVyPiBzdGF0aWNGaWx0ZXJzOworICAgIEZ1bmN0aW9u
c0ZpbHRlciYgZmlsdGVycyA9IHN0YXRpY0ZpbHRlcnMuZ2V0KCk7CisgICAgaWYgKGZpbHRlcnMu
aXNJbml0aWFsaXplZCAmJiAhZmlsdGVycy5mdW5jdGlvbk5hbWVzLnNpemUoKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBpZiAoIWZpbHRlcnMuaXNJbml0aWFsaXplZCkgeworICAgICAg
ICBpZiAoIXN0cm5jbXAoZmlsdGVyT3B0aW9uLCAiZmlsZToiLCA1KSkKKyAgICAgICAgICAgIHBh
cnNlRnVuY3Rpb25OYW1lc0luRmlsZShmaWx0ZXJzLCAmZmlsdGVyT3B0aW9uWzVdKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgcGFyc2VGdW5jdGlvbk5hbWVzSW5TdHJpbmcoZmlsdGVycywg
ZmlsdGVyT3B0aW9uKTsKKyAgICAgICAgZmlsdGVycy5pc0luaXRpYWxpemVkID0gdHJ1ZTsKKyAg
ICB9CisKKyAgICBDU3RyaW5nIGluZmVycmVkTmFtZSA9IGNvZGVCbG9jay0+aW5mZXJyZWROYW1l
KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWx0ZXJzLmZ1bmN0aW9uTmFtZXMuc2l6
ZSgpOyBpKyspIHsKKyAgICAgICAgaWYgKGluZmVycmVkTmFtZSA9PSBmaWx0ZXJzLmZ1bmN0aW9u
TmFtZXNbaV0pCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZh
bHNlOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMTY2NDM5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw4IEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBDb2RlQmxvY2s7CisKIC8vIEhvdyBkbyBKU0Mg
Vk0gb3B0aW9ucyB3b3JrPwogLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09CiAvLyBUaGUg
SlNDX09QVElPTlMoKSBtYWNybyBiZWxvdyBkZWZpbmVzIGEgbGlzdCBvZiBhbGwgSlNDIG9wdGlv
bnMgaW4gdXNlLApAQCAtODgsNiArOTAsNyBAQCBwcml2YXRlOgogfTsKIAogdHlwZWRlZiBPcHRp
b25SYW5nZSBvcHRpb25SYW5nZTsKK3R5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwog
CiAjZGVmaW5lIEpTQ19PUFRJT05TKHYpIFwKICAgICB2KGJvb2wsIHVzZUxMSW50LCAgdHJ1ZSkg
XApAQCAtMTE1LDYgKzExOCw3IEBAIHR5cGVkZWYgT3B0aW9uUmFuZ2Ugb3B0aW9uUmFuZ2U7CiAg
ICAgdihib29sLCBzaG93RlRMRGlzYXNzZW1ibHksIGZhbHNlKSBcCiAgICAgdihib29sLCBzaG93
QWxsREZHTm9kZXMsIGZhbHNlKSBcCiAgICAgdihvcHRpb25SYW5nZSwgYnl0ZWNvZGVSYW5nZVRv
REZHQ29tcGlsZSwgMCkgXAorICAgIHYob3B0aW9uU3RyaW5nLCBmdW5jdGlvbnNUb0RGR0NvbXBp
bGUsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGR1bXBCeXRlY29kZUF0REZHVGltZSwgZmFsc2Up
IFwKICAgICB2KGJvb2wsIGR1bXBHcmFwaEF0RWFjaFBoYXNlLCBmYWxzZSkgXAogICAgIHYoYm9v
bCwgdmVyYm9zZURGR0J5dGVDb2RlUGFyc2luZywgZmFsc2UpIFwKQEAgLTI5Miw2ICsyOTYsMTEg
QEAgcHVibGljOgogICAgIEpTQ19PUFRJT05TKEZPUl9FQUNIX09QVElPTikKICN1bmRlZiBGT1Jf
RUFDSF9PUFRJT04KIAorICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBpbk9LVG9ERkdDb21waWxlTGlz
dChDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICB7CisgICAgICAgIHJldHVybiAhZnVuY3Rpb25z
VG9ERkdDb21waWxlKCkgfHwgc2xvd0luT0tUb0RGR0NvbXBpbGVMaXN0KGNvZGVCbG9jayk7Cisg
ICAgfQorCiBwcml2YXRlOgogICAgIGVudW0gRW50cnlUeXBlIHsKICAgICAgICAgYm9vbFR5cGUs
CkBAIC0yOTksNiArMzA4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgZG91YmxlVHlwZSwKICAgICAg
ICAgaW50MzJUeXBlLAogICAgICAgICBvcHRpb25SYW5nZVR5cGUsCisgICAgICAgIG9wdGlvblN0
cmluZ1R5cGUsCiAgICAgfTsKIAogICAgIC8vIEZvciBzdG9yaW5nIGZvciBhbiBvcHRpb24gdmFs
dWU6CkBAIC0zMDksNiArMzE5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGRvdWJsZSBkb3Vi
bGVWYWw7CiAgICAgICAgICAgICBpbnQzMiBpbnQzMlZhbDsKICAgICAgICAgICAgIE9wdGlvblJh
bmdlIG9wdGlvblJhbmdlVmFsOworICAgICAgICAgICAgY29uc3QgY2hhciogb3B0aW9uU3RyaW5n
VmFsOwogICAgICAgICB9IHU7CiAgICAgICAgIGJvb2wgZGlkT3ZlcnJpZGU7CiAgICAgfTsKQEAg
LTMyNyw2ICszMzgsOCBAQCBwcml2YXRlOgogICAgIEpTQ19PUFRJT05TKEZPUl9FQUNIX09QVElP
TikKICN1bmRlZiBGT1JfRUFDSF9PUFRJT04KIAorICAgIHN0YXRpYyBib29sIHNsb3dJbk9LVG9E
RkdDb21waWxlTGlzdChDb2RlQmxvY2sqKTsKKwogICAgIC8vIERlY2xhcmUgdGhlIHNpbmdsZXRv
biBpbnN0YW5jZSBvZiB0aGUgb3B0aW9ucyBzdG9yZToKICAgICBKU19FWFBPUlREQVRBIHN0YXRp
YyBFbnRyeSBzX29wdGlvbnNbbnVtYmVyT2ZPcHRpb25zXTsKICAgICBzdGF0aWMgY29uc3QgRW50
cnlJbmZvIHNfb3B0aW9uc0luZm9bbnVtYmVyT2ZPcHRpb25zXTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>228286</attachid>
            <date>2014-04-01 08:14:11 -0700</date>
            <delta_ts>2014-04-01 10:11:29 -0700</delta_ts>
            <desc>patch 3: removed unnecessary white space checks</desc>
            <filename>bug-131004.patch</filename>
            <type>text/plain</type>
            <size>9679</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY2NTY2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBA
CisyMDE0LTAzLTMxICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGQgYSAtLWZ1bmN0aW9uc1RvREZHQ29tcGlsZSBKU0Mgb3B0aW9uLgorICAgICAgICA8aHR0cHM6
Ly93ZWJraXQub3JnL2IvMTMxMDA0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFNvbWV0aW1lcywgLS1ieXRlY29kZVJhbmdlVG9ERkdDb21waWxlIGp1
c3QgaXNuJ3QgZW5vdWdoIHRvIGlzb2xhdGUgdGhlCisgICAgICAgIG1pbmltYWwgdGhlIGxpc3Qg
b2YgZnVuY3Rpb25zIHRvIGNvbXBpbGUgaW4gb3JkZXIgdG8gcmVwcm9kdWNlIGFuIGlzc3VlCisg
ICAgICAgIGkuZS4gd2hlbiB3ZSBuZWVkIG1vcmUgdGhhbiAxIGZ1bmN0aW9uIHRvIGNvbXBpbGUs
IGFuZCB0aGV5IGhhdmUgYnl0ZWNvZGUKKyAgICAgICAgc2l6ZXMgaW4gMiBkaWZmZXJlbnQgcmFu
Z2VzLgorCisgICAgICAgIFRoZSAtLWZ1bmN0aW9uc1RvREZHQ29tcGlsZSB3aWxsIHByb3ZpZGUg
MiB3YXlzIHRvIHNwZWNpZnkgYSBsaXN0IG9mCisgICAgICAgIGZ1bmN0aW9ucyAoYnkgbmFtZSkg
dG8gY29tcGlsZToKKyAgICAgICAgMS4gc3BlY2lmeSB0aGUgbGlzdCBvbiB0aGUgY29tbWFuZCBs
aW5lOgorICAgICAgICAgICAtLWZ1bmN0aW9uc1RvREZHQ29tcGlsZT1mdW5jdGlvbkEsZnVuY3Rp
b25CLGZ1bmN0aW9uQworICAgICAgICAyLiBwcm92aWRlIGEgbGlzdCBvZiBmdW5jdGlvbiBuYW1l
cyBpbiBhIGZpbGU6CisgICAgICAgICAgIC0tZnVuY3Rpb25zVG9ERkdDb21waWxlPWZpbGU6bXlM
aXN0T2ZGdW5jdGlvbk5hbWVzLnR4dAorCisgICAgICAgIElmIC0tZnVuY3Rpb25zVG9ERkdDb21w
aWxlIGlzIHVuc3BlY2lmaWVkLCBhbGwgZnVuY3Rpb25zIHdpbGwgYmUgY29tcGlsZWQKKyAgICAg
ICAgKGkuZS4gdW5yZXN0cmljdGVkKSBzdWJqZWN0IHRvIG90aGVyIG9wdGlvbnMgbGlrZSAtLWJ5
dGVjb2RlUmFuZ2VUb0RGR0NvbXBpbGUuCisKKyAgICAgICAgU29tZSBkZXRhaWxzIGFib3V0IHRo
ZSBjb21waWxhdGlvbiBsaXN0IGFsc286CisgICAgICAgIDEuIEl0IHN1cHBvcnQgQysrIHN0eWxl
IGNvbW1lbnRzLgorICAgICAgICAyLiBUaGUgbGlzdCBpcyBvbmx5IHBhcnNlZCBvbmNlIGF0IFZN
IHN0YXJ0LgorICAgICAgICAzLiBGdW5jdGlvbiBuYW1lcyBhcmUgc2VwYXJhdGVkIGFueSBjaGFy
YWN0ZXJzIG5vdCBsZWdhbCB0byBiZSBpbiBmdW5jdGlvbiBuYW1lcy4KKworICAgICAgICBIZW5j
ZSwgd2UgY2FuIHVzZSBpbmRlbnRhdGlvbnMsIGxpbmUgYnJlYWtzLCBhbmQgY29tbWVudHMgaW4g
dGhlIGNvbXBpbGF0aW9uCisgICAgICAgIGxpc3QuICBIZXJlJ3MgYW4gZXhhbXBsZSBvZiBzdWNo
IGEgZmlsZToKKworICAgICAgICAgICAgLy8gU3RhcnQgb2YgbXlMaXN0T2ZGdW5jdGlvbk5hbWVz
LnR4dAorICAgICAgICAgICAgZnVuY3Rpb25BLAorICAgICAgICAgICAgLy8gZnVuY3Rpb25CCisg
ICAgICAgICAgICBmdW5jdGlvbkMKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICBmdW5jdGlv
bkQKKyAgICAgICAgICAgIGZ1bmN0aW9uRQorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIC8v
IEVuZCBvZiBteUxpc3RPZkZ1bmN0aW9uTmFtZXMudHh0CisKKyAgICAgICAgKiBkZmcvREZHQ2Fw
YWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjppc1N1cHBvcnRlZCk6CisgICAgICAg
ICogcnVudGltZS9PcHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6cGFyc2UpOgorICAgICAgICAo
SlNDOjpPcHRpb25zOjpkdW1wT3B0aW9uKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25zRmlsdGVy
OjpGdW5jdGlvbnNGaWx0ZXIpOgorICAgICAgICAoSlNDOjppc0Z1bmN0aW9uTmFtZVN0YXJ0KToK
KyAgICAgICAgKEpTQzo6aXNGdW5jdGlvbk5hbWVDaGFyKToKKyAgICAgICAgKEpTQzo6cGFyc2VG
dW5jdGlvbk5hbWVzSW5TdHJpbmcpOgorICAgICAgICAoSlNDOjpwYXJzZUZ1bmN0aW9uTmFtZXNJ
bkZpbGUpOgorICAgICAgICAoSlNDOjpPcHRpb25zOjpzbG93SW5PS1RvREZHQ29tcGlsZUxpc3Qp
OgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorICAgICAgICAoSlNDOjpPcHRpb25zOjpp
bk9LVG9ERkdDb21waWxlTGlzdCk6CisKIDIwMTQtMDMtMzEgIE1pY2hhZWwgU2Fib2ZmICA8bXNh
Ym9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTihyMTY2NDE1KTogSlNPYmplY3R7
R2V0LFNldH1Qcml2YXRlKCkgZG9uJ3Qgd29yayB3aXRoIHByb3hpZXMgb2JqZWN0cwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNp
b24gMTY2NDM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBAIGJvb2wgaXNTdXBwb3J0ZWQoQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgcmV0dXJuIE9wdGlvbnM6OnVzZURGR0pJVCgpCiAg
ICAgICAgICYmIE1hY3JvQXNzZW1ibGVyOjpzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKQorICAgICAg
ICAmJiBPcHRpb25zOjppbk9LVG9ERkdDb21waWxlTGlzdChjb2RlQmxvY2spCiAgICAgICAgICYm
IE9wdGlvbnM6OmJ5dGVjb2RlUmFuZ2VUb0RGR0NvbXBpbGUoKS5pc0luUmFuZ2UoY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbkNvdW50KCkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zLmNwcAkocmV2aXNpb24gMTY2NDM5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEyICsyNiwx
NCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKIAorI2luY2x1
ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkhlYXBTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSA8
YWxnb3JpdGhtPgogI2luY2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNs
dWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgorI2luY2x1ZGUgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9OdW1iZXJPZkNvcmVzLmg+CiAjaW5jbHVk
ZSA8d3RmL1BhZ2VCbG9jay5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KQEAgLTc2
LDYgKzc4LDEyIEBAIHN0YXRpYyBib29sIHBhcnNlKGNvbnN0IGNoYXIqIHN0cmluZywgT3AKICAg
ICByZXR1cm4gdmFsdWUuaW5pdChzdHJpbmcpOwogfQogCitzdGF0aWMgYm9vbCBwYXJzZShjb25z
dCBjaGFyKiBzdHJpbmcsIGNvbnN0IGNoYXIqJiB2YWx1ZSkKK3sKKyAgICB2YWx1ZSA9IHN0cmlu
ZzsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIGJvb2wgb3Zl
cnJpZGVPcHRpb25XaXRoSGV1cmlzdGljKFQmIHZhcmlhYmxlLCBjb25zdCBjaGFyKiBuYW1lKQog
ewpAQCAtMzMwLDkgKzMzOCwxMzMgQEAgdm9pZCBPcHRpb25zOjpkdW1wT3B0aW9uKE9wdGlvbklE
IGlkLCBGSQogICAgIGNhc2Ugb3B0aW9uUmFuZ2VUeXBlOgogICAgICAgICBmcHJpbnRmKHN0cmVh
bSwgIiVzIiwgc19vcHRpb25zW2lkXS51Lm9wdGlvblJhbmdlVmFsLnJhbmdlU3RyaW5nKCkpOwog
ICAgICAgICBicmVhazsKKyAgICBjYXNlIG9wdGlvblN0cmluZ1R5cGU6IHsKKyAgICAgICAgY29u
c3QgY2hhciogb3B0aW9uID0gc19vcHRpb25zW2lkXS51Lm9wdGlvblN0cmluZ1ZhbDsKKyAgICAg
ICAgaWYgKCFvcHRpb24pCisgICAgICAgICAgICBvcHRpb24gPSAiIjsKKyAgICAgICAgZnByaW50
ZihzdHJlYW0sICIlcyIsIG9wdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICB9CiAg
ICAgZnByaW50ZihzdHJlYW0sICIlcyIsIGZvb3Rlcik7CiB9CiAKK3N0cnVjdCBGdW5jdGlvbnNG
aWx0ZXIgeworICAgIEZ1bmN0aW9uc0ZpbHRlcigpCisgICAgICAgIDogaXNJbml0aWFsaXplZChm
YWxzZSkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBpc0luaXRpYWxpemVkOworICAgIFZlY3Rv
cjxDU3RyaW5nPiBmdW5jdGlvbk5hbWVzOworfTsKKworc3RhdGljIGlubGluZSBib29sIGlzRnVu
Y3Rpb25OYW1lU3RhcnQoY2hhciBjKQoreworICAgIHJldHVybiAoKGMgPj0gJ2EnKSAmJiAoYyA8
PSAneicpKSB8fCAoKGMgPj0gJ0EnKSAmJiAoYyA8PSAnWicpKSB8fCAoYyA9PSAnJCcpIHx8IChj
ID09ICdfJyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0Z1bmN0aW9uTmFtZUNoYXIoY2hh
ciBjKQoreworICAgIHJldHVybiBpc0Z1bmN0aW9uTmFtZVN0YXJ0KGMpIHx8ICgoYyA+PSAnMCcp
ICYmIChjIDw9ICc5JykpOworfQorCitzdGF0aWMgdm9pZCBwYXJzZUZ1bmN0aW9uTmFtZXNJblN0
cmluZyhGdW5jdGlvbnNGaWx0ZXImIGZpbHRlciwgY29uc3QgY2hhciogc3RyKQoreworICAgIGNv
bnN0IGNoYXIqIHAgPSBzdHI7CisgICAgY2hhciBjID0gKnA7CisgICAgd2hpbGUgKGMpIHsKKyAg
ICAgICAgLy8gU2tpcCAvLyBvciAvKiAqLyBjb21tZW50IGVudHJpZXM6CisgICAgICAgIGlmIChj
ICYmIGMgPT0gJy8nKSB7CisgICAgICAgICAgICBjID0gKigrK3ApOworICAgICAgICAgICAgaWYg
KCFjKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGMgPT0gJy8n
KSB7CisgICAgICAgICAgICAgICAgYyA9ICooKytwKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAo
YyAmJiBjICE9ICdcbicpCisgICAgICAgICAgICAgICAgICAgIGMgPSAqKCsrcCk7CisKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnKicpIHsKKyAgICAgICAgICAgICAgICBjID0gKigrK3Ap
OworICAgICAgICAgICAgICAgIHdoaWxlIChjICYmIGMgIT0gJyonKSB7CisgICAgICAgICAgICAg
ICAgICAgIGMgPSAqKCsrcCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChjID09ICcvJykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgYyA9ICooKytwKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAv
LyBQYXJzaW5nIGZ1bmN0aW9uIG5hbWVzOgorICAgICAgICBpZiAoaXNGdW5jdGlvbk5hbWVTdGFy
dChjKSkgeworICAgICAgICAgICAgY29uc3QgY2hhciogc3RhcnQgPSBwOworICAgICAgICAgICAg
YyA9ICooKytwKTsKKyAgICAgICAgICAgIHdoaWxlIChjICYmIGlzRnVuY3Rpb25OYW1lQ2hhcihj
KSkKKyAgICAgICAgICAgICAgICBjID0gKigrK3ApOworICAgICAgICAgICAgZmlsdGVyLmZ1bmN0
aW9uTmFtZXMuYXBwZW5kKENTdHJpbmcoc3RhcnQsIHAgLSBzdGFydCkpOworICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBFdmVyeXRoaW5nIGVsc2UgaXMgaWdu
b3JlZDoKKyAgICAgICAgaWYgKGMpCisgICAgICAgICAgICBjID0gKigrK3ApOworICAgIH0KKwor
ICAgIGlmIChPcHRpb25zOjp2ZXJib3NlQ29tcGlsYXRpb24oKSkgeworICAgICAgICBkYXRhTG9n
KCJGdW5jdGlvbnMgdG8gREZHIGNvbXBpbGU6XG4iKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBmaWx0ZXIuZnVuY3Rpb25OYW1lcy5zaXplKCk7IGkrKykKKyAgICAgICAgICAgIGRh
dGFMb2dGKCIgICBbJXp1XSAlc1xuIiwgaSArIDEsIGZpbHRlci5mdW5jdGlvbk5hbWVzW2ldLmRh
dGEoKSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBwYXJzZUZ1bmN0aW9uTmFtZXNJbkZpbGUo
RnVuY3Rpb25zRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IGNoYXIqIGZpbGVuYW1lKQoreworICAgIEZJ
TEUqIGZpbGUgPSBmb3BlbihmaWxlbmFtZSwgInIiKTsKKyAgICBpZiAoIWZpbGUpCisgICAgICAg
IHJldHVybjsKKworICAgIGZzZWVrKGZpbGUsIDAsIFNFRUtfRU5EKTsKKyAgICBzaXplX3Qgc2l6
ZSA9IGZ0ZWxsKGZpbGUpOworICAgIHJld2luZChmaWxlKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0
cjxjaGFyW10+IGJ1ZmZlcihuZXcgY2hhcltzaXplICsgMV0pOworICAgIGlmIChidWZmZXIpIHsK
KyAgICAgICAgc2l6ZV90IHJlc3VsdCA9IGZyZWFkKGJ1ZmZlci5nZXQoKSwgMSwgc2l6ZSwgZmls
ZSk7CisgICAgICAgIGlmIChyZXN1bHQgPT0gc2l6ZSkgeworICAgICAgICAgICAgYnVmZmVyW3Np
emVdID0gJ1wwJzsKKyAgICAgICAgICAgIHBhcnNlRnVuY3Rpb25OYW1lc0luU3RyaW5nKGZpbHRl
ciwgYnVmZmVyLmdldCgpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmY2xvc2UoZmlsZSk7Cit9
CisKK2Jvb2wgT3B0aW9uczo6c2xvd0luT0tUb0RGR0NvbXBpbGVMaXN0KENvZGVCbG9jayogY29k
ZUJsb2NrKQoreworICAgIGNvbnN0IGNoYXIqIGZpbHRlck9wdGlvbiA9IE9wdGlvbnM6OmZ1bmN0
aW9uc1RvREZHQ29tcGlsZSgpOworICAgIEFTU0VSVChmaWx0ZXJPcHRpb24pOworCisgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEZ1bmN0aW9uc0ZpbHRlcj4gc3RhdGljRmlsdGVyczsKKyAgICBG
dW5jdGlvbnNGaWx0ZXImIGZpbHRlcnMgPSBzdGF0aWNGaWx0ZXJzLmdldCgpOworICAgIGlmIChm
aWx0ZXJzLmlzSW5pdGlhbGl6ZWQgJiYgIWZpbHRlcnMuZnVuY3Rpb25OYW1lcy5zaXplKCkpCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKCFmaWx0ZXJzLmlzSW5pdGlhbGl6ZWQpIHsK
KyAgICAgICAgaWYgKCFzdHJuY21wKGZpbHRlck9wdGlvbiwgImZpbGU6IiwgNSkpCisgICAgICAg
ICAgICBwYXJzZUZ1bmN0aW9uTmFtZXNJbkZpbGUoZmlsdGVycywgJmZpbHRlck9wdGlvbls1XSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBhcnNlRnVuY3Rpb25OYW1lc0luU3RyaW5nKGZp
bHRlcnMsIGZpbHRlck9wdGlvbik7CisgICAgICAgIGZpbHRlcnMuaXNJbml0aWFsaXplZCA9IHRy
dWU7CisgICAgfQorCisgICAgQ1N0cmluZyBpbmZlcnJlZE5hbWUgPSBjb2RlQmxvY2stPmluZmVy
cmVkTmFtZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsdGVycy5mdW5jdGlvbk5h
bWVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGlmIChpbmZlcnJlZE5hbWUgPT0gZmlsdGVycy5m
dW5jdGlvbk5hbWVzW2ldKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJl
dHVybiBmYWxzZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDE2NjQzOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiAr
MzMsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQ29kZUJsb2NrOworCiAvLyBIb3cg
ZG8gSlNDIFZNIG9wdGlvbnMgd29yaz8KIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PQog
Ly8gVGhlIEpTQ19PUFRJT05TKCkgbWFjcm8gYmVsb3cgZGVmaW5lcyBhIGxpc3Qgb2YgYWxsIEpT
QyBvcHRpb25zIGluIHVzZSwKQEAgLTg4LDYgKzkwLDcgQEAgcHJpdmF0ZToKIH07CiAKIHR5cGVk
ZWYgT3B0aW9uUmFuZ2Ugb3B0aW9uUmFuZ2U7Cit0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0
cmluZzsKIAogI2RlZmluZSBKU0NfT1BUSU9OUyh2KSBcCiAgICAgdihib29sLCB1c2VMTEludCwg
IHRydWUpIFwKQEAgLTExNSw2ICsxMTgsNyBAQCB0eXBlZGVmIE9wdGlvblJhbmdlIG9wdGlvblJh
bmdlOwogICAgIHYoYm9vbCwgc2hvd0ZUTERpc2Fzc2VtYmx5LCBmYWxzZSkgXAogICAgIHYoYm9v
bCwgc2hvd0FsbERGR05vZGVzLCBmYWxzZSkgXAogICAgIHYob3B0aW9uUmFuZ2UsIGJ5dGVjb2Rl
UmFuZ2VUb0RGR0NvbXBpbGUsIDApIFwKKyAgICB2KG9wdGlvblN0cmluZywgZnVuY3Rpb25zVG9E
RkdDb21waWxlLCBudWxscHRyKSBcCiAgICAgdihib29sLCBkdW1wQnl0ZWNvZGVBdERGR1RpbWUs
IGZhbHNlKSBcCiAgICAgdihib29sLCBkdW1wR3JhcGhBdEVhY2hQaGFzZSwgZmFsc2UpIFwKICAg
ICB2KGJvb2wsIHZlcmJvc2VERkdCeXRlQ29kZVBhcnNpbmcsIGZhbHNlKSBcCkBAIC0yOTIsNiAr
Mjk2LDExIEBAIHB1YmxpYzoKICAgICBKU0NfT1BUSU9OUyhGT1JfRUFDSF9PUFRJT04pCiAjdW5k
ZWYgRk9SX0VBQ0hfT1BUSU9OCiAKKyAgICBzdGF0aWMgaW5saW5lIGJvb2wgaW5PS1RvREZHQ29t
cGlsZUxpc3QoQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgeworICAgICAgICByZXR1cm4gIWZ1
bmN0aW9uc1RvREZHQ29tcGlsZSgpIHx8IHNsb3dJbk9LVG9ERkdDb21waWxlTGlzdChjb2RlQmxv
Y2spOworICAgIH0KKwogcHJpdmF0ZToKICAgICBlbnVtIEVudHJ5VHlwZSB7CiAgICAgICAgIGJv
b2xUeXBlLApAQCAtMjk5LDYgKzMwOCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGRvdWJsZVR5cGUs
CiAgICAgICAgIGludDMyVHlwZSwKICAgICAgICAgb3B0aW9uUmFuZ2VUeXBlLAorICAgICAgICBv
cHRpb25TdHJpbmdUeXBlLAogICAgIH07CiAKICAgICAvLyBGb3Igc3RvcmluZyBmb3IgYW4gb3B0
aW9uIHZhbHVlOgpAQCAtMzA5LDYgKzMxOSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBkb3Vi
bGUgZG91YmxlVmFsOwogICAgICAgICAgICAgaW50MzIgaW50MzJWYWw7CiAgICAgICAgICAgICBP
cHRpb25SYW5nZSBvcHRpb25SYW5nZVZhbDsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIG9wdGlv
blN0cmluZ1ZhbDsKICAgICAgICAgfSB1OwogICAgICAgICBib29sIGRpZE92ZXJyaWRlOwogICAg
IH07CkBAIC0zMjcsNiArMzM4LDggQEAgcHJpdmF0ZToKICAgICBKU0NfT1BUSU9OUyhGT1JfRUFD
SF9PUFRJT04pCiAjdW5kZWYgRk9SX0VBQ0hfT1BUSU9OCiAKKyAgICBzdGF0aWMgYm9vbCBzbG93
SW5PS1RvREZHQ29tcGlsZUxpc3QoQ29kZUJsb2NrKik7CisKICAgICAvLyBEZWNsYXJlIHRoZSBz
aW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIG9wdGlvbnMgc3RvcmU6CiAgICAgSlNfRVhQT1JUREFU
QSBzdGF0aWMgRW50cnkgc19vcHRpb25zW251bWJlck9mT3B0aW9uc107CiAgICAgc3RhdGljIGNv
bnN0IEVudHJ5SW5mbyBzX29wdGlvbnNJbmZvW251bWJlck9mT3B0aW9uc107Cg==
</data>
<flag name="review"
          id="252564"
          type_id="1"
          status="-"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>