<?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>118053</bug_id>
          
          <creation_ts>2013-06-26 03:10:43 -0700</creation_ts>
          <short_desc>Parsing of MathML length</short_desc>
          <delta_ts>2014-03-10 12:26:03 -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>MathML</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>WebExposed</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>115610</blocked>
    
    <blocked>117305</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Frédéric Wang Nélar">fred.wang</reporter>
          <assigned_to name="Frédéric Wang Nélar">fred.wang</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cfleizach</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbarton</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>mrobinson</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>903619</commentid>
    <comment_count>0</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2013-06-26 03:10:43 -0700</bug_when>
    <thetext>See http://www.w3.org/TR/MathML/chapter2.html#type.length</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>903645</commentid>
    <comment_count>1</comment_count>
      <attachid>205475</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2013-06-26 05:17:48 -0700</bug_when>
    <thetext>Created attachment 205475
Patch V1

OK, I finally had time to come back to WebKit development today. I extracted the parsing changes from my mspace patch and added more tests for mfrac@linethickness.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>903853</commentid>
    <comment_count>2</comment_count>
      <attachid>205475</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-06-26 12:48:01 -0700</bug_when>
    <thetext>Comment on attachment 205475
Patch V1

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

thanks!

&gt; LayoutTests/ChangeLog:12
&gt; +        * mathml/presentation/mfrac-linethickness1-expected-mismatch.html: Added.

none of the tests have expected results

&gt; LayoutTests/mathml/presentation/mfrac-linethickness1-expected-mismatch.html:8
&gt; +  &lt;div style=&quot;position: absolute; top: 0; left: 0; width: 500px; height: 150px; background: blue;&quot;&gt;&lt;/div&gt;

what is this testing? there is nothing about math in this test

&gt; LayoutTests/mathml/presentation/mfrac-linethickness1.html:11
&gt; +      &lt;mfrac linethickness=&quot;200px&quot;&gt;

these thickness tests should be in one line thickness test. i don&apos;t think we need separate files for each one

&gt; Source/WebCore/rendering/mathml/RenderMathMLBlock.cpp:243
&gt; +    // see if the negative sign is there

full sentence required for comment

&gt; Source/WebCore/rendering/mathml/RenderMathMLBlock.cpp:256
&gt; +            return false; // two dots encountered

comments should go on the same line. you should put this comment above the if line and make it a full sentence

&gt; Source/WebCore/rendering/mathml/RenderMathMLBlock.cpp:257
&gt; +        if (c == &apos;.&apos;) {

one line if statements shouldn&apos;t use brackets

&gt; Source/WebCore/rendering/mathml/RenderMathMLBlock.cpp:261
&gt; +            // some authors leave blanks before the unit, but that shouldn&apos;t

comments should start with capitalized letters like full sentences

&gt; Source/WebCore/rendering/mathml/RenderMathMLBlock.cpp:322
&gt; +bool RenderMathMLBlock::ParseNamedSpace(const String&amp; string, float&amp; lengthValue, bool allowNegative)

length should probably be the return value, and there should be a parameter to confirm if it succeeded, like toIntStrict()

&gt; Source/WebCore/rendering/mathml/RenderMathMLBlock.cpp:324
&gt; +    float length = 0.;

don&apos;t append . for floating point literals
see &quot;Floating point literals&quot;
http://www.webkit.org/coding/coding-style.html

&gt; Source/WebCore/rendering/mathml/RenderMathMLBlock.h:73
&gt; +    bool ParseNamedSpace(const String&amp;, float&amp;, bool allowNegative = true);

i think both of these can be functions that are outside the class block. They don&apos;t really belong as instance methods of the class
also the names should start with lowercase

it looks like ParseNamedSpace is only used inside ParseLength… that method should be static inside the class file

&gt; Source/WebCore/rendering/mathml/RenderMathMLFraction.cpp:82
&gt; +        ParseLength(thickness, m_lineThickness, false);

you might want to check if the conversion succeeded before setting the value</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>903859</commentid>
    <comment_count>3</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2013-06-26 13:04:34 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 205475 [details])
&gt; none of the tests have expected results
&gt;
&gt; what is this testing? there is nothing about math in this test
&gt; 
&gt; these thickness tests should be in one line thickness test. i don&apos;t think we need separate files for each one

Thanks Chris. I don&apos;t know if you&apos;ve seen my comments on bug 115610, but it seems that we have a misunderstanding about what these tests are. You seem to expect some other particular unit test format but note that I have used reftests:

http://trac.webkit.org/wiki/Writing%20Reftests

So basically the two pages

   mathml/presentation/mfrac-linethickness1.html
   mathml/presentation/mfrac-linethickness1-expected-mismatch.html
  
form one != reftests that is the test passes iff they don&apos;t render the same while the pair

   mathml/presentation/mfrac-linethickness2.html
   mathml/presentation/mfrac-linethickness2-expected-mismatch.html

forms one == reftest that is the test passes iff the two pages render exactly the same. Similarly for -3 -4 and -5.

Also note that by design it is clear that we can not group == and != reftests in the same test. It&apos;s perhaps less obvious, but we can not group != reftests in the same test either. However, I can group the == reftests in the same test if you want.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>903870</commentid>
    <comment_count>4</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2013-06-26 13:38:07 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; it looks like ParseNamedSpace is only used inside ParseLength… that method should be static inside the class file

As indicated in bug 115610 comment 5, I&apos;ve made two separated functions because of mpadded attribute parsing which require calling the two functions plus doing some other stuff with pseudo-units. However, this is not implemented in WebKit yet, so I can make ParseNamedSpace static for the moment.

&gt; 
&gt; &gt; Source/WebCore/rendering/mathml/RenderMathMLFraction.cpp:82
&gt; &gt; +        ParseLength(thickness, m_lineThickness, false);
&gt; 
&gt; you might want to check if the conversion succeeded before setting the value

Not sure what you mean here... m_lineThickness = gLineMedium sets m_lineThickness to the default value. If ParseLength fails, then the attribute is ignored and the default value is used. If ParseLength succeeds, then m_lineThickness is set to the parsed value (perhaps a multiple of the specified default for % and unitless). So the boolean success result is not really used here, but I think it may be useful in other situations.

I&apos;d like to have clarification on what you expect exactly for the tests and about this last point before submitting a new version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>903882</commentid>
    <comment_count>5</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-06-26 13:59:59 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #2)
&gt; &gt; it looks like ParseNamedSpace is only used inside ParseLength… that method should be static inside the class file
&gt; 
&gt; As indicated in bug 115610 comment 5, I&apos;ve made two separated functions because of mpadded attribute parsing which require calling the two functions plus doing some other stuff with pseudo-units. However, this is not implemented in WebKit yet, so I can make ParseNamedSpace static for the moment.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/rendering/mathml/RenderMathMLFraction.cpp:82
&gt; &gt; &gt; +        ParseLength(thickness, m_lineThickness, false);
&gt; &gt; 
&gt; &gt; you might want to check if the conversion succeeded before setting the value
&gt; 
&gt; Not sure what you mean here... m_lineThickness = gLineMedium sets m_lineThickness to the default value. If ParseLength fails, then the attribute is ignored and the default value is used. If ParseLength succeeds, then m_lineThickness is set to the parsed value (perhaps a multiple of the specified default for % and unitless). So the boolean success result is not really used here, but I think it may be useful in other situations.
&gt; 
&gt; I&apos;d like to have clarification on what you expect exactly for the tests and about this last point before submitting a new version.

(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; (From update of attachment 205475 [details] [details])
&gt; &gt; none of the tests have expected results
&gt; &gt;
&gt; &gt; what is this testing? there is nothing about math in this test
&gt; &gt; 
&gt; &gt; these thickness tests should be in one line thickness test. i don&apos;t think we need separate files for each one
&gt; 
&gt; Thanks Chris. I don&apos;t know if you&apos;ve seen my comments on bug 115610, but it seems that we have a misunderstanding about what these tests are. You seem to expect some other particular unit test format but note that I have used reftests:
&gt; 
&gt; http://trac.webkit.org/wiki/Writing%20Reftests
&gt; 
&gt; So basically the two pages
&gt; 
&gt;    mathml/presentation/mfrac-linethickness1.html
&gt;    mathml/presentation/mfrac-linethickness1-expected-mismatch.html
&gt; 
&gt; form one != reftests that is the test passes iff they don&apos;t render the same while the pair
&gt; 
&gt;    mathml/presentation/mfrac-linethickness2.html
&gt;    mathml/presentation/mfrac-linethickness2-expected-mismatch.html
&gt; 
&gt; forms one == reftest that is the test passes iff the two pages render exactly the same. Similarly for -3 -4 and -5.
&gt; 
&gt; Also note that by design it is clear that we can not group == and != reftests in the same test. It&apos;s perhaps less obvious, but we can not group != reftests in the same test either. However, I can group the == reftests in the same test if you want.

I see. 

I don&apos;t know if this is the best way to test these features. For example, the veryverythinspace would pass as long as it&apos;s different from the default thickness. 

But if the parsing logic changed and this value became different somehow, it could still pass as long as it was different.

I feel like having expected results for these will result in more strict tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>903887</commentid>
    <comment_count>6</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-06-26 14:04:51 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #2)
&gt; &gt; it looks like ParseNamedSpace is only used inside ParseLength… that method should be static inside the class file
&gt; 
&gt; As indicated in bug 115610 comment 5, I&apos;ve made two separated functions because of mpadded attribute parsing which require calling the two functions plus doing some other stuff with pseudo-units. However, this is not implemented in WebKit yet, so I can make ParseNamedSpace static for the moment.

That&apos;s fine then to leave as is

&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/rendering/mathml/RenderMathMLFraction.cpp:82
&gt; &gt; &gt; +        ParseLength(thickness, m_lineThickness, false);
&gt; &gt; 
&gt; &gt; you might want to check if the conversion succeeded before setting the value
&gt; 
&gt; Not sure what you mean here... m_lineThickness = gLineMedium sets m_lineThickness to the default value. If ParseLength fails, then the attribute is ignored and the default value is used. If ParseLength succeeds, then m_lineThickness is set to the parsed value (perhaps a multiple of the specified default for % and unitless). So the boolean success result is not really used here, but I think it may be useful in other situations.

Yes I see that. the question is whether the function should return the result  or return success.

I think it could go either way, but I see that other methods return the result instead of success.

As to not checking the result value -- it obviously works, but it&apos;s possible someone in the future might set the value to zero on a failure and this might fail, so if the method returns a result you should probably check it for completeness

&gt; 
&gt; I&apos;d like to have clarification on what you expect exactly for the tests and about this last point before submitting a new version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>903900</commentid>
    <comment_count>7</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2013-06-26 14:23:14 -0700</bug_when>
    <thetext>&gt; I see. 
&gt; 
&gt; I don&apos;t know if this is the best way to test these features. For example, the veryverythinspace would pass as long as it&apos;s different from the default thickness. 
&gt; 
&gt; But if the parsing logic changed and this value became different somehow, it could still pass as long as it was different.
&gt; 
&gt; I feel like having expected results for these will result in more strict tests

Here veryverythinspace is a == test so that should not happen, although what you say is true with != tess. What can happen is if the linethickness parsing is if completely broken (e.g. always use the default value) then == tests will always pass. However, the idea is to combine several != and == reftests and to rely on other features that are expected to be stable (e.g. CSS or HTML). This generally gives a good test coverage and using image reference is not needed. The tests for mspace would be important here as they test against CSS/HTML.

Strict tests are sometimes painful, especially for MathML where the exact pixel rendering is not defined as opposed to e.g. SVG or CSS. I&apos;ve followed the WebKit MathML developments in the last few years and basically each time some tweaking is done on the rendering (e.g. modify the spacing in formulas), it breaks all the tests that have an image reference. In that situation, reftests are much more robust. The Mozilla and MathJax projects really only use these formats for layout tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>903906</commentid>
    <comment_count>8</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2013-06-26 14:29:21 -0700</bug_when>
    <thetext>&gt; Yes I see that. the question is whether the function should return the result  or return success.
&gt; 
&gt; I think it could go either way, but I see that other methods return the result instead of success.
&gt; 

The point is that the default value is passed as input (as it is used for % and unitless) and replaced by the computed value. If you use it as a return value you need one additional parameter. For consistency, I&apos;ve kept the same signature for ParseNamedSpace, although it does not use the default value.

&gt; As to not checking the result value -- it obviously works, but it&apos;s possible someone in the future might set the value to zero on a failure and this might fail, so if the method returns a result you should probably check it for completeness

So that would mean doing a noop by setting the variable to the default value again. Well, I can do that if you really want but the point was to save some code since the default value is used by % and unitless anyway. Or I can also just remove the boolean success. In Mozilla it is used to display parsing errors in the console, but I&apos;m not sure if I&apos;ll need it in WebKit at the moment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>903914</commentid>
    <comment_count>9</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-06-26 14:34:52 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; &gt; Yes I see that. the question is whether the function should return the result  or return success.
&gt; &gt; 
&gt; &gt; I think it could go either way, but I see that other methods return the result instead of success.
&gt; &gt; 
&gt; 
&gt; The point is that the default value is passed as input (as it is used for % and unitless) and replaced by the computed value. If you use it as a return value you need one additional parameter. For consistency, I&apos;ve kept the same signature for ParseNamedSpace, although it does not use the default value.

Yes i understand. I think we&apos;re trying to achieve consistency with other code in WebKit in this instance in regards to result in pass-by-value or result in result.

&gt; 
&gt; &gt; As to not checking the result value -- it obviously works, but it&apos;s possible someone in the future might set the value to zero on a failure and this might fail, so if the method returns a result you should probably check it for completeness
&gt; 
&gt; So that would mean doing a noop by setting the variable to the default value again. Well, I can do that if you really want but the point was to save some code since the default value is used by % and unitless anyway. Or I can also just remove the boolean success. In Mozilla it is used to display parsing errors in the console, but I&apos;m not sure if I&apos;ll need it in WebKit at the moment.

It&apos;s probably sufficient to note in the comment that if parsing fails then value will not be altered</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>903915</commentid>
    <comment_count>10</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-06-26 14:35:28 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; &gt; I see. 
&gt; &gt; 
&gt; &gt; I don&apos;t know if this is the best way to test these features. For example, the veryverythinspace would pass as long as it&apos;s different from the default thickness. 
&gt; &gt; 
&gt; &gt; But if the parsing logic changed and this value became different somehow, it could still pass as long as it was different.
&gt; &gt; 
&gt; &gt; I feel like having expected results for these will result in more strict tests
&gt; 
&gt; Here veryverythinspace is a == test so that should not happen, although what you say is true with != tess. What can happen is if the linethickness parsing is if completely broken (e.g. always use the default value) then == tests will always pass. However, the idea is to combine several != and == reftests and to rely on other features that are expected to be stable (e.g. CSS or HTML). This generally gives a good test coverage and using image reference is not needed. The tests for mspace would be important here as they test against CSS/HTML.
&gt; 
&gt; Strict tests are sometimes painful, especially for MathML where the exact pixel rendering is not defined as opposed to e.g. SVG or CSS. I&apos;ve followed the WebKit MathML developments in the last few years and basically each time some tweaking is done on the rendering (e.g. modify the spacing in formulas), it breaks all the tests that have an image reference. In that situation, reftests are much more robust. The Mozilla and MathJax projects really only use these formats for layout tests.

Fair enough.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>904067</commentid>
    <comment_count>11</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2013-06-26 23:13:10 -0700</bug_when>
    <thetext>I can do whatever to preserve consistency with other code in WebKit but my point is that this MathML parsing is a bit special because of how the default value is handled. So basically do we want to do

float v;
float v2 = ParseLength(s, default value, b);
if (b) {
  v = v2;
  [...]
} [ else {
  ...
}]

or just

float v = default value;
[if] ParseLength(s, v, b) [... else ...]

where the brackets are optional parts when we really do something with the boolean success/failure. I personally prefer the concise form, especially if we are to use the function everywhere in the MathML code. I just did a grep on Gecko, and it&apos;s true that it is not used that much but that&apos;s still about 20 times (and more will probably come with implementation of e.g. elementary math):

nsMathMLFrame.cpp:nsMathMLFrame::ParseNumericValue(const nsString&amp;   aString,
nsMathMLFrame.cpp:  if (!nsMathMLElement::ParseNumericValue(aString, cssValue, aFlags,
nsMathMLmfracFrame.cpp:      ParseNumericValue(aThicknessAttribute, &amp;lineThickness,
nsMathMLmmultiscriptsFrame.cpp:    ParseNumericValue(value, &amp;mSubScriptShift, 0, PresContext(),
nsMathMLmmultiscriptsFrame.cpp:    ParseNumericValue(value, &amp;mSupScriptShift, 0, PresContext(),
nsMathMLmoFrame.cpp:    if (nsMathMLElement::ParseNumericValue(value, cssValue, 0,
nsMathMLmoFrame.cpp:    if (nsMathMLElement::ParseNumericValue(value, cssValue, 0,
nsMathMLmoFrame.cpp:    if (nsMathMLElement::ParseNumericValue(value, cssValue,
nsMathMLmoFrame.cpp:    if (nsMathMLElement::ParseNumericValue(value, cssValue,
nsMathMLmpaddedFrame.cpp:    if (nsMathMLElement::ParseNumericValue(number, aCSSValue, 
nsMathMLmspaceFrame.cpp:    ParseNumericValue(value, &amp;mWidth,
nsMathMLmspaceFrame.cpp:    ParseNumericValue(value, &amp;mHeight, 0,
nsMathMLmspaceFrame.cpp:    ParseNumericValue(value, &amp;mDepth, 0,
nsMathMLmsubFrame.cpp:    ParseNumericValue(value, &amp;subScriptShift, 0, PresContext(), mStyleContext);
nsMathMLmsubsupFrame.cpp:    ParseNumericValue(value, &amp;subScriptShift, 0, PresContext(), mStyleContext);
nsMathMLmsubsupFrame.cpp:    ParseNumericValue(value, &amp;supScriptShift, 0, PresContext(), mStyleContext);
nsMathMLmsupFrame.cpp:    ParseNumericValue(value, &amp;supScriptShift, 0, PresContext(), mStyleContext);
nsMathMLElement.cpp:      ParseNumericValue(value-&gt;GetStringValue(), *scriptMinSize,
nsMathMLElement.cpp:      if (!ParseNumericValue(str, *fontSize, PARSE_SUPPRESS_WARNINGS |
nsMathMLElement.cpp:        ParseNumericValue(value-&gt;GetStringValue(), *width, 0,</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>904068</commentid>
    <comment_count>12</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2013-06-26 23:18:41 -0700</bug_when>
    <thetext>Actually it is even

bool b;
float v;
float v2 = ParseLength(s, default value, b);
if (b) {
  v = v2;
  [...]
} [ else {
  ...
}]

or just

float v = default value;
[if] ParseLength(s, v) [... else ...]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>904072</commentid>
    <comment_count>13</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-06-26 23:24:21 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Actually it is even
&gt; 
&gt; bool b;
&gt; float v;
&gt; float v2 = ParseLength(s, default value, b);
&gt; if (b) {
&gt;   v = v2;
&gt;   [...]
&gt; } [ else {
&gt;   ...
&gt; }]
&gt; 
&gt; or just
&gt; 
&gt; float v = default value;
&gt; [if] ParseLength(s, v) [... else ...]

    Right, this isn&apos;t that bad. 
I&apos;m ok with having it return success. If you think it will cut down on code bloat.

This method name could probably be more descriptive.

parseMathMLUnitLength() or something to that effect</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>904165</commentid>
    <comment_count>14</comment_count>
      <attachid>205585</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2013-06-27 04:36:29 -0700</bug_when>
    <thetext>Created attachment 205585
Patch V2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>904318</commentid>
    <comment_count>15</comment_count>
      <attachid>205585</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-06-27 12:24:39 -0700</bug_when>
    <thetext>Comment on attachment 205585
Patch V2

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

otherwise this looks good

&gt; Source/WebCore/rendering/mathml/RenderMathMLBlock.h:131
&gt; +//

this comment can likely be removed. you can probably name the parameters and their uses will be self evident. certainly style and allowNegative need no introduction

&gt; Source/WebCore/rendering/mathml/RenderMathMLBlock.h:146
&gt; +bool parseNamedSpace(const String&amp;, float&amp;, const RenderStyle*, bool allowNegative = true);

parseNamedSpace should probably be named similar to parseMathMLLength (parseMathMLNamedSpaceUnit or something)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>904329</commentid>
    <comment_count>16</comment_count>
      <attachid>205626</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2013-06-27 13:25:11 -0700</bug_when>
    <thetext>Created attachment 205626
Patch Final Version</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>904394</commentid>
    <comment_count>17</comment_count>
      <attachid>205626</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-06-27 17:15:30 -0700</bug_when>
    <thetext>Comment on attachment 205626
Patch Final Version

Clearing flags on attachment: 205626

Committed r152140: &lt;http://trac.webkit.org/changeset/152140&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>904395</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-06-27 17:15:33 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>904927</commentid>
    <comment_count>19</comment_count>
      <attachid>205626</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-06-30 23:37:27 -0700</bug_when>
    <thetext>Comment on attachment 205626
Patch Final Version

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

I am unfamiliar with the MathML codebase, but this code is really weird.

The parsing is non-standard (for something that looks a lot like our CSS parsing). But the weirdest thing is having parsing done by a _render object_!
Why is this made like that?

&gt; Source/WebCore/rendering/mathml/RenderMathMLBlock.cpp:233
&gt; +    int stringLength = s.length();

This should be unsigned.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>909734</commentid>
    <comment_count>20</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2013-07-18 06:41:24 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; 
&gt; I am unfamiliar with the MathML codebase, but this code is really weird.
&gt; 
&gt; The parsing is non-standard (for something that looks a lot like our CSS parsing). But the weirdest thing is having parsing done by a _render object_!
&gt; Why is this made like that?

I&apos;m not sure what you mean by non-standard, this is how it is defined in the MathML3 spec and how it is implemented in Gecko and MathJax. A special parsing function is needed anyway for MathML particularities: the interpretation of % as a multiple of the default value, the unitless notation and namedspace values.

I wanted to reuse the existing code for the things that are in common, but the MathML code in WebKit used float and it was not clear to me how to handle that. After bug 118601, the length are now LayoutUnits so I guess that would be possible to directly specify the unit rather than doing some computations.

I don&apos;t think that having the parsing functions on the renderer object is fundamental, they can be moved to e.g. WebCore/mathml/ I guess. However, some of the MathML attributes are not mapped to CSS properties so I think the parsing functions must be called by the renderer objects anyway.

As a comparison, Gecko uses specific parsing function for MathML, store them on the content/ side, call them from the layout/ side (or from the content/ side for those mapped to CSS properties) and returns the result as a C++ object representing CSS units.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910069</commentid>
    <comment_count>21</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2013-07-19 03:10:23 -0700</bug_when>
    <thetext>So I looked into this more carefully and LayoutUnit is actually essentially int so that&apos;s not what I thought (value + unit). I think the MathML parsing functions could be moved to CSSPrimitiveValue.cpp so that they can call conversionToCanonicalUnitsScaleFactor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910070</commentid>
    <comment_count>22</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-07-19 03:18:04 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (In reply to comment #19)
&gt; &gt; 
&gt; &gt; I am unfamiliar with the MathML codebase, but this code is really weird.
&gt; &gt; 
&gt; &gt; The parsing is non-standard (for something that looks a lot like our CSS parsing). But the weirdest thing is having parsing done by a _render object_!
&gt; &gt; Why is this made like that?
&gt; 
&gt; I&apos;m not sure what you mean by non-standard, this is how it is defined in the MathML3 spec and how it is implemented in Gecko and MathJax. A special parsing function is needed anyway for MathML particularities: the interpretation of % as a multiple of the default value, the unitless notation and namedspace values.
&gt; 
&gt; I wanted to reuse the existing code for the things that are in common, but the MathML code in WebKit used float and it was not clear to me how to handle that. After bug 118601, the length are now LayoutUnits so I guess that would be possible to directly specify the unit rather than doing some computations.

Oh, I did not mean against the W3C standards.

Non-standard in the sense that it does not use WebKit&apos;s standard primitive - nor the architecture WebKit uses for parsers.

&gt; I don&apos;t think that having the parsing functions on the renderer object is fundamental, they can be moved to e.g. WebCore/mathml/ I guess. However, some of the MathML attributes are not mapped to CSS properties so I think the parsing functions must be called by the renderer objects anyway.

That is fine. The render object can know about its Node, and it could query the line thickness on it.

I&apos;d appreciate if you do follow ups to clean this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910072</commentid>
    <comment_count>23</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-07-19 03:18:47 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; So I looked into this more carefully and LayoutUnit is actually essentially int so that&apos;s not what I thought (value + unit). I think the MathML parsing functions could be moved to CSSPrimitiveValue.cpp so that they can call conversionToCanonicalUnitsScaleFactor.

That sounds even better if that can be made in a clean way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>989015</commentid>
    <comment_count>24</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2014-03-10 12:26:03 -0700</bug_when>
    <thetext>Mass change: add WebExposed keyword to help MDN documentation.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>205475</attachid>
            <date>2013-06-26 05:17:48 -0700</date>
            <delta_ts>2013-06-27 04:36:29 -0700</delta_ts>
            <desc>Patch V1</desc>
            <filename>118053.diff</filename>
            <type>text/plain</type>
            <size>17210</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA5MzllNTJiLi4wZmI0NDMzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTMtMDYt
MjYgIEZyw6lkw6lyaWMgV2FuZyAgPGZyZWQud2FuZ0BmcmVlLmZyPgorCisgICAgICAgIEltcGxl
bWVudCBwYXJzaW5nIG9mIE1hdGhNTCBsZW5ndGhzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4MDUzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHNvbWUgcmVmdGVzdHMgZm9yIG1mcmFjQGxpbmV0
aGlja25lc3MuIEJldHRlciB0ZXN0cyBmb3IgdGhlIHBhcnNpbmcKKyAgICAgICAgb2YgTWF0aE1M
IGxlbmd0aHMgd2lsbCBiZSBwcm92aWRlZCB3aGVuIG1zcGFjZSBpcyBpbXBsZW1lbnRlZAorICAg
ICAgICAoYnVnIDExNTYxMCkKKworICAgICAgICAqIG1hdGhtbC9wcmVzZW50YXRpb24vbWZyYWMt
bGluZXRoaWNrbmVzczEtZXhwZWN0ZWQtbWlzbWF0Y2guaHRtbDogQWRkZWQuCisgICAgICAgICog
bWF0aG1sL3ByZXNlbnRhdGlvbi9tZnJhYy1saW5ldGhpY2tuZXNzMS5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBtYXRobWwvcHJlc2VudGF0aW9uL21mcmFjLWxpbmV0aGlja25lc3MyLWV4cGVjdGVk
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIG1hdGhtbC9wcmVzZW50YXRpb24vbWZyYWMtbGluZXRo
aWNrbmVzczIuaHRtbDogQWRkZWQuCisgICAgICAgICogbWF0aG1sL3ByZXNlbnRhdGlvbi9tZnJh
Yy1saW5ldGhpY2tuZXNzMy1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBtYXRobWwv
cHJlc2VudGF0aW9uL21mcmFjLWxpbmV0aGlja25lc3MzLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IG1hdGhtbC9wcmVzZW50YXRpb24vbWZyYWMtbGluZXRoaWNrbmVzczQtZXhwZWN0ZWQuaHRtbDog
QWRkZWQuCisgICAgICAgICogbWF0aG1sL3ByZXNlbnRhdGlvbi9tZnJhYy1saW5ldGhpY2tuZXNz
NC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBtYXRobWwvcHJlc2VudGF0aW9uL21mcmFjLWxpbmV0
aGlja25lc3M1LWV4cGVjdGVkLW1pc21hdGNoLmh0bWw6IEFkZGVkLgorICAgICAgICAqIG1hdGht
bC9wcmVzZW50YXRpb24vbWZyYWMtbGluZXRoaWNrbmVzczUuaHRtbDogQWRkZWQuCisKIDIwMTMt
MDYtMjUgIEtyenlzenRvZiBDemVjaCAgPGsuY3plY2hAc2Ftc3VuZy5jb20+CiAKICAgICAgICAg
W0FYXVtBVEtdIFVwZGF0ZSBhY2Nlc3NpYmlsaXR5IGJhc2VsaW5lcyBhZnRlciByMTUxOTUzCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9tYXRobWwvcHJlc2VudGF0aW9uL21mcmFjLWxpbmV0aGlj
a25lc3MxLWV4cGVjdGVkLW1pc21hdGNoLmh0bWwgYi9MYXlvdXRUZXN0cy9tYXRobWwvcHJlc2Vu
dGF0aW9uL21mcmFjLWxpbmV0aGlja25lc3MxLWV4cGVjdGVkLW1pc21hdGNoLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWYzYzk0NAotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL21hdGhtbC9wcmVzZW50YXRpb24vbWZyYWMtbGluZXRoaWNrbmVzczEtZXhw
ZWN0ZWQtbWlzbWF0Y2guaHRtbApAQCAtMCwwICsxLDExIEBACis8IWRvY3R5cGUgaHRtbD4KKzxo
dG1sPgorICA8aGVhZD4KKyAgICA8dGl0bGU+bWZyYWMgbGluZXRoaWNrbmVzczwvdGl0bGU+Cisg
IDwvaGVhZD4KKyAgPGJvZHk+CisKKyAgPGRpdiBzdHlsZT0icG9zaXRpb246IGFic29sdXRlOyB0
b3A6IDA7IGxlZnQ6IDA7IHdpZHRoOiA1MDBweDsgaGVpZ2h0OiAxNTBweDsgYmFja2dyb3VuZDog
Ymx1ZTsiPjwvZGl2PgorCisgIDwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL21hdGhtbC9wcmVzZW50YXRpb24vbWZyYWMtbGluZXRoaWNrbmVzczEuaHRtbCBiL0xheW91
dFRlc3RzL21hdGhtbC9wcmVzZW50YXRpb24vbWZyYWMtbGluZXRoaWNrbmVzczEuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzU5MWRiCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvbWF0aG1sL3ByZXNlbnRhdGlvbi9tZnJhYy1saW5ldGhpY2tuZXNzMS5o
dG1sCkBAIC0wLDAgKzEsMjEgQEAKKzwhZG9jdHlwZSBodG1sPgorPGh0bWw+CisgIDxoZWFkPgor
ICAgIDx0aXRsZT5tZnJhYyBsaW5ldGhpY2tuZXNzPC90aXRsZT4KKyAgPC9oZWFkPgorICA8Ym9k
eT4KKworICA8IS0tIFRoaXMgbWZyYWMgc2hvdWxkIGJlIHRhbGwgZW5vdWdoLCBvciBpdCB3aWxs
IGJlIGhpZGRlbiBieSB0aGUgYmx1ZSByZWN0YW5nbGUgLS0+CisgIDxkaXYgc3R5bGU9InBvc2l0
aW9uOiBhYnNvbHV0ZTsgdG9wOiAwOyBsZWZ0OiAwOyI+CisgICAgPG1hdGg+CisgICAgICA8bWZy
YWMgbGluZXRoaWNrbmVzcz0iMjAwcHgiPgorICAgICAgICA8bWk+eDwvbWk+CisgICAgICAgIDxt
aT55PC9taT4KKyAgICAgIDwvbWZyYWM+CisgICAgPC9tYXRoPgorICA8L2Rpdj4KKworICA8ZGl2
IHN0eWxlPSJwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMDsgbGVmdDogMDsgd2lkdGg6IDUwMHB4
OyBoZWlnaHQ6IDE1MHB4OyBiYWNrZ3JvdW5kOiBibHVlOyI+PC9kaXY+CisKKyAgPC9ib2R5Pgor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvbWF0aG1sL3ByZXNlbnRhdGlvbi9tZnJh
Yy1saW5ldGhpY2tuZXNzMi1leHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvbWF0aG1sL3ByZXNl
bnRhdGlvbi9tZnJhYy1saW5ldGhpY2tuZXNzMi1leHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NjJkYTEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9tYXRobWwvcHJlc2VudGF0aW9uL21mcmFjLWxpbmV0aGlja25lc3MyLWV4cGVjdGVkLmh0
bWwKQEAgLTAsMCArMSwxNiBAQAorPCFkb2N0eXBlIGh0bWw+Cis8aHRtbD4KKyAgPGhlYWQ+Cisg
ICAgPHRpdGxlPm1mcmFjIGxpbmV0aGlja25lc3M8L3RpdGxlPgorICA8L2hlYWQ+CisgIDxib2R5
PgorCisgIDxtYXRoPgorICAgIDxtZnJhYz4KKyAgICAgIDxtaT54PC9taT4KKyAgICAgIDxtaT55
PC9taT4KKyAgICA8L21mcmFjPgorICA8L21hdGg+CisKKyAgPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvbWF0aG1sL3ByZXNlbnRhdGlvbi9tZnJhYy1saW5ldGhpY2tu
ZXNzMi5odG1sIGIvTGF5b3V0VGVzdHMvbWF0aG1sL3ByZXNlbnRhdGlvbi9tZnJhYy1saW5ldGhp
Y2tuZXNzMi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MWFkY2YK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9tYXRobWwvcHJlc2VudGF0aW9uL21mcmFj
LWxpbmV0aGlja25lc3MyLmh0bWwKQEAgLTAsMCArMSwxNyBAQAorPCFkb2N0eXBlIGh0bWw+Cis8
aHRtbD4KKyAgPGhlYWQ+CisgICAgPHRpdGxlPm1mcmFjIGxpbmV0aGlja25lc3M8L3RpdGxlPgor
ICA8L2hlYWQ+CisgIDxib2R5PgorCisgIDwhLS0gVGhlIGxpbmV0aGlja25lc3Mgc2hvdWxkIGJl
IGlnbm9yZWQgLS0+CisgIDxtYXRoPgorICAgIDxtZnJhYyBsaW5ldGhpY2tuZXNzPSItMS4yM2Vt
Ij4KKyAgICAgIDxtaT54PC9taT4KKyAgICAgIDxtaT55PC9taT4KKyAgICA8L21mcmFjPgorICA8
L21hdGg+CisKKyAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvbWF0
aG1sL3ByZXNlbnRhdGlvbi9tZnJhYy1saW5ldGhpY2tuZXNzMy1leHBlY3RlZC5odG1sIGIvTGF5
b3V0VGVzdHMvbWF0aG1sL3ByZXNlbnRhdGlvbi9tZnJhYy1saW5ldGhpY2tuZXNzMy1leHBlY3Rl
ZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMzhjZjMKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9tYXRobWwvcHJlc2VudGF0aW9uL21mcmFjLWxpbmV0
aGlja25lc3MzLWV4cGVjdGVkLmh0bWwKQEAgLTAsMCArMSwxNyBAQAorPCFkb2N0eXBlIGh0bWw+
Cis8aHRtbD4KKyAgPGhlYWQ+CisgICAgPHRpdGxlPm1mcmFjIGxpbmV0aGlja25lc3M8L3RpdGxl
PgorICA8L2hlYWQ+CisgIDxib2R5PgorCisgIDwhLS0gVGhlIGxpbmV0aGlja25lc3Mgc2hvdWxk
IGJlIDUgdGltZXMgdGhlIGRlZmF1bHQgdmFsdWUgLS0+CisgIDxtYXRoPgorICAgIDxtZnJhYyBs
aW5ldGhpY2tuZXNzPSI1Ij4KKyAgICAgIDxtaT54PC9taT4KKyAgICAgIDxtaT55PC9taT4KKyAg
ICA8L21mcmFjPgorICA8L21hdGg+CisKKyAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvbWF0aG1sL3ByZXNlbnRhdGlvbi9tZnJhYy1saW5ldGhpY2tuZXNzMy5odG1s
IGIvTGF5b3V0VGVzdHMvbWF0aG1sL3ByZXNlbnRhdGlvbi9tZnJhYy1saW5ldGhpY2tuZXNzMy5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5Y2ExOWYKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9tYXRobWwvcHJlc2VudGF0aW9uL21mcmFjLWxpbmV0aGlj
a25lc3MzLmh0bWwKQEAgLTAsMCArMSwxNyBAQAorPCFkb2N0eXBlIGh0bWw+Cis8aHRtbD4KKyAg
PGhlYWQ+CisgICAgPHRpdGxlPm1mcmFjIGxpbmV0aGlja25lc3M8L3RpdGxlPgorICA8L2hlYWQ+
CisgIDxib2R5PgorCisgIDwhLS0gVGhlIGxpbmV0aGlja25lc3Mgc2hvdWxkIGJlIDUgdGltZXMg
dGhlIGRlZmF1bHQgdmFsdWUgLS0+CisgIDxtYXRoPgorICAgIDxtZnJhYyBsaW5ldGhpY2tuZXNz
PSI1MDAlIj4KKyAgICAgIDxtaT54PC9taT4KKyAgICAgIDxtaT55PC9taT4KKyAgICA8L21mcmFj
PgorICA8L21hdGg+CisKKyAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvbWF0aG1sL3ByZXNlbnRhdGlvbi9tZnJhYy1saW5ldGhpY2tuZXNzNC1leHBlY3RlZC5odG1s
IGIvTGF5b3V0VGVzdHMvbWF0aG1sL3ByZXNlbnRhdGlvbi9tZnJhYy1saW5ldGhpY2tuZXNzNC1l
eHBlY3RlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2NTllODYK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9tYXRobWwvcHJlc2VudGF0aW9uL21mcmFj
LWxpbmV0aGlja25lc3M0LWV4cGVjdGVkLmh0bWwKQEAgLTAsMCArMSwxNyBAQAorPCFkb2N0eXBl
IGh0bWw+Cis8aHRtbD4KKyAgPGhlYWQ+CisgICAgPHRpdGxlPm1mcmFjIGxpbmV0aGlja25lc3M8
L3RpdGxlPgorICA8L2hlYWQ+CisgIDxib2R5PgorCisgIDwhLS0gVGhlIGxpbmV0aGlja25lc3Mg
c2hvdWxkIGJlIH43LzE4ZW0gLS0+CisgIDxtYXRoPgorICAgIDxtZnJhYyBsaW5ldGhpY2tuZXNz
PSIwLjM4ODg4ODg4OWVtIj4KKyAgICAgIDxtaT54PC9taT4KKyAgICAgIDxtaT55PC9taT4KKyAg
ICA8L21mcmFjPgorICA8L21hdGg+CisKKyAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvbWF0aG1sL3ByZXNlbnRhdGlvbi9tZnJhYy1saW5ldGhpY2tuZXNzNC5odG1s
IGIvTGF5b3V0VGVzdHMvbWF0aG1sL3ByZXNlbnRhdGlvbi9tZnJhYy1saW5ldGhpY2tuZXNzNC5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmNDcxMWYKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9tYXRobWwvcHJlc2VudGF0aW9uL21mcmFjLWxpbmV0aGlj
a25lc3M0Lmh0bWwKQEAgLTAsMCArMSwxNyBAQAorPCFkb2N0eXBlIGh0bWw+Cis8aHRtbD4KKyAg
PGhlYWQ+CisgICAgPHRpdGxlPm1mcmFjIGxpbmV0aGlja25lc3M8L3RpdGxlPgorICA8L2hlYWQ+
CisgIDxib2R5PgorCisgIDwhLS0gVGhlIGxpbmV0aGlja25lc3Mgc2hvdWxkIGJlIH43LzE4ZW0g
LS0+CisgIDxtYXRoPgorICAgIDxtZnJhYyBsaW5ldGhpY2tuZXNzPSJ2ZXJ5dmVyeXRoaWNrbWF0
aHNwYWNlIj4KKyAgICAgIDxtaT54PC9taT4KKyAgICAgIDxtaT55PC9taT4KKyAgICA8L21mcmFj
PgorICA8L21hdGg+CisKKyAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvbWF0aG1sL3ByZXNlbnRhdGlvbi9tZnJhYy1saW5ldGhpY2tuZXNzNS1leHBlY3RlZC1taXNt
YXRjaC5odG1sIGIvTGF5b3V0VGVzdHMvbWF0aG1sL3ByZXNlbnRhdGlvbi9tZnJhYy1saW5ldGhp
Y2tuZXNzNS1leHBlY3RlZC1taXNtYXRjaC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmE5NjJkYTEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9tYXRobWwv
cHJlc2VudGF0aW9uL21mcmFjLWxpbmV0aGlja25lc3M1LWV4cGVjdGVkLW1pc21hdGNoLmh0bWwK
QEAgLTAsMCArMSwxNiBAQAorPCFkb2N0eXBlIGh0bWw+Cis8aHRtbD4KKyAgPGhlYWQ+CisgICAg
PHRpdGxlPm1mcmFjIGxpbmV0aGlja25lc3M8L3RpdGxlPgorICA8L2hlYWQ+CisgIDxib2R5Pgor
CisgIDxtYXRoPgorICAgIDxtZnJhYz4KKyAgICAgIDxtaT54PC9taT4KKyAgICAgIDxtaT55PC9t
aT4KKyAgICA8L21mcmFjPgorICA8L21hdGg+CisKKyAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvbWF0aG1sL3ByZXNlbnRhdGlvbi9tZnJhYy1saW5ldGhpY2tuZXNz
NS5odG1sIGIvTGF5b3V0VGVzdHMvbWF0aG1sL3ByZXNlbnRhdGlvbi9tZnJhYy1saW5ldGhpY2tu
ZXNzNS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiZjdmZTAKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9tYXRobWwvcHJlc2VudGF0aW9uL21mcmFjLWxp
bmV0aGlja25lc3M1Lmh0bWwKQEAgLTAsMCArMSwxNyBAQAorPCFkb2N0eXBlIGh0bWw+Cis8aHRt
bD4KKyAgPGhlYWQ+CisgICAgPHRpdGxlPm1mcmFjIGxpbmV0aGlja25lc3M8L3RpdGxlPgorICA8
L2hlYWQ+CisgIDxib2R5PgorCisgIDwhLS0gVGhlIGZyYWN0aW9uIGJhciBzaG91bGQgbm90IGJl
IHZpc2libGUgLS0+CisgIDxtYXRoPgorICAgIDxtZnJhYyBsaW5ldGhpY2tuZXNzPSIwIj4KKyAg
ICAgIDxtaT54PC9taT4KKyAgICAgIDxtaT55PC9taT4KKyAgICA8L21mcmFjPgorICA8L21hdGg+
CisKKyAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDNkZDQzYTQuLjVmY2FjZGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAxMy0wNi0yNiAgRnLDqWTDqXJpYyBXYW5nICA8
ZnJlZC53YW5nQGZyZWUuZnI+CisKKyAgICAgICAgSW1wbGVtZW50IHBhcnNpbmcgb2YgTWF0aE1M
IGxlbmd0aHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMTgwNTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBIHBhcnNpbmcgZnVuY3Rpb24gZm9yIE1hdGhNTCBsZW5ndGhzLCBzaW1pbGFyIHRvIEdlY2tv
J3Mgb25lLCBpcworICAgICAgICBpbXBsZW1lbnRlZC4gSXQgaXMgY3VycmVudGx5IG9ubHkgdXNl
ZCB0byBwYXJzZSBtZnJhY0BsaW5ldGhpY2tuZXNzIGJ1dAorICAgICAgICB3aWxsIGJlIGNvbnZl
bmllbnQgdG8gcGFyc2Ugb3RoZXIgTWF0aE1MIGF0dHJpYnV0ZXMgaW4gdGhlIGZ1dHVyZS4KKwor
ICAgICAgICBUZXN0czogbWF0aG1sL3ByZXNlbnRhdGlvbi9tZnJhYy1saW5ldGhpY2tuZXNzMS5o
dG1sCisgICAgICAgICAgICAgICBtYXRobWwvcHJlc2VudGF0aW9uL21mcmFjLWxpbmV0aGlja25l
c3MyLmh0bWwKKyAgICAgICAgICAgICAgIG1hdGhtbC9wcmVzZW50YXRpb24vbWZyYWMtbGluZXRo
aWNrbmVzczMuaHRtbAorICAgICAgICAgICAgICAgbWF0aG1sL3ByZXNlbnRhdGlvbi9tZnJhYy1s
aW5ldGhpY2tuZXNzNC5odG1sCisgICAgICAgICAgICAgICBtYXRobWwvcHJlc2VudGF0aW9uL21m
cmFjLWxpbmV0aGlja25lc3M1Lmh0bWwKKworICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVu
ZGVyTWF0aE1MQmxvY2suY3BwOiBhZGQgcGFyc2luZyBmdW5jdGlvbnMKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlck1hdGhNTEJsb2NrOjpQYXJzZUxlbmd0aCk6IHBhcnNpbmcgTWF0aE1MIExlbmd0
aCAobnVtYmVyIHVuaXQpCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxCbG9jazo6UGFy
c2VOYW1lZFNwYWNlKTogcGFyc2luZyBNYXRoTUwgbmFtZWRzcGFjZXMKKyAgICAgICAgKiByZW5k
ZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmg6IGRlY2xhcmUgcGFyc2luZyBmdW5jdGlv
bnMKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZyYWN0aW9uLmNwcDog
dXNlIHRoZSBwYXJzaW5nIGZ1bmN0aW9uIGZvciBsaW5ldGhpY2tuZXNzCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJNYXRoTUxGcmFjdGlvbjo6dXBkYXRlRnJvbUVsZW1lbnQpOgorCiAyMDEzLTA2
LTI2ICBLYW5naWwgSGFuICA8a2FuZ2lsLmhhbkBzYW1zdW5nLmNvbT4KIAogICAgICAgICBBZG9w
dCBpcy90b0hUTUxBdWRpb0VsZW1lbnQgZm9yIGNvZGUgY2xlYW51cApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcAppbmRleCBl
MTkxYTA4Li4yYTM1MWY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0
aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
bWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIk1hdGhNTE5hbWVzLmgiCiAjaW5jbHVkZSAi
UmVuZGVyVmlldy5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogI2lm
IEVOQUJMRShERUJVR19NQVRIX0xBWU9VVCkKICNpbmNsdWRlICJQYWludEluZm8uaCIKQEAgLTE4
Nyw2ICsxODgsMTc4IEBAIHZvaWQgUmVuZGVyTWF0aE1MQmxvY2s6OnBhaW50KFBhaW50SW5mbyYg
aW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogfQogI2VuZGlmIC8vIEVOQUJM
RShERUJVR19NQVRIX0xBWU9VVCkKIAorLy8KKy8vIFRoZSBNYXRoTUwgc3BlY2lmaWNhdGlvbiBz
YXlzOgorLy8gKGh0dHA6Ly93d3cudzMub3JnL1RSL01hdGhNTC9jaGFwdGVyMi5odG1sI2Z1bmQu
dW5pdHMpCisvLworLy8gIk1vc3QgcHJlc2VudGF0aW9uIGVsZW1lbnRzIGhhdmUgYXR0cmlidXRl
cyB0aGF0IGFjY2VwdCB2YWx1ZXMgcmVwcmVzZW50aW5nCisvLyBsZW5ndGhzIHRvIGJlIHVzZWQg
Zm9yIHNpemUsIHNwYWNpbmcgb3Igc2ltaWxhciBwcm9wZXJ0aWVzLiBUaGUgc3ludGF4IG9mIGEK
Ky8vIGxlbmd0aCBpcyBzcGVjaWZpZWQgYXMKKy8vCisvLyBudW1iZXIgfCBudW1iZXIgdW5pdCB8
IG5hbWVkc3BhY2UKKy8vCisvLyBUaGVyZSBzaG91bGQgYmUgbm8gc3BhY2UgYmV0d2VlbiB0aGUg
bnVtYmVyIGFuZCB0aGUgdW5pdCBvZiBhIGxlbmd0aC4iCisvLyAKKy8vICJBIHRyYWlsaW5nICcl
JyByZXByZXNlbnRzIGEgcGVyY2VudCBvZiB0aGUgZGVmYXVsdCB2YWx1ZS4gVGhlIGRlZmF1bHQK
Ky8vIHZhbHVlLCBvciBob3cgaXQgaXMgb2J0YWluZWQsIGlzIGxpc3RlZCBpbiB0aGUgdGFibGUg
b2YgYXR0cmlidXRlcyBmb3IgZWFjaAorLy8gZWxlbWVudC4gWy4uLl0gQSBudW1iZXIgd2l0aG91
dCBhIHVuaXQgaXMgaW50ZXByZXRlZCBhcyBhIG11bHRpcGxlIG9mIHRoZQorLy8gZGVmYXVsdCB2
YWx1ZS4iCisvLworLy8gIlRoZSBwb3NzaWJsZSB1bml0cyBpbiBNYXRoTUwgYXJlOgorLy8gIAor
Ly8gVW5pdCBEZXNjcmlwdGlvbgorLy8gZW0gICBhbiBlbSAoZm9udC1yZWxhdGl2ZSB1bml0IHRy
YWRpdGlvbmFsbHkgdXNlZCBmb3IgaG9yaXpvbnRhbCBsZW5ndGhzKQorLy8gZXggICBhbiBleCAo
Zm9udC1yZWxhdGl2ZSB1bml0IHRyYWRpdGlvbmFsbHkgdXNlZCBmb3IgdmVydGljYWwgbGVuZ3Ro
cykKKy8vIHB4ICAgcGl4ZWxzLCBvciBzaXplIG9mIGEgcGl4ZWwgaW4gdGhlIGN1cnJlbnQgZGlz
cGxheQorLy8gaW4gICBpbmNoZXMgKDEgaW5jaCA9IDIuNTQgY2VudGltZXRlcnMpCisvLyBjbSAg
IGNlbnRpbWV0ZXJzCisvLyBtbSAgIG1pbGxpbWV0ZXJzCisvLyBwdCAgIHBvaW50cyAoMSBwb2lu
dCA9IDEvNzIgaW5jaCkKKy8vIHBjICAgcGljYXMgKDEgcGljYSA9IDEyIHBvaW50cykKKy8vICUg
ICAgcGVyY2VudGFnZSBvZiBkZWZhdWx0IHZhbHVlIgorLy8KKy8vIFRoZSBudW1iZXJzIGFyZSBk
ZWZpbmVkIHRoYXQgd2F5OgorLy8gLSB1bnNpZ25lZC1udW1iZXI6ICJhIHN0cmluZyBvZiBkZWNp
bWFsIGRpZ2l0cyB3aXRoIHVwIHRvIG9uZSBkZWNpbWFsIHBvaW50CisvLyAgIChVKzAwMkUpLCBy
ZXByZXNlbnRpbmcgYSBub24tbmVnYXRpdmUgdGVybWluYXRpbmcgZGVjaW1hbCBudW1iZXIgKGEg
dHlwZSBvZgorLy8gICByYXRpb25hbCBudW1iZXIpIgorLy8gLSBudW1iZXI6ICJhbiBvcHRpb25h
bCBwcmVmaXggb2YgJy0nIChVKzAwMkQpLCBmb2xsb3dlZCBieSBhbiB1bnNpZ25lZAorLy8gICBu
dW1iZXIsIHJlcHJlc2VudGluZyBhIHRlcm1pbmF0aW5nIGRlY2ltYWwgbnVtYmVyIChhIHR5cGUg
b2YgcmF0aW9uYWwKKy8vICAgbnVtYmVyKSIKKy8vCitib29sIFJlbmRlck1hdGhNTEJsb2NrOjpQ
YXJzZUxlbmd0aChjb25zdCBTdHJpbmcmIHN0cmluZywgZmxvYXQmIGxlbmd0aFZhbHVlLCBib29s
IGFsbG93TmVnYXRpdmUpCit7CisgICAgU3RyaW5nIHMgPSBzdHJpbmcuc2ltcGxpZnlXaGl0ZVNw
YWNlKCk7CisKKyAgICBpbnQgc3RyaW5nTGVuZ3RoID0gcy5sZW5ndGgoKTsKKyAgICBpZiAoIXN0
cmluZ0xlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKFBhcnNlTmFtZWRT
cGFjZShzLCBsZW5ndGhWYWx1ZSwgYWxsb3dOZWdhdGl2ZSkpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgU3RyaW5nQnVpbGRlciBudW1iZXI7CisgICAgU3RyaW5nIHVuaXQ7CisKKyAgICAv
LyBzZWUgaWYgdGhlIG5lZ2F0aXZlIHNpZ24gaXMgdGhlcmUKKyAgICBpbnQgaSA9IDA7CisgICAg
VUNoYXIgYyA9IHNbMF07CisgICAgaWYgKGMgPT0gJy0nKSB7CisgICAgICAgIG51bWJlci5hcHBl
bmQoYyk7CisgICAgICAgIGkrKzsKKyAgICB9CisKKyAgICAvLyBHYXRoZXIgdXAgY2hhcmFjdGVy
cyB0aGF0IG1ha2UgdXAgdGhlIG51bWJlcgorICAgIGJvb2wgZ290RG90ID0gZmFsc2U7CisgICAg
Zm9yICggOyBpIDwgc3RyaW5nTGVuZ3RoOyBpKyspIHsKKyAgICAgICAgYyA9IHNbaV07CisgICAg
ICAgIGlmIChnb3REb3QgJiYgYyA9PSAnLicpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8v
IHR3byBkb3RzIGVuY291bnRlcmVkCisgICAgICAgIGlmIChjID09ICcuJykgeworICAgICAgICAg
ICAgZ290RG90ID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIGlmICghaXNBU0NJSURpZ2l0KGMpKSB7
CisgICAgICAgICAgICB1bml0ID0gcy5zdWJzdHJpbmcoaSwgc3RyaW5nTGVuZ3RoIC0gaSk7Cisg
ICAgICAgICAgICAvLyBzb21lIGF1dGhvcnMgbGVhdmUgYmxhbmtzIGJlZm9yZSB0aGUgdW5pdCwg
YnV0IHRoYXQgc2hvdWxkbid0CisgICAgICAgICAgICAvLyBiZSBhbGxvd2VkLCBzbyBkb24ndCBz
aW1wbGlmeVdoaXRlc3BhY2Ugb24gJ3VuaXQnLgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgbnVtYmVyLmFwcGVuZChjKTsKKyAgICB9CisKKyAgICAvLyBDb252ZXJ0IG51
bWJlciB0byBmbG9hdGluZyBwb2ludAorICAgIGJvb2wgb2s7CisgICAgZmxvYXQgZmxvYXRWYWx1
ZSA9IG51bWJlci50b1N0cmluZygpLnRvRmxvYXQoJm9rKTsKKyAgICBpZiAoIW9rKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGZsb2F0VmFsdWUgPCAwICYmICFhbGxvd05lZ2F0aXZl
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAodW5pdC5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgLy8gbm8gZXhwbGljaXQgdW5pdCwgdGhpcyBpcyBhIG51bWJlciB0aGF0IHdpbGwgYWN0
IGFzIGEgbXVsdGlwbGllcgorICAgICAgICBsZW5ndGhWYWx1ZSAqPSBmbG9hdFZhbHVlOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKHVuaXQgPT0gIiUiKSB7CisgICAgICAg
IGxlbmd0aFZhbHVlICo9IGZsb2F0VmFsdWUgLyAxMDAuMDsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIGlmICh1bml0ID09ICJlbSIpIHsKKyAgICAgICAgbGVuZ3RoVmFsdWUgPSBm
bG9hdFZhbHVlICogc3R5bGUoKS0+Zm9udCgpLnNpemUoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIGlmICh1bml0ID09ICJleCIpIHsKKyAgICAgICAgbGVuZ3RoVmFsdWUgPSBm
bG9hdFZhbHVlICogc3R5bGUoKS0+Zm9udE1ldHJpY3MoKS54SGVpZ2h0KCk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICBpZiAodW5pdCA9PSAicHgiKSB7CisgICAgICAgIGxlbmd0
aFZhbHVlID0gZmxvYXRWYWx1ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlm
ICh1bml0ID09ICJwdCIpIHsKKyAgICAgICAgbGVuZ3RoVmFsdWUgPSA0LiAvIDMuICogZmxvYXRW
YWx1ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmICh1bml0ID09ICJwYyIp
IHsKKyAgICAgICAgbGVuZ3RoVmFsdWUgPSAoNC4gLyAzLiAqIGZsb2F0VmFsdWUpICogMTIuOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKHVuaXQgPT0gImluIikgeworICAg
ICAgICBsZW5ndGhWYWx1ZSA9IDk2LiAqIGZsb2F0VmFsdWU7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICBpZiAodW5pdCA9PSAiY20iKSB7CisgICAgICAgIGxlbmd0aFZhbHVlID0g
OTYuICogZmxvYXRWYWx1ZSAvIDIuNTQ7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICBpZiAodW5pdCA9PSAibW0iKSB7CisgICAgICAgIGxlbmd0aFZhbHVlID0gKDk2LiAqIGZsb2F0
VmFsdWUgLyAyLjU0KSAvIDEwLjsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
Ly8gdW5leHBlY3RlZCB1bml0CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlck1h
dGhNTEJsb2NrOjpQYXJzZU5hbWVkU3BhY2UoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGZsb2F0JiBs
ZW5ndGhWYWx1ZSwgYm9vbCBhbGxvd05lZ2F0aXZlKQoreworICAgIGZsb2F0IGxlbmd0aCA9IDAu
OworICAgIC8vIFNlZSBpZiBpdCBpcyBvbmUgb2YgdGhlIG5hbWVkc3BhY2VzIChyYW5naW5nIC03
LzE4ZW0sIC02LzE4LCAuLi4gNy8xOGVtKQorICAgIGlmIChzdHJpbmcgPT0gInZlcnl2ZXJ5dGhp
bm1hdGhzcGFjZSIpCisgICAgICAgIGxlbmd0aCA9IDEuOworICAgIGVsc2UgaWYgKHN0cmluZyA9
PSAidmVyeXRoaW5tYXRoc3BhY2UiKQorICAgICAgICBsZW5ndGggPSAyLjsKKyAgICBlbHNlIGlm
IChzdHJpbmcgPT0gInRoaW5tYXRoc3BhY2UiKQorICAgICAgICBsZW5ndGggPSAzLjsKKyAgICBl
bHNlIGlmIChzdHJpbmcgPT0gIm1lZGl1bW1hdGhzcGFjZSIpCisgICAgICAgIGxlbmd0aCA9IDQu
OworICAgIGVsc2UgaWYgKHN0cmluZyA9PSAidGhpY2ttYXRoc3BhY2UiKQorICAgICAgICBsZW5n
dGggPSA1LjsKKyAgICBlbHNlIGlmIChzdHJpbmcgPT0gInZlcnl0aGlja21hdGhzcGFjZSIpCisg
ICAgICAgIGxlbmd0aCA9IDYuOworICAgIGVsc2UgaWYgKHN0cmluZyA9PSAidmVyeXZlcnl0aGlj
a21hdGhzcGFjZSIpCisgICAgICAgIGxlbmd0aCA9IDcuOworICAgIGVsc2UgaWYgKGFsbG93TmVn
YXRpdmUpIHsKKyAgICAgICAgaWYgKHN0cmluZyA9PSAibmVnYXRpdmV2ZXJ5dmVyeXRoaW5tYXRo
c3BhY2UiKQorICAgICAgICAgICAgbGVuZ3RoID0gLTEuOworICAgICAgICBlbHNlIGlmIChzdHJp
bmcgPT0gIm5lZ2F0aXZldmVyeXRoaW5tYXRoc3BhY2UiKQorICAgICAgICAgICAgbGVuZ3RoID0g
LTIuOworICAgICAgICBlbHNlIGlmIChzdHJpbmcgPT0gIm5lZ2F0aXZldGhpbm1hdGhzcGFjZSIp
CisgICAgICAgICAgICBsZW5ndGggPSAtMy47CisgICAgICAgIGVsc2UgaWYgKHN0cmluZyA9PSAi
bmVnYXRpdmVtZWRpdW1tYXRoc3BhY2UiKQorICAgICAgICAgICAgbGVuZ3RoID0gLTQuOworICAg
ICAgICBlbHNlIGlmIChzdHJpbmcgPT0gIm5lZ2F0aXZldGhpY2ttYXRoc3BhY2UiKQorICAgICAg
ICAgICAgbGVuZ3RoID0gLTUuOworICAgICAgICBlbHNlIGlmIChzdHJpbmcgPT0gIm5lZ2F0aXZl
dmVyeXRoaWNrbWF0aHNwYWNlIikKKyAgICAgICAgICAgIGxlbmd0aCA9IC02LjsKKyAgICAgICAg
ZWxzZSBpZiAoc3RyaW5nID09ICJuZWdhdGl2ZXZlcnl2ZXJ5dGhpY2ttYXRoc3BhY2UiKQorICAg
ICAgICAgICAgbGVuZ3RoID0gLTcuOyAgICAgICAgCisgICAgfQorICAgIGlmIChsZW5ndGgpIHsK
KyAgICAgICAgbGVuZ3RoVmFsdWUgPSBsZW5ndGggKiBzdHlsZSgpLT5mb250KCkuc2l6ZSgpIC8g
MTguOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQor
CiBpbnQgUmVuZGVyTWF0aE1MVGFibGU6OmZpcnN0TGluZUJveEJhc2VsaW5lKCkgY29uc3QKIHsK
ICAgICAvLyBJbiBsZWdhbCBNYXRoTUwsIHdlJ2xsIGhhdmUgYSBNYXRoTUwgcGFyZW50LiBUaGF0
IFJlbmRlckZsZXhpYmxlQm94IHBhcmVudCB3aWxsIHVzZSBvdXIgZmlyc3RMaW5lQm94QmFzZWxp
bmUoKSBmb3IgYmFzZWxpbmUgYWxpZ25tZW50LCBwZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suaAppbmRleCBjZDkzZjk5Li5iNTc2
MTQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1h
dGhNTEJsb2NrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJN
YXRoTUxCbG9jay5oCkBAIC01Niw2ICs1NiwyMiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29s
IGlzUmVuZGVyTWF0aE1MU3ViU3VwKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0
dWFsIGJvb2wgaXNSZW5kZXJNYXRoTUxVbmRlck92ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQogICAgIAorICAgIC8vIFBhcnNpbmcgZnVuY3Rpb25zIGZvciBNYXRoTUwgTGVuZ3RoIHZhbHVl
cworICAgIC8vCisgICAgLy8gICAtIFN0cmluZyBwYXJhbWV0ZXI6IHRoZSBzdHJpbmcgdG8gcGFy
c2UuCisgICAgLy8KKyAgICAvLyAgIC0gZmxvYXQgcGFyYW1ldGVyOiB0aGlzIHZhcmlhYmxlIHdp
bGwgYmUgc2V0IHRvIHRoZSBjb21wdXRlZCBsZW5ndGguCisgICAgLy8gICAgIFBlcmNlbnQgYW5k
IHVuaXRsZXNzIGxlbmd0aHMgYXJlIG11bHRpcGxlIG9mIHRoZSAiY3VycmVudCB2YWx1ZSIgdGhh
dAorICAgIC8vICAgICBzaG91bGQgYmUgc3BlY2lmaWVkIGFzIGlucHV0LiBTZWUgdGhlIE1hdGhN
TCBzcGVjaWZpY2F0aW9uOgorICAgIC8vICAgICBodHRwOi8vd3d3LnczLm9yZy9UUi9NYXRoTUwv
Y2hhcHRlcjIuaHRtbCNmdW5kLnVuaXRzCisgICAgLy8KKyAgICAvLyAgIC0gYWxsb3dOZWdhdGl2
ZTogd2hldGhlciBuZWdhdGl2ZSBsZW5ndGhzIGFyZSBhbGxvd2VkLgorICAgIC8vCisgICAgLy8g
ICAtIHJldHVybmVkIHZhbHVlOiB3aGV0aGVyIHRoZSBwYXJzaW5nIHN1Y2NlZWRlZC4KKyAgICAv
LworICAgIGJvb2wgUGFyc2VMZW5ndGgoY29uc3QgU3RyaW5nJiwgZmxvYXQmLCBib29sIGFsbG93
TmVnYXRpdmUgPSB0cnVlKTsKKyAgICBib29sIFBhcnNlTmFtZWRTcGFjZShjb25zdCBTdHJpbmcm
LCBmbG9hdCYsIGJvb2wgYWxsb3dOZWdhdGl2ZSA9IHRydWUpOworCiAgICAgLy8gTWF0aE1MIGRl
ZmluZXMgYW4gImVtYmVsbGlzaGVkIG9wZXJhdG9yIiBhcyByb3VnaGx5IGFuIDxtbz4gdGhhdCBt
YXkgaGF2ZSBzdWJzY3JpcHRzLAogICAgIC8vIHN1cGVyc2NyaXB0cywgdW5kZXJzY3JpcHRzLCBv
dmVyc2NyaXB0cywgb3IgYSBkZW5vbWluYXRvciAoYXMgaW4gZC9keCwgd2hlcmUgImQiIGlzIHNv
bWUKICAgICAvLyBkaWZmZXJlbnRpYWwgb3BlcmF0b3IpLiBUaGUgcGFkZGluZywgcHJlY2VkZW5j
ZSwgYW5kIHN0cmV0Y2hpbmVzcyBvZiB0aGUgYmFzZSA8bW8+IHNob3VsZApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZyYWN0aW9uLmNw
cAppbmRleCA2ZjNhMzdlLi4yNmE2MTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZyYWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZyYWN0aW9uLmNwcApAQCAtNzgsMTIgKzc4
LDggQEAgdm9pZCBSZW5kZXJNYXRoTUxGcmFjdGlvbjo6dXBkYXRlRnJvbUVsZW1lbnQoKQogICAg
ICAgICBtX2xpbmVUaGlja25lc3MgPSBnTGluZU1lZGl1bTsKICAgICBlbHNlIGlmIChlcXVhbEln
bm9yaW5nQ2FzZSh0aGlja25lc3MsICJ0aGljayIpKQogICAgICAgICBtX2xpbmVUaGlja25lc3Mg
PSBnTGluZVRoaWNrOwotICAgIGVsc2UgewotICAgICAgICBib29sIGNvbnZlcnRlZCA9IGZhbHNl
OwotICAgICAgICBpbnQgdGhpY2tuZXNzSW50VmFsdWUgPSB0aGlja25lc3MudG9JbnRTdHJpY3Qo
JmNvbnZlcnRlZCk7Ci0gICAgICAgIGlmIChjb252ZXJ0ZWQpCi0gICAgICAgICAgICBtX2xpbmVU
aGlja25lc3MgPSB0aGlja25lc3NJbnRWYWx1ZTsKLSAgICB9CisgICAgZWxzZQorICAgICAgICBQ
YXJzZUxlbmd0aCh0aGlja25lc3MsIG1fbGluZVRoaWNrbmVzcywgZmFsc2UpOwogCiAgICAgLy8g
VXBkYXRlIHRoZSBzdHlsZSBmb3IgdGhlIHBhZGRpbmcgb2YgdGhlIGRlbm9taW5hdG9yIGZvciB0
aGUgbGluZSB0aGlja25lc3MKICAgICBsYXN0Q2hpbGQoKS0+c3R5bGUoKS0+c2V0UGFkZGluZ1Rv
cChMZW5ndGgoc3RhdGljX2Nhc3Q8aW50PihtX2xpbmVUaGlja25lc3MpLCBGaXhlZCkpOwo=
</data>
<flag name="review"
          id="227021"
          type_id="1"
          status="-"
          setter="cfleizach"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>205585</attachid>
            <date>2013-06-27 04:36:29 -0700</date>
            <delta_ts>2013-06-27 13:25:11 -0700</delta_ts>
            <desc>Patch V2</desc>
            <filename>118053.diff</filename>
            <type>text/plain</type>
            <size>15074</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA5MzllNTJiLi5kZjk1Y2Q4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTMtMDYt
MjcgIEZyw6lkw6lyaWMgV2FuZyAgPGZyZWQud2FuZ0BmcmVlLmZyPgorCisgICAgICAgIEltcGxl
bWVudCBwYXJzaW5nIG9mIE1hdGhNTCBsZW5ndGhzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4MDUzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHNvbWUgcmVmdGVzdHMgZm9yIG1mcmFjQGxpbmV0
aGlja25lc3MuIEJldHRlciB0ZXN0cyBmb3IgdGhlIHBhcnNpbmcKKyAgICAgICAgb2YgTWF0aE1M
IGxlbmd0aHMgd2lsbCBiZSBwcm92aWRlZCB3aGVuIG1zcGFjZSBpcyBpbXBsZW1lbnRlZAorICAg
ICAgICAoYnVnIDExNTYxMCkKKworICAgICAgICAqIG1hdGhtbC9wcmVzZW50YXRpb24vbWZyYWMt
bGluZXRoaWNrbmVzczEtZXhwZWN0ZWQtbWlzbWF0Y2guaHRtbDogQWRkZWQuCisgICAgICAgICog
bWF0aG1sL3ByZXNlbnRhdGlvbi9tZnJhYy1saW5ldGhpY2tuZXNzMS5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBtYXRobWwvcHJlc2VudGF0aW9uL21mcmFjLWxpbmV0aGlja25lc3MyLWV4cGVjdGVk
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIG1hdGhtbC9wcmVzZW50YXRpb24vbWZyYWMtbGluZXRo
aWNrbmVzczIuaHRtbDogQWRkZWQuCisgICAgICAgICogbWF0aG1sL3ByZXNlbnRhdGlvbi9tZnJh
Yy1saW5ldGhpY2tuZXNzMy1leHBlY3RlZC1taXNtYXRjaC5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBtYXRobWwvcHJlc2VudGF0aW9uL21mcmFjLWxpbmV0aGlja25lc3MzLmh0bWw6IEFkZGVkLgor
CiAyMDEzLTA2LTI1ICBLcnp5c3p0b2YgQ3plY2ggIDxrLmN6ZWNoQHNhbXN1bmcuY29tPgogCiAg
ICAgICAgIFtBWF1bQVRLXSBVcGRhdGUgYWNjZXNzaWJpbGl0eSBiYXNlbGluZXMgYWZ0ZXIgcjE1
MTk1MwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvbWF0aG1sL3ByZXNlbnRhdGlvbi9tZnJhYy1s
aW5ldGhpY2tuZXNzMS1leHBlY3RlZC1taXNtYXRjaC5odG1sIGIvTGF5b3V0VGVzdHMvbWF0aG1s
L3ByZXNlbnRhdGlvbi9tZnJhYy1saW5ldGhpY2tuZXNzMS1leHBlY3RlZC1taXNtYXRjaC5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmM2M5NDQKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9tYXRobWwvcHJlc2VudGF0aW9uL21mcmFjLWxpbmV0aGlja25l
c3MxLWV4cGVjdGVkLW1pc21hdGNoLmh0bWwKQEAgLTAsMCArMSwxMSBAQAorPCFkb2N0eXBlIGh0
bWw+Cis8aHRtbD4KKyAgPGhlYWQ+CisgICAgPHRpdGxlPm1mcmFjIGxpbmV0aGlja25lc3M8L3Rp
dGxlPgorICA8L2hlYWQ+CisgIDxib2R5PgorCisgIDxkaXYgc3R5bGU9InBvc2l0aW9uOiBhYnNv
bHV0ZTsgdG9wOiAwOyBsZWZ0OiAwOyB3aWR0aDogNTAwcHg7IGhlaWdodDogMTUwcHg7IGJhY2tn
cm91bmQ6IGJsdWU7Ij48L2Rpdj4KKworICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9tYXRobWwvcHJlc2VudGF0aW9uL21mcmFjLWxpbmV0aGlja25lc3MxLmh0bWwg
Yi9MYXlvdXRUZXN0cy9tYXRobWwvcHJlc2VudGF0aW9uL21mcmFjLWxpbmV0aGlja25lc3MxLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM1OTFkYgotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL21hdGhtbC9wcmVzZW50YXRpb24vbWZyYWMtbGluZXRoaWNr
bmVzczEuaHRtbApAQCAtMCwwICsxLDIxIEBACis8IWRvY3R5cGUgaHRtbD4KKzxodG1sPgorICA8
aGVhZD4KKyAgICA8dGl0bGU+bWZyYWMgbGluZXRoaWNrbmVzczwvdGl0bGU+CisgIDwvaGVhZD4K
KyAgPGJvZHk+CisKKyAgPCEtLSBUaGlzIG1mcmFjIHNob3VsZCBiZSB0YWxsIGVub3VnaCwgb3Ig
aXQgd2lsbCBiZSBoaWRkZW4gYnkgdGhlIGJsdWUgcmVjdGFuZ2xlIC0tPgorICA8ZGl2IHN0eWxl
PSJwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMDsgbGVmdDogMDsiPgorICAgIDxtYXRoPgorICAg
ICAgPG1mcmFjIGxpbmV0aGlja25lc3M9IjIwMHB4Ij4KKyAgICAgICAgPG1pPng8L21pPgorICAg
ICAgICA8bWk+eTwvbWk+CisgICAgICA8L21mcmFjPgorICAgIDwvbWF0aD4KKyAgPC9kaXY+CisK
KyAgPGRpdiBzdHlsZT0icG9zaXRpb246IGFic29sdXRlOyB0b3A6IDA7IGxlZnQ6IDA7IHdpZHRo
OiA1MDBweDsgaGVpZ2h0OiAxNTBweDsgYmFja2dyb3VuZDogYmx1ZTsiPjwvZGl2PgorCisgIDwv
Ym9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL21hdGhtbC9wcmVzZW50YXRp
b24vbWZyYWMtbGluZXRoaWNrbmVzczItZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL21hdGht
bC9wcmVzZW50YXRpb24vbWZyYWMtbGluZXRoaWNrbmVzczItZXhwZWN0ZWQuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjY2ZDZmCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvbWF0aG1sL3ByZXNlbnRhdGlvbi9tZnJhYy1saW5ldGhpY2tuZXNzMi1leHBl
Y3RlZC5odG1sCkBAIC0wLDAgKzEsMzAgQEAKKzwhZG9jdHlwZSBodG1sPgorPGh0bWw+CisgIDxo
ZWFkPgorICAgIDx0aXRsZT5tZnJhYyBsaW5ldGhpY2tuZXNzPC90aXRsZT4KKyAgPC9oZWFkPgor
ICA8Ym9keT4KKworICA8bWF0aD4KKyAgICA8bWZyYWM+CisgICAgICA8bWk+eDwvbWk+CisgICAg
ICA8bWk+eTwvbWk+CisgICAgPC9tZnJhYz4KKyAgPC9tYXRoPgorCisgIDxtYXRoPgorICAgIDxt
ZnJhYyBsaW5ldGhpY2tuZXNzPSI1Ij4KKyAgICAgIDxtaT54PC9taT4KKyAgICAgIDxtaT55PC9t
aT4KKyAgICA8L21mcmFjPgorICA8L21hdGg+CisKKyAgPG1hdGg+CisgICAgPG1mcmFjIGxpbmV0
aGlja25lc3M9IjAuMzg4ODg4ODg5ZW0iPgorICAgICAgPG1pPng8L21pPgorICAgICAgPG1pPnk8
L21pPgorICAgIDwvbWZyYWM+CisgIDwvbWF0aD4KKworICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9tYXRobWwvcHJlc2VudGF0aW9uL21mcmFjLWxpbmV0aGlja25l
c3MyLmh0bWwgYi9MYXlvdXRUZXN0cy9tYXRobWwvcHJlc2VudGF0aW9uL21mcmFjLWxpbmV0aGlj
a25lc3MyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVlYTk3Ywot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL21hdGhtbC9wcmVzZW50YXRpb24vbWZyYWMt
bGluZXRoaWNrbmVzczIuaHRtbApAQCAtMCwwICsxLDMzIEBACis8IWRvY3R5cGUgaHRtbD4KKzxo
dG1sPgorICA8aGVhZD4KKyAgICA8dGl0bGU+bWZyYWMgbGluZXRoaWNrbmVzczwvdGl0bGU+Cisg
IDwvaGVhZD4KKyAgPGJvZHk+CisKKyAgPCEtLSBUaGUgbGluZXRoaWNrbmVzcyBzaG91bGQgYmUg
aWdub3JlZCAtLT4KKyAgPG1hdGg+CisgICAgPG1mcmFjIGxpbmV0aGlja25lc3M9Ii0xLjIzZW0i
PgorICAgICAgPG1pPng8L21pPgorICAgICAgPG1pPnk8L21pPgorICAgIDwvbWZyYWM+CisgIDwv
bWF0aD4KKworICA8IS0tIFRoZSBsaW5ldGhpY2tuZXNzIHNob3VsZCBiZSA1IHRpbWVzIHRoZSBk
ZWZhdWx0IHZhbHVlIC0tPgorICA8bWF0aD4KKyAgICA8bWZyYWMgbGluZXRoaWNrbmVzcz0iNTAw
JSI+CisgICAgICA8bWk+eDwvbWk+CisgICAgICA8bWk+eTwvbWk+CisgICAgPC9tZnJhYz4KKyAg
PC9tYXRoPgorCisgIDwhLS0gVGhlIGxpbmV0aGlja25lc3Mgc2hvdWxkIGJlIH43LzE4ZW0gLS0+
CisgIDxtYXRoPgorICAgIDxtZnJhYyBsaW5ldGhpY2tuZXNzPSJ2ZXJ5dmVyeXRoaWNrbWF0aHNw
YWNlIj4KKyAgICAgIDxtaT54PC9taT4KKyAgICAgIDxtaT55PC9taT4KKyAgICA8L21mcmFjPgor
ICA8L21hdGg+CisKKyAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
bWF0aG1sL3ByZXNlbnRhdGlvbi9tZnJhYy1saW5ldGhpY2tuZXNzMy1leHBlY3RlZC1taXNtYXRj
aC5odG1sIGIvTGF5b3V0VGVzdHMvbWF0aG1sL3ByZXNlbnRhdGlvbi9tZnJhYy1saW5ldGhpY2tu
ZXNzMy1leHBlY3RlZC1taXNtYXRjaC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmE5NjJkYTEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9tYXRobWwvcHJl
c2VudGF0aW9uL21mcmFjLWxpbmV0aGlja25lc3MzLWV4cGVjdGVkLW1pc21hdGNoLmh0bWwKQEAg
LTAsMCArMSwxNiBAQAorPCFkb2N0eXBlIGh0bWw+Cis8aHRtbD4KKyAgPGhlYWQ+CisgICAgPHRp
dGxlPm1mcmFjIGxpbmV0aGlja25lc3M8L3RpdGxlPgorICA8L2hlYWQ+CisgIDxib2R5PgorCisg
IDxtYXRoPgorICAgIDxtZnJhYz4KKyAgICAgIDxtaT54PC9taT4KKyAgICAgIDxtaT55PC9taT4K
KyAgICA8L21mcmFjPgorICA8L21hdGg+CisKKyAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvbWF0aG1sL3ByZXNlbnRhdGlvbi9tZnJhYy1saW5ldGhpY2tuZXNzMy5o
dG1sIGIvTGF5b3V0VGVzdHMvbWF0aG1sL3ByZXNlbnRhdGlvbi9tZnJhYy1saW5ldGhpY2tuZXNz
My5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiZjdmZTAKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9tYXRobWwvcHJlc2VudGF0aW9uL21mcmFjLWxpbmV0
aGlja25lc3MzLmh0bWwKQEAgLTAsMCArMSwxNyBAQAorPCFkb2N0eXBlIGh0bWw+Cis8aHRtbD4K
KyAgPGhlYWQ+CisgICAgPHRpdGxlPm1mcmFjIGxpbmV0aGlja25lc3M8L3RpdGxlPgorICA8L2hl
YWQ+CisgIDxib2R5PgorCisgIDwhLS0gVGhlIGZyYWN0aW9uIGJhciBzaG91bGQgbm90IGJlIHZp
c2libGUgLS0+CisgIDxtYXRoPgorICAgIDxtZnJhYyBsaW5ldGhpY2tuZXNzPSIwIj4KKyAgICAg
IDxtaT54PC9taT4KKyAgICAgIDxtaT55PC9taT4KKyAgICA8L21mcmFjPgorICA8L21hdGg+CisK
KyAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDNkZDQzYTQuLmU5NWVhY2EgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAxMy0wNi0yNyAgRnLDqWTDqXJpYyBXYW5nICA8ZnJl
ZC53YW5nQGZyZWUuZnI+CisKKyAgICAgICAgSW1wbGVtZW50IHBhcnNpbmcgb2YgTWF0aE1MIGxl
bmd0aHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MTgwNTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
IHBhcnNpbmcgZnVuY3Rpb24gZm9yIE1hdGhNTCBsZW5ndGhzLCBzaW1pbGFyIHRvIEdlY2tvJ3Mg
b25lLCBpcworICAgICAgICBpbXBsZW1lbnRlZC4gSXQgaXMgY3VycmVudGx5IG9ubHkgdXNlZCB0
byBwYXJzZSBtZnJhY0BsaW5ldGhpY2tuZXNzIGJ1dAorICAgICAgICB3aWxsIGJlIGNvbnZlbmll
bnQgdG8gcGFyc2Ugb3RoZXIgTWF0aE1MIGF0dHJpYnV0ZXMgaW4gdGhlIGZ1dHVyZS4KKworICAg
ICAgICBUZXN0czogbWF0aG1sL3ByZXNlbnRhdGlvbi9tZnJhYy1saW5ldGhpY2tuZXNzMS5odG1s
CisgICAgICAgICAgICAgICBtYXRobWwvcHJlc2VudGF0aW9uL21mcmFjLWxpbmV0aGlja25lc3My
Lmh0bWwKKyAgICAgICAgICAgICAgIG1hdGhtbC9wcmVzZW50YXRpb24vbWZyYWMtbGluZXRoaWNr
bmVzczMuaHRtbAorCisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9j
ay5jcHA6IGFkZCBwYXJzaW5nIGZ1bmN0aW9ucworICAgICAgICAoV2ViQ29yZTo6cGFyc2VNYXRo
TUxMZW5ndGgpOiBwYXJzaW5nIE1hdGhNTCBMZW5ndGggKG51bWJlciB1bml0KQorICAgICAgICAo
V2ViQ29yZTo6cGFyc2VOYW1lZFNwYWNlKTogcGFyc2luZyBNYXRoTUwgbmFtZWRzcGFjZXMKKyAg
ICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmg6IGRlY2xhcmUgcGFy
c2luZyBmdW5jdGlvbnMKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZy
YWN0aW9uLmNwcDogdXNlIHRoZSBwYXJzaW5nIGZ1bmN0aW9uIGZvciBsaW5ldGhpY2tuZXNzCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxGcmFjdGlvbjo6dXBkYXRlRnJvbUVsZW1lbnQp
OgorCiAyMDEzLTA2LTI2ICBLYW5naWwgSGFuICA8a2FuZ2lsLmhhbkBzYW1zdW5nLmNvbT4KIAog
ICAgICAgICBBZG9wdCBpcy90b0hUTUxBdWRpb0VsZW1lbnQgZm9yIGNvZGUgY2xlYW51cApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9j
ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2Nr
LmNwcAppbmRleCBlMTkxYTA4Li5mYzQ2MTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcApAQCAtMzMsNiArMzMsNyBA
QAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIk1hdGhNTE5hbWVzLmgi
CiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxk
ZXIuaD4KIAogI2lmIEVOQUJMRShERUJVR19NQVRIX0xBWU9VVCkKICNpbmNsdWRlICJQYWludElu
Zm8uaCIKQEAgLTE4Nyw2ICsxODgsMTc5IEBAIHZvaWQgUmVuZGVyTWF0aE1MQmxvY2s6OnBhaW50
KFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogfQogI2Vu
ZGlmIC8vIEVOQUJMRShERUJVR19NQVRIX0xBWU9VVCkKIAorLy8KKy8vIFRoZSBNYXRoTUwgc3Bl
Y2lmaWNhdGlvbiBzYXlzOgorLy8gKGh0dHA6Ly93d3cudzMub3JnL1RSL01hdGhNTC9jaGFwdGVy
Mi5odG1sI2Z1bmQudW5pdHMpCisvLworLy8gIk1vc3QgcHJlc2VudGF0aW9uIGVsZW1lbnRzIGhh
dmUgYXR0cmlidXRlcyB0aGF0IGFjY2VwdCB2YWx1ZXMgcmVwcmVzZW50aW5nCisvLyBsZW5ndGhz
IHRvIGJlIHVzZWQgZm9yIHNpemUsIHNwYWNpbmcgb3Igc2ltaWxhciBwcm9wZXJ0aWVzLiBUaGUg
c3ludGF4IG9mIGEKKy8vIGxlbmd0aCBpcyBzcGVjaWZpZWQgYXMKKy8vCisvLyBudW1iZXIgfCBu
dW1iZXIgdW5pdCB8IG5hbWVkc3BhY2UKKy8vCisvLyBUaGVyZSBzaG91bGQgYmUgbm8gc3BhY2Ug
YmV0d2VlbiB0aGUgbnVtYmVyIGFuZCB0aGUgdW5pdCBvZiBhIGxlbmd0aC4iCisvLyAKKy8vICJB
IHRyYWlsaW5nICclJyByZXByZXNlbnRzIGEgcGVyY2VudCBvZiB0aGUgZGVmYXVsdCB2YWx1ZS4g
VGhlIGRlZmF1bHQKKy8vIHZhbHVlLCBvciBob3cgaXQgaXMgb2J0YWluZWQsIGlzIGxpc3RlZCBp
biB0aGUgdGFibGUgb2YgYXR0cmlidXRlcyBmb3IgZWFjaAorLy8gZWxlbWVudC4gWy4uLl0gQSBu
dW1iZXIgd2l0aG91dCBhIHVuaXQgaXMgaW50ZXByZXRlZCBhcyBhIG11bHRpcGxlIG9mIHRoZQor
Ly8gZGVmYXVsdCB2YWx1ZS4iCisvLworLy8gIlRoZSBwb3NzaWJsZSB1bml0cyBpbiBNYXRoTUwg
YXJlOgorLy8gIAorLy8gVW5pdCBEZXNjcmlwdGlvbgorLy8gZW0gICBhbiBlbSAoZm9udC1yZWxh
dGl2ZSB1bml0IHRyYWRpdGlvbmFsbHkgdXNlZCBmb3IgaG9yaXpvbnRhbCBsZW5ndGhzKQorLy8g
ZXggICBhbiBleCAoZm9udC1yZWxhdGl2ZSB1bml0IHRyYWRpdGlvbmFsbHkgdXNlZCBmb3IgdmVy
dGljYWwgbGVuZ3RocykKKy8vIHB4ICAgcGl4ZWxzLCBvciBzaXplIG9mIGEgcGl4ZWwgaW4gdGhl
IGN1cnJlbnQgZGlzcGxheQorLy8gaW4gICBpbmNoZXMgKDEgaW5jaCA9IDIuNTQgY2VudGltZXRl
cnMpCisvLyBjbSAgIGNlbnRpbWV0ZXJzCisvLyBtbSAgIG1pbGxpbWV0ZXJzCisvLyBwdCAgIHBv
aW50cyAoMSBwb2ludCA9IDEvNzIgaW5jaCkKKy8vIHBjICAgcGljYXMgKDEgcGljYSA9IDEyIHBv
aW50cykKKy8vICUgICAgcGVyY2VudGFnZSBvZiBkZWZhdWx0IHZhbHVlIgorLy8KKy8vIFRoZSBu
dW1iZXJzIGFyZSBkZWZpbmVkIHRoYXQgd2F5OgorLy8gLSB1bnNpZ25lZC1udW1iZXI6ICJhIHN0
cmluZyBvZiBkZWNpbWFsIGRpZ2l0cyB3aXRoIHVwIHRvIG9uZSBkZWNpbWFsIHBvaW50CisvLyAg
IChVKzAwMkUpLCByZXByZXNlbnRpbmcgYSBub24tbmVnYXRpdmUgdGVybWluYXRpbmcgZGVjaW1h
bCBudW1iZXIgKGEgdHlwZSBvZgorLy8gICByYXRpb25hbCBudW1iZXIpIgorLy8gLSBudW1iZXI6
ICJhbiBvcHRpb25hbCBwcmVmaXggb2YgJy0nIChVKzAwMkQpLCBmb2xsb3dlZCBieSBhbiB1bnNp
Z25lZAorLy8gICBudW1iZXIsIHJlcHJlc2VudGluZyBhIHRlcm1pbmF0aW5nIGRlY2ltYWwgbnVt
YmVyIChhIHR5cGUgb2YgcmF0aW9uYWwKKy8vICAgbnVtYmVyKSIKKy8vCitib29sIHBhcnNlTWF0
aE1MTGVuZ3RoKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBmbG9hdCYgbGVuZ3RoVmFsdWUsIGNvbnN0
IFJlbmRlclN0eWxlKiBzdHlsZSwgYm9vbCBhbGxvd05lZ2F0aXZlKQoreworICAgIFN0cmluZyBz
ID0gc3RyaW5nLnNpbXBsaWZ5V2hpdGVTcGFjZSgpOworCisgICAgaW50IHN0cmluZ0xlbmd0aCA9
IHMubGVuZ3RoKCk7CisgICAgaWYgKCFzdHJpbmdMZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmIChwYXJzZU5hbWVkU3BhY2UocywgbGVuZ3RoVmFsdWUsIHN0eWxlLCBhbGxv
d05lZ2F0aXZlKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBTdHJpbmdCdWlsZGVyIG51
bWJlcjsKKyAgICBTdHJpbmcgdW5pdDsKKworICAgIC8vIFRoaXMgdmVyaWZpZXMgd2hldGhlciB0
aGUgbmVnYXRpdmUgc2lnbiBpcyB0aGVyZS4KKyAgICBpbnQgaSA9IDA7CisgICAgVUNoYXIgYyA9
IHNbMF07CisgICAgaWYgKGMgPT0gJy0nKSB7CisgICAgICAgIG51bWJlci5hcHBlbmQoYyk7Cisg
ICAgICAgIGkrKzsKKyAgICB9CisKKyAgICAvLyBUaGlzIGdhdGhlcnMgdXAgY2hhcmFjdGVycyB0
aGF0IG1ha2UgdXAgdGhlIG51bWJlci4KKyAgICBib29sIGdvdERvdCA9IGZhbHNlOworICAgIGZv
ciAoIDsgaSA8IHN0cmluZ0xlbmd0aDsgaSsrKSB7CisgICAgICAgIGMgPSBzW2ldOworICAgICAg
ICAvLyBUaGUgc3RyaW5nIGlzIGludmFsaWQgaWYgaXQgY29udGFpbnMgdHdvIGRvdHMuCisgICAg
ICAgIGlmIChnb3REb3QgJiYgYyA9PSAnLicpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIGlmIChjID09ICcuJykKKyAgICAgICAgICAgIGdvdERvdCA9IHRydWU7CisgICAgICAg
IGVsc2UgaWYgKCFpc0FTQ0lJRGlnaXQoYykpIHsKKyAgICAgICAgICAgIHVuaXQgPSBzLnN1YnN0
cmluZyhpLCBzdHJpbmdMZW5ndGggLSBpKTsKKyAgICAgICAgICAgIC8vIFNvbWUgYXV0aG9ycyBs
ZWF2ZSBibGFua3MgYmVmb3JlIHRoZSB1bml0LCBidXQgdGhhdCBzaG91bGRuJ3QKKyAgICAgICAg
ICAgIC8vIGJlIGFsbG93ZWQsIHNvIGRvbid0IHNpbXBsaWZ5V2hpdGVzcGFjZSBvbiAndW5pdCcu
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBudW1iZXIuYXBwZW5kKGMp
OworICAgIH0KKworICAgIC8vIENvbnZlcnQgbnVtYmVyIHRvIGZsb2F0aW5nIHBvaW50CisgICAg
Ym9vbCBvazsKKyAgICBmbG9hdCBmbG9hdFZhbHVlID0gbnVtYmVyLnRvU3RyaW5nKCkudG9GbG9h
dCgmb2spOworICAgIGlmICghb2spCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoZmxv
YXRWYWx1ZSA8IDAgJiYgIWFsbG93TmVnYXRpdmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmICh1bml0LmlzRW1wdHkoKSkgeworICAgICAgICAvLyBubyBleHBsaWNpdCB1bml0LCB0
aGlzIGlzIGEgbnVtYmVyIHRoYXQgd2lsbCBhY3QgYXMgYSBtdWx0aXBsaWVyCisgICAgICAgIGxl
bmd0aFZhbHVlICo9IGZsb2F0VmFsdWU7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICBpZiAodW5pdCA9PSAiJSIpIHsKKyAgICAgICAgbGVuZ3RoVmFsdWUgKj0gZmxvYXRWYWx1ZSAv
IDEwMDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmICh1bml0ID09ICJlbSIp
IHsKKyAgICAgICAgbGVuZ3RoVmFsdWUgPSBmbG9hdFZhbHVlICogc3R5bGUtPmZvbnQoKS5zaXpl
KCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAodW5pdCA9PSAiZXgiKSB7
CisgICAgICAgIGxlbmd0aFZhbHVlID0gZmxvYXRWYWx1ZSAqIHN0eWxlLT5mb250TWV0cmljcygp
LnhIZWlnaHQoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmICh1bml0ID09
ICJweCIpIHsKKyAgICAgICAgbGVuZ3RoVmFsdWUgPSBmbG9hdFZhbHVlOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKHVuaXQgPT0gInB0IikgeworICAgICAgICBsZW5ndGhW
YWx1ZSA9IDQgLyAzICogZmxvYXRWYWx1ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIGlmICh1bml0ID09ICJwYyIpIHsKKyAgICAgICAgbGVuZ3RoVmFsdWUgPSAoNCAvIDMgKiBm
bG9hdFZhbHVlKSAqIDEyOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKHVu
aXQgPT0gImluIikgeworICAgICAgICBsZW5ndGhWYWx1ZSA9IDk2ICogZmxvYXRWYWx1ZTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmICh1bml0ID09ICJjbSIpIHsKKyAgICAg
ICAgbGVuZ3RoVmFsdWUgPSA5NiAqIGZsb2F0VmFsdWUgLyAyLjU0OworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgaWYgKHVuaXQgPT0gIm1tIikgeworICAgICAgICBsZW5ndGhWYWx1
ZSA9ICg5NiAqIGZsb2F0VmFsdWUgLyAyLjU0KSAvIDEwOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICAvLyB1bmV4cGVjdGVkIHVuaXQKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgcGFyc2VOYW1lZFNwYWNlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBmbG9hdCYgbGVuZ3Ro
VmFsdWUsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgYm9vbCBhbGxvd05lZ2F0aXZlKQorewor
ICAgIGZsb2F0IGxlbmd0aCA9IDA7CisgICAgLy8gU2VlIGlmIGl0IGlzIG9uZSBvZiB0aGUgbmFt
ZWRzcGFjZXMgKHJhbmdpbmcgLTcvMThlbSwgLTYvMTgsIC4uLiA3LzE4ZW0pCisgICAgaWYgKHN0
cmluZyA9PSAidmVyeXZlcnl0aGlubWF0aHNwYWNlIikKKyAgICAgICAgbGVuZ3RoID0gMTsKKyAg
ICBlbHNlIGlmIChzdHJpbmcgPT0gInZlcnl0aGlubWF0aHNwYWNlIikKKyAgICAgICAgbGVuZ3Ro
ID0gMjsKKyAgICBlbHNlIGlmIChzdHJpbmcgPT0gInRoaW5tYXRoc3BhY2UiKQorICAgICAgICBs
ZW5ndGggPSAzOworICAgIGVsc2UgaWYgKHN0cmluZyA9PSAibWVkaXVtbWF0aHNwYWNlIikKKyAg
ICAgICAgbGVuZ3RoID0gNDsKKyAgICBlbHNlIGlmIChzdHJpbmcgPT0gInRoaWNrbWF0aHNwYWNl
IikKKyAgICAgICAgbGVuZ3RoID0gNTsKKyAgICBlbHNlIGlmIChzdHJpbmcgPT0gInZlcnl0aGlj
a21hdGhzcGFjZSIpCisgICAgICAgIGxlbmd0aCA9IDY7CisgICAgZWxzZSBpZiAoc3RyaW5nID09
ICJ2ZXJ5dmVyeXRoaWNrbWF0aHNwYWNlIikKKyAgICAgICAgbGVuZ3RoID0gNzsKKyAgICBlbHNl
IGlmIChhbGxvd05lZ2F0aXZlKSB7CisgICAgICAgIGlmIChzdHJpbmcgPT0gIm5lZ2F0aXZldmVy
eXZlcnl0aGlubWF0aHNwYWNlIikKKyAgICAgICAgICAgIGxlbmd0aCA9IC0xOworICAgICAgICBl
bHNlIGlmIChzdHJpbmcgPT0gIm5lZ2F0aXZldmVyeXRoaW5tYXRoc3BhY2UiKQorICAgICAgICAg
ICAgbGVuZ3RoID0gLTI7CisgICAgICAgIGVsc2UgaWYgKHN0cmluZyA9PSAibmVnYXRpdmV0aGlu
bWF0aHNwYWNlIikKKyAgICAgICAgICAgIGxlbmd0aCA9IC0zOworICAgICAgICBlbHNlIGlmIChz
dHJpbmcgPT0gIm5lZ2F0aXZlbWVkaXVtbWF0aHNwYWNlIikKKyAgICAgICAgICAgIGxlbmd0aCA9
IC00OworICAgICAgICBlbHNlIGlmIChzdHJpbmcgPT0gIm5lZ2F0aXZldGhpY2ttYXRoc3BhY2Ui
KQorICAgICAgICAgICAgbGVuZ3RoID0gLTU7CisgICAgICAgIGVsc2UgaWYgKHN0cmluZyA9PSAi
bmVnYXRpdmV2ZXJ5dGhpY2ttYXRoc3BhY2UiKQorICAgICAgICAgICAgbGVuZ3RoID0gLTY7Cisg
ICAgICAgIGVsc2UgaWYgKHN0cmluZyA9PSAibmVnYXRpdmV2ZXJ5dmVyeXRoaWNrbWF0aHNwYWNl
IikKKyAgICAgICAgICAgIGxlbmd0aCA9IC03OyAgICAgICAgCisgICAgfQorICAgIGlmIChsZW5n
dGgpIHsKKyAgICAgICAgbGVuZ3RoVmFsdWUgPSBsZW5ndGggKiBzdHlsZS0+Zm9udCgpLnNpemUo
KSAvIDE4OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCiBpbnQgUmVuZGVyTWF0aE1MVGFibGU6OmZpcnN0TGluZUJveEJhc2VsaW5lKCkgY29uc3QK
IHsKICAgICAvLyBJbiBsZWdhbCBNYXRoTUwsIHdlJ2xsIGhhdmUgYSBNYXRoTUwgcGFyZW50LiBU
aGF0IFJlbmRlckZsZXhpYmxlQm94IHBhcmVudCB3aWxsIHVzZSBvdXIgZmlyc3RMaW5lQm94QmFz
ZWxpbmUoKSBmb3IgYmFzZWxpbmUgYWxpZ25tZW50LCBwZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suaAppbmRleCBjZDkzZjk5Li40
YTdkNmUwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5k
ZXJNYXRoTUxCbG9jay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVu
ZGVyTWF0aE1MQmxvY2suaApAQCAtMTI3LDYgKzEyNywyMyBAQCBwcml2YXRlOgogICAgIHZpcnR1
YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuICJSZW5k
ZXJNYXRoTUxUYWJsZSI7IH0KIH07CiAKKy8vIFBhcnNpbmcgZnVuY3Rpb25zIGZvciBNYXRoTUwg
TGVuZ3RoIHZhbHVlcworLy8KKy8vICAgLSBTdHJpbmcgcGFyYW1ldGVyOiB0aGUgc3RyaW5nIHRv
IHBhcnNlLgorLy8KKy8vICAgLSBmbG9hdCBwYXJhbWV0ZXI6IHRoaXMgdmFyaWFibGUgd2lsbCBi
ZSBzZXQgdG8gdGhlIGNvbXB1dGVkIGxlbmd0aC4KKy8vICAgICBQZXJjZW50IGFuZCB1bml0bGVz
cyBsZW5ndGhzIGFyZSBtdWx0aXBsZSBvZiB0aGUgZGVmYXVsdCB2YWx1ZSB0aGF0CisvLyAgICAg
c2hvdWxkIGJlIHNwZWNpZmllZCBhcyBpbnB1dC4gU2VlIHRoZSBNYXRoTUwgc3BlY2lmaWNhdGlv
bjoKKy8vICAgICBodHRwOi8vd3d3LnczLm9yZy9UUi9NYXRoTUwvY2hhcHRlcjIuaHRtbCNmdW5k
LnVuaXRzCisvLworLy8gICAtIFJlbmRlclN0eWxlOiB0aGUgc3R5bGUgb2YgdGhlIHJlbmRlcmVy
IGNsYXNzCisvLworLy8gICAtIGFsbG93TmVnYXRpdmU6IHdoZXRoZXIgbmVnYXRpdmUgbGVuZ3Ro
cyBhcmUgYWxsb3dlZC4KKy8vCisvLyAgIC0gcmV0dXJuZWQgdmFsdWU6IHdoZXRoZXIgdGhlIHBh
cnNpbmcgc3VjY2VlZGVkLgorLy8KK2Jvb2wgcGFyc2VNYXRoTUxMZW5ndGgoY29uc3QgU3RyaW5n
JiwgZmxvYXQmLCBjb25zdCBSZW5kZXJTdHlsZSosIGJvb2wgYWxsb3dOZWdhdGl2ZSA9IHRydWUp
OworYm9vbCBwYXJzZU5hbWVkU3BhY2UoY29uc3QgU3RyaW5nJiwgZmxvYXQmLCBjb25zdCBSZW5k
ZXJTdHlsZSosIGJvb2wgYWxsb3dOZWdhdGl2ZSA9IHRydWUpOwogfQogCiAjZW5kaWYgLy8gRU5B
QkxFKE1BVEhNTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwv
UmVuZGVyTWF0aE1MRnJhY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGht
bC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5jcHAKaW5kZXggNmYzYTM3ZS4uMzcxYWI1OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlv
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxG
cmFjdGlvbi5jcHAKQEAgLTc4LDEyICs3OCwxMSBAQCB2b2lkIFJlbmRlck1hdGhNTEZyYWN0aW9u
Ojp1cGRhdGVGcm9tRWxlbWVudCgpCiAgICAgICAgIG1fbGluZVRoaWNrbmVzcyA9IGdMaW5lTWVk
aXVtOwogICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHRoaWNrbmVzcywgInRoaWNrIikp
CiAgICAgICAgIG1fbGluZVRoaWNrbmVzcyA9IGdMaW5lVGhpY2s7Ci0gICAgZWxzZSB7Ci0gICAg
ICAgIGJvb2wgY29udmVydGVkID0gZmFsc2U7Ci0gICAgICAgIGludCB0aGlja25lc3NJbnRWYWx1
ZSA9IHRoaWNrbmVzcy50b0ludFN0cmljdCgmY29udmVydGVkKTsKLSAgICAgICAgaWYgKGNvbnZl
cnRlZCkKLSAgICAgICAgICAgIG1fbGluZVRoaWNrbmVzcyA9IHRoaWNrbmVzc0ludFZhbHVlOwot
ICAgIH0KKyAgICBlbHNlCisgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gcGFyc2VzIHRoZSB0aGlj
a25lc3MgYXR0cmlidXRlIHVzaW5nIGdMaW5lTWVkaXVtIGFzCisgICAgICAgIC8vIHRoZSBkZWZh
dWx0IHZhbHVlLiBJZiB0aGUgcGFyc2luZyBmYWlscywgbV9saW5lVGhpY2tuZXNzIHdpbGwgbm90
IGJlCisgICAgICAgIC8vIG1vZGlmaWVkIGkuZS4gdGhlIGRlZmF1bHQgdmFsdWUgd2lsbCBiZSB1
c2VkLgorICAgICAgICBwYXJzZU1hdGhNTExlbmd0aCh0aGlja25lc3MsIG1fbGluZVRoaWNrbmVz
cywgc3R5bGUoKSwgZmFsc2UpOwogCiAgICAgLy8gVXBkYXRlIHRoZSBzdHlsZSBmb3IgdGhlIHBh
ZGRpbmcgb2YgdGhlIGRlbm9taW5hdG9yIGZvciB0aGUgbGluZSB0aGlja25lc3MKICAgICBsYXN0
Q2hpbGQoKS0+c3R5bGUoKS0+c2V0UGFkZGluZ1RvcChMZW5ndGgoc3RhdGljX2Nhc3Q8aW50Piht
X2xpbmVUaGlja25lc3MpLCBGaXhlZCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>205626</attachid>
            <date>2013-06-27 13:25:11 -0700</date>
            <delta_ts>2013-06-30 23:37:27 -0700</delta_ts>
            <desc>Patch Final Version</desc>
            <filename>118053.diff</filename>
            <type>text/plain</type>
            <size>14570</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA5MzllNTJiLi5kZjk1Y2Q4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTMtMDYt
MjcgIEZyw6lkw6lyaWMgV2FuZyAgPGZyZWQud2FuZ0BmcmVlLmZyPgorCisgICAgICAgIEltcGxl
bWVudCBwYXJzaW5nIG9mIE1hdGhNTCBsZW5ndGhzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4MDUzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHNvbWUgcmVmdGVzdHMgZm9yIG1mcmFjQGxpbmV0
aGlja25lc3MuIEJldHRlciB0ZXN0cyBmb3IgdGhlIHBhcnNpbmcKKyAgICAgICAgb2YgTWF0aE1M
IGxlbmd0aHMgd2lsbCBiZSBwcm92aWRlZCB3aGVuIG1zcGFjZSBpcyBpbXBsZW1lbnRlZAorICAg
ICAgICAoYnVnIDExNTYxMCkKKworICAgICAgICAqIG1hdGhtbC9wcmVzZW50YXRpb24vbWZyYWMt
bGluZXRoaWNrbmVzczEtZXhwZWN0ZWQtbWlzbWF0Y2guaHRtbDogQWRkZWQuCisgICAgICAgICog
bWF0aG1sL3ByZXNlbnRhdGlvbi9tZnJhYy1saW5ldGhpY2tuZXNzMS5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBtYXRobWwvcHJlc2VudGF0aW9uL21mcmFjLWxpbmV0aGlja25lc3MyLWV4cGVjdGVk
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIG1hdGhtbC9wcmVzZW50YXRpb24vbWZyYWMtbGluZXRo
aWNrbmVzczIuaHRtbDogQWRkZWQuCisgICAgICAgICogbWF0aG1sL3ByZXNlbnRhdGlvbi9tZnJh
Yy1saW5ldGhpY2tuZXNzMy1leHBlY3RlZC1taXNtYXRjaC5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBtYXRobWwvcHJlc2VudGF0aW9uL21mcmFjLWxpbmV0aGlja25lc3MzLmh0bWw6IEFkZGVkLgor
CiAyMDEzLTA2LTI1ICBLcnp5c3p0b2YgQ3plY2ggIDxrLmN6ZWNoQHNhbXN1bmcuY29tPgogCiAg
ICAgICAgIFtBWF1bQVRLXSBVcGRhdGUgYWNjZXNzaWJpbGl0eSBiYXNlbGluZXMgYWZ0ZXIgcjE1
MTk1MwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvbWF0aG1sL3ByZXNlbnRhdGlvbi9tZnJhYy1s
aW5ldGhpY2tuZXNzMS1leHBlY3RlZC1taXNtYXRjaC5odG1sIGIvTGF5b3V0VGVzdHMvbWF0aG1s
L3ByZXNlbnRhdGlvbi9tZnJhYy1saW5ldGhpY2tuZXNzMS1leHBlY3RlZC1taXNtYXRjaC5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmM2M5NDQKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9tYXRobWwvcHJlc2VudGF0aW9uL21mcmFjLWxpbmV0aGlja25l
c3MxLWV4cGVjdGVkLW1pc21hdGNoLmh0bWwKQEAgLTAsMCArMSwxMSBAQAorPCFkb2N0eXBlIGh0
bWw+Cis8aHRtbD4KKyAgPGhlYWQ+CisgICAgPHRpdGxlPm1mcmFjIGxpbmV0aGlja25lc3M8L3Rp
dGxlPgorICA8L2hlYWQ+CisgIDxib2R5PgorCisgIDxkaXYgc3R5bGU9InBvc2l0aW9uOiBhYnNv
bHV0ZTsgdG9wOiAwOyBsZWZ0OiAwOyB3aWR0aDogNTAwcHg7IGhlaWdodDogMTUwcHg7IGJhY2tn
cm91bmQ6IGJsdWU7Ij48L2Rpdj4KKworICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9tYXRobWwvcHJlc2VudGF0aW9uL21mcmFjLWxpbmV0aGlja25lc3MxLmh0bWwg
Yi9MYXlvdXRUZXN0cy9tYXRobWwvcHJlc2VudGF0aW9uL21mcmFjLWxpbmV0aGlja25lc3MxLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM1OTFkYgotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL21hdGhtbC9wcmVzZW50YXRpb24vbWZyYWMtbGluZXRoaWNr
bmVzczEuaHRtbApAQCAtMCwwICsxLDIxIEBACis8IWRvY3R5cGUgaHRtbD4KKzxodG1sPgorICA8
aGVhZD4KKyAgICA8dGl0bGU+bWZyYWMgbGluZXRoaWNrbmVzczwvdGl0bGU+CisgIDwvaGVhZD4K
KyAgPGJvZHk+CisKKyAgPCEtLSBUaGlzIG1mcmFjIHNob3VsZCBiZSB0YWxsIGVub3VnaCwgb3Ig
aXQgd2lsbCBiZSBoaWRkZW4gYnkgdGhlIGJsdWUgcmVjdGFuZ2xlIC0tPgorICA8ZGl2IHN0eWxl
PSJwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMDsgbGVmdDogMDsiPgorICAgIDxtYXRoPgorICAg
ICAgPG1mcmFjIGxpbmV0aGlja25lc3M9IjIwMHB4Ij4KKyAgICAgICAgPG1pPng8L21pPgorICAg
ICAgICA8bWk+eTwvbWk+CisgICAgICA8L21mcmFjPgorICAgIDwvbWF0aD4KKyAgPC9kaXY+CisK
KyAgPGRpdiBzdHlsZT0icG9zaXRpb246IGFic29sdXRlOyB0b3A6IDA7IGxlZnQ6IDA7IHdpZHRo
OiA1MDBweDsgaGVpZ2h0OiAxNTBweDsgYmFja2dyb3VuZDogYmx1ZTsiPjwvZGl2PgorCisgIDwv
Ym9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL21hdGhtbC9wcmVzZW50YXRp
b24vbWZyYWMtbGluZXRoaWNrbmVzczItZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL21hdGht
bC9wcmVzZW50YXRpb24vbWZyYWMtbGluZXRoaWNrbmVzczItZXhwZWN0ZWQuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjY2ZDZmCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvbWF0aG1sL3ByZXNlbnRhdGlvbi9tZnJhYy1saW5ldGhpY2tuZXNzMi1leHBl
Y3RlZC5odG1sCkBAIC0wLDAgKzEsMzAgQEAKKzwhZG9jdHlwZSBodG1sPgorPGh0bWw+CisgIDxo
ZWFkPgorICAgIDx0aXRsZT5tZnJhYyBsaW5ldGhpY2tuZXNzPC90aXRsZT4KKyAgPC9oZWFkPgor
ICA8Ym9keT4KKworICA8bWF0aD4KKyAgICA8bWZyYWM+CisgICAgICA8bWk+eDwvbWk+CisgICAg
ICA8bWk+eTwvbWk+CisgICAgPC9tZnJhYz4KKyAgPC9tYXRoPgorCisgIDxtYXRoPgorICAgIDxt
ZnJhYyBsaW5ldGhpY2tuZXNzPSI1Ij4KKyAgICAgIDxtaT54PC9taT4KKyAgICAgIDxtaT55PC9t
aT4KKyAgICA8L21mcmFjPgorICA8L21hdGg+CisKKyAgPG1hdGg+CisgICAgPG1mcmFjIGxpbmV0
aGlja25lc3M9IjAuMzg4ODg4ODg5ZW0iPgorICAgICAgPG1pPng8L21pPgorICAgICAgPG1pPnk8
L21pPgorICAgIDwvbWZyYWM+CisgIDwvbWF0aD4KKworICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9tYXRobWwvcHJlc2VudGF0aW9uL21mcmFjLWxpbmV0aGlja25l
c3MyLmh0bWwgYi9MYXlvdXRUZXN0cy9tYXRobWwvcHJlc2VudGF0aW9uL21mcmFjLWxpbmV0aGlj
a25lc3MyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVlYTk3Ywot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL21hdGhtbC9wcmVzZW50YXRpb24vbWZyYWMt
bGluZXRoaWNrbmVzczIuaHRtbApAQCAtMCwwICsxLDMzIEBACis8IWRvY3R5cGUgaHRtbD4KKzxo
dG1sPgorICA8aGVhZD4KKyAgICA8dGl0bGU+bWZyYWMgbGluZXRoaWNrbmVzczwvdGl0bGU+Cisg
IDwvaGVhZD4KKyAgPGJvZHk+CisKKyAgPCEtLSBUaGUgbGluZXRoaWNrbmVzcyBzaG91bGQgYmUg
aWdub3JlZCAtLT4KKyAgPG1hdGg+CisgICAgPG1mcmFjIGxpbmV0aGlja25lc3M9Ii0xLjIzZW0i
PgorICAgICAgPG1pPng8L21pPgorICAgICAgPG1pPnk8L21pPgorICAgIDwvbWZyYWM+CisgIDwv
bWF0aD4KKworICA8IS0tIFRoZSBsaW5ldGhpY2tuZXNzIHNob3VsZCBiZSA1IHRpbWVzIHRoZSBk
ZWZhdWx0IHZhbHVlIC0tPgorICA8bWF0aD4KKyAgICA8bWZyYWMgbGluZXRoaWNrbmVzcz0iNTAw
JSI+CisgICAgICA8bWk+eDwvbWk+CisgICAgICA8bWk+eTwvbWk+CisgICAgPC9tZnJhYz4KKyAg
PC9tYXRoPgorCisgIDwhLS0gVGhlIGxpbmV0aGlja25lc3Mgc2hvdWxkIGJlIH43LzE4ZW0gLS0+
CisgIDxtYXRoPgorICAgIDxtZnJhYyBsaW5ldGhpY2tuZXNzPSJ2ZXJ5dmVyeXRoaWNrbWF0aHNw
YWNlIj4KKyAgICAgIDxtaT54PC9taT4KKyAgICAgIDxtaT55PC9taT4KKyAgICA8L21mcmFjPgor
ICA8L21hdGg+CisKKyAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
bWF0aG1sL3ByZXNlbnRhdGlvbi9tZnJhYy1saW5ldGhpY2tuZXNzMy1leHBlY3RlZC1taXNtYXRj
aC5odG1sIGIvTGF5b3V0VGVzdHMvbWF0aG1sL3ByZXNlbnRhdGlvbi9tZnJhYy1saW5ldGhpY2tu
ZXNzMy1leHBlY3RlZC1taXNtYXRjaC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmE5NjJkYTEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9tYXRobWwvcHJl
c2VudGF0aW9uL21mcmFjLWxpbmV0aGlja25lc3MzLWV4cGVjdGVkLW1pc21hdGNoLmh0bWwKQEAg
LTAsMCArMSwxNiBAQAorPCFkb2N0eXBlIGh0bWw+Cis8aHRtbD4KKyAgPGhlYWQ+CisgICAgPHRp
dGxlPm1mcmFjIGxpbmV0aGlja25lc3M8L3RpdGxlPgorICA8L2hlYWQ+CisgIDxib2R5PgorCisg
IDxtYXRoPgorICAgIDxtZnJhYz4KKyAgICAgIDxtaT54PC9taT4KKyAgICAgIDxtaT55PC9taT4K
KyAgICA8L21mcmFjPgorICA8L21hdGg+CisKKyAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvbWF0aG1sL3ByZXNlbnRhdGlvbi9tZnJhYy1saW5ldGhpY2tuZXNzMy5o
dG1sIGIvTGF5b3V0VGVzdHMvbWF0aG1sL3ByZXNlbnRhdGlvbi9tZnJhYy1saW5ldGhpY2tuZXNz
My5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiZjdmZTAKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9tYXRobWwvcHJlc2VudGF0aW9uL21mcmFjLWxpbmV0
aGlja25lc3MzLmh0bWwKQEAgLTAsMCArMSwxNyBAQAorPCFkb2N0eXBlIGh0bWw+Cis8aHRtbD4K
KyAgPGhlYWQ+CisgICAgPHRpdGxlPm1mcmFjIGxpbmV0aGlja25lc3M8L3RpdGxlPgorICA8L2hl
YWQ+CisgIDxib2R5PgorCisgIDwhLS0gVGhlIGZyYWN0aW9uIGJhciBzaG91bGQgbm90IGJlIHZp
c2libGUgLS0+CisgIDxtYXRoPgorICAgIDxtZnJhYyBsaW5ldGhpY2tuZXNzPSIwIj4KKyAgICAg
IDxtaT54PC9taT4KKyAgICAgIDxtaT55PC9taT4KKyAgICA8L21mcmFjPgorICA8L21hdGg+CisK
KyAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDNkZDQzYTQuLmU5NWVhY2EgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAxMy0wNi0yNyAgRnLDqWTDqXJpYyBXYW5nICA8ZnJl
ZC53YW5nQGZyZWUuZnI+CisKKyAgICAgICAgSW1wbGVtZW50IHBhcnNpbmcgb2YgTWF0aE1MIGxl
bmd0aHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MTgwNTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
IHBhcnNpbmcgZnVuY3Rpb24gZm9yIE1hdGhNTCBsZW5ndGhzLCBzaW1pbGFyIHRvIEdlY2tvJ3Mg
b25lLCBpcworICAgICAgICBpbXBsZW1lbnRlZC4gSXQgaXMgY3VycmVudGx5IG9ubHkgdXNlZCB0
byBwYXJzZSBtZnJhY0BsaW5ldGhpY2tuZXNzIGJ1dAorICAgICAgICB3aWxsIGJlIGNvbnZlbmll
bnQgdG8gcGFyc2Ugb3RoZXIgTWF0aE1MIGF0dHJpYnV0ZXMgaW4gdGhlIGZ1dHVyZS4KKworICAg
ICAgICBUZXN0czogbWF0aG1sL3ByZXNlbnRhdGlvbi9tZnJhYy1saW5ldGhpY2tuZXNzMS5odG1s
CisgICAgICAgICAgICAgICBtYXRobWwvcHJlc2VudGF0aW9uL21mcmFjLWxpbmV0aGlja25lc3My
Lmh0bWwKKyAgICAgICAgICAgICAgIG1hdGhtbC9wcmVzZW50YXRpb24vbWZyYWMtbGluZXRoaWNr
bmVzczMuaHRtbAorCisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9j
ay5jcHA6IGFkZCBwYXJzaW5nIGZ1bmN0aW9ucworICAgICAgICAoV2ViQ29yZTo6cGFyc2VNYXRo
TUxMZW5ndGgpOiBwYXJzaW5nIE1hdGhNTCBMZW5ndGggKG51bWJlciB1bml0KQorICAgICAgICAo
V2ViQ29yZTo6cGFyc2VOYW1lZFNwYWNlKTogcGFyc2luZyBNYXRoTUwgbmFtZWRzcGFjZXMKKyAg
ICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmg6IGRlY2xhcmUgcGFy
c2luZyBmdW5jdGlvbnMKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZy
YWN0aW9uLmNwcDogdXNlIHRoZSBwYXJzaW5nIGZ1bmN0aW9uIGZvciBsaW5ldGhpY2tuZXNzCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxGcmFjdGlvbjo6dXBkYXRlRnJvbUVsZW1lbnQp
OgorCiAyMDEzLTA2LTI2ICBLYW5naWwgSGFuICA8a2FuZ2lsLmhhbkBzYW1zdW5nLmNvbT4KIAog
ICAgICAgICBBZG9wdCBpcy90b0hUTUxBdWRpb0VsZW1lbnQgZm9yIGNvZGUgY2xlYW51cApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9j
ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2Nr
LmNwcAppbmRleCBlMTkxYTA4Li5kOTBlYThjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcApAQCAtMzMsNiArMzMsNyBA
QAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIk1hdGhNTE5hbWVzLmgi
CiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxk
ZXIuaD4KIAogI2lmIEVOQUJMRShERUJVR19NQVRIX0xBWU9VVCkKICNpbmNsdWRlICJQYWludElu
Zm8uaCIKQEAgLTE4Nyw2ICsxODgsMTc5IEBAIHZvaWQgUmVuZGVyTWF0aE1MQmxvY2s6OnBhaW50
KFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogfQogI2Vu
ZGlmIC8vIEVOQUJMRShERUJVR19NQVRIX0xBWU9VVCkKIAorLy8KKy8vIFRoZSBNYXRoTUwgc3Bl
Y2lmaWNhdGlvbiBzYXlzOgorLy8gKGh0dHA6Ly93d3cudzMub3JnL1RSL01hdGhNTC9jaGFwdGVy
Mi5odG1sI2Z1bmQudW5pdHMpCisvLworLy8gIk1vc3QgcHJlc2VudGF0aW9uIGVsZW1lbnRzIGhh
dmUgYXR0cmlidXRlcyB0aGF0IGFjY2VwdCB2YWx1ZXMgcmVwcmVzZW50aW5nCisvLyBsZW5ndGhz
IHRvIGJlIHVzZWQgZm9yIHNpemUsIHNwYWNpbmcgb3Igc2ltaWxhciBwcm9wZXJ0aWVzLiBUaGUg
c3ludGF4IG9mIGEKKy8vIGxlbmd0aCBpcyBzcGVjaWZpZWQgYXMKKy8vCisvLyBudW1iZXIgfCBu
dW1iZXIgdW5pdCB8IG5hbWVkc3BhY2UKKy8vCisvLyBUaGVyZSBzaG91bGQgYmUgbm8gc3BhY2Ug
YmV0d2VlbiB0aGUgbnVtYmVyIGFuZCB0aGUgdW5pdCBvZiBhIGxlbmd0aC4iCisvLyAKKy8vICJB
IHRyYWlsaW5nICclJyByZXByZXNlbnRzIGEgcGVyY2VudCBvZiB0aGUgZGVmYXVsdCB2YWx1ZS4g
VGhlIGRlZmF1bHQKKy8vIHZhbHVlLCBvciBob3cgaXQgaXMgb2J0YWluZWQsIGlzIGxpc3RlZCBp
biB0aGUgdGFibGUgb2YgYXR0cmlidXRlcyBmb3IgZWFjaAorLy8gZWxlbWVudC4gWy4uLl0gQSBu
dW1iZXIgd2l0aG91dCBhIHVuaXQgaXMgaW50ZXByZXRlZCBhcyBhIG11bHRpcGxlIG9mIHRoZQor
Ly8gZGVmYXVsdCB2YWx1ZS4iCisvLworLy8gIlRoZSBwb3NzaWJsZSB1bml0cyBpbiBNYXRoTUwg
YXJlOgorLy8gIAorLy8gVW5pdCBEZXNjcmlwdGlvbgorLy8gZW0gICBhbiBlbSAoZm9udC1yZWxh
dGl2ZSB1bml0IHRyYWRpdGlvbmFsbHkgdXNlZCBmb3IgaG9yaXpvbnRhbCBsZW5ndGhzKQorLy8g
ZXggICBhbiBleCAoZm9udC1yZWxhdGl2ZSB1bml0IHRyYWRpdGlvbmFsbHkgdXNlZCBmb3IgdmVy
dGljYWwgbGVuZ3RocykKKy8vIHB4ICAgcGl4ZWxzLCBvciBzaXplIG9mIGEgcGl4ZWwgaW4gdGhl
IGN1cnJlbnQgZGlzcGxheQorLy8gaW4gICBpbmNoZXMgKDEgaW5jaCA9IDIuNTQgY2VudGltZXRl
cnMpCisvLyBjbSAgIGNlbnRpbWV0ZXJzCisvLyBtbSAgIG1pbGxpbWV0ZXJzCisvLyBwdCAgIHBv
aW50cyAoMSBwb2ludCA9IDEvNzIgaW5jaCkKKy8vIHBjICAgcGljYXMgKDEgcGljYSA9IDEyIHBv
aW50cykKKy8vICUgICAgcGVyY2VudGFnZSBvZiBkZWZhdWx0IHZhbHVlIgorLy8KKy8vIFRoZSBu
dW1iZXJzIGFyZSBkZWZpbmVkIHRoYXQgd2F5OgorLy8gLSB1bnNpZ25lZC1udW1iZXI6ICJhIHN0
cmluZyBvZiBkZWNpbWFsIGRpZ2l0cyB3aXRoIHVwIHRvIG9uZSBkZWNpbWFsIHBvaW50CisvLyAg
IChVKzAwMkUpLCByZXByZXNlbnRpbmcgYSBub24tbmVnYXRpdmUgdGVybWluYXRpbmcgZGVjaW1h
bCBudW1iZXIgKGEgdHlwZSBvZgorLy8gICByYXRpb25hbCBudW1iZXIpIgorLy8gLSBudW1iZXI6
ICJhbiBvcHRpb25hbCBwcmVmaXggb2YgJy0nIChVKzAwMkQpLCBmb2xsb3dlZCBieSBhbiB1bnNp
Z25lZAorLy8gICBudW1iZXIsIHJlcHJlc2VudGluZyBhIHRlcm1pbmF0aW5nIGRlY2ltYWwgbnVt
YmVyIChhIHR5cGUgb2YgcmF0aW9uYWwKKy8vICAgbnVtYmVyKSIKKy8vCitib29sIHBhcnNlTWF0
aE1MTGVuZ3RoKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBmbG9hdCYgbGVuZ3RoVmFsdWUsIGNvbnN0
IFJlbmRlclN0eWxlKiBzdHlsZSwgYm9vbCBhbGxvd05lZ2F0aXZlKQoreworICAgIFN0cmluZyBz
ID0gc3RyaW5nLnNpbXBsaWZ5V2hpdGVTcGFjZSgpOworCisgICAgaW50IHN0cmluZ0xlbmd0aCA9
IHMubGVuZ3RoKCk7CisgICAgaWYgKCFzdHJpbmdMZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmIChwYXJzZU1hdGhNTE5hbWVkU3BhY2UocywgbGVuZ3RoVmFsdWUsIHN0eWxl
LCBhbGxvd05lZ2F0aXZlKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBTdHJpbmdCdWls
ZGVyIG51bWJlcjsKKyAgICBTdHJpbmcgdW5pdDsKKworICAgIC8vIFRoaXMgdmVyaWZpZXMgd2hl
dGhlciB0aGUgbmVnYXRpdmUgc2lnbiBpcyB0aGVyZS4KKyAgICBpbnQgaSA9IDA7CisgICAgVUNo
YXIgYyA9IHNbMF07CisgICAgaWYgKGMgPT0gJy0nKSB7CisgICAgICAgIG51bWJlci5hcHBlbmQo
Yyk7CisgICAgICAgIGkrKzsKKyAgICB9CisKKyAgICAvLyBUaGlzIGdhdGhlcnMgdXAgY2hhcmFj
dGVycyB0aGF0IG1ha2UgdXAgdGhlIG51bWJlci4KKyAgICBib29sIGdvdERvdCA9IGZhbHNlOwor
ICAgIGZvciAoIDsgaSA8IHN0cmluZ0xlbmd0aDsgaSsrKSB7CisgICAgICAgIGMgPSBzW2ldOwor
ICAgICAgICAvLyBUaGUgc3RyaW5nIGlzIGludmFsaWQgaWYgaXQgY29udGFpbnMgdHdvIGRvdHMu
CisgICAgICAgIGlmIChnb3REb3QgJiYgYyA9PSAnLicpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGlmIChjID09ICcuJykKKyAgICAgICAgICAgIGdvdERvdCA9IHRydWU7Cisg
ICAgICAgIGVsc2UgaWYgKCFpc0FTQ0lJRGlnaXQoYykpIHsKKyAgICAgICAgICAgIHVuaXQgPSBz
LnN1YnN0cmluZyhpLCBzdHJpbmdMZW5ndGggLSBpKTsKKyAgICAgICAgICAgIC8vIFNvbWUgYXV0
aG9ycyBsZWF2ZSBibGFua3MgYmVmb3JlIHRoZSB1bml0LCBidXQgdGhhdCBzaG91bGRuJ3QKKyAg
ICAgICAgICAgIC8vIGJlIGFsbG93ZWQsIHNvIGRvbid0IHNpbXBsaWZ5V2hpdGVzcGFjZSBvbiAn
dW5pdCcuCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBudW1iZXIuYXBw
ZW5kKGMpOworICAgIH0KKworICAgIC8vIENvbnZlcnQgbnVtYmVyIHRvIGZsb2F0aW5nIHBvaW50
CisgICAgYm9vbCBvazsKKyAgICBmbG9hdCBmbG9hdFZhbHVlID0gbnVtYmVyLnRvU3RyaW5nKCku
dG9GbG9hdCgmb2spOworICAgIGlmICghb2spCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoZmxvYXRWYWx1ZSA8IDAgJiYgIWFsbG93TmVnYXRpdmUpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmICh1bml0LmlzRW1wdHkoKSkgeworICAgICAgICAvLyBubyBleHBsaWNpdCB1
bml0LCB0aGlzIGlzIGEgbnVtYmVyIHRoYXQgd2lsbCBhY3QgYXMgYSBtdWx0aXBsaWVyCisgICAg
ICAgIGxlbmd0aFZhbHVlICo9IGZsb2F0VmFsdWU7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICBpZiAodW5pdCA9PSAiJSIpIHsKKyAgICAgICAgbGVuZ3RoVmFsdWUgKj0gZmxvYXRW
YWx1ZSAvIDEwMDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmICh1bml0ID09
ICJlbSIpIHsKKyAgICAgICAgbGVuZ3RoVmFsdWUgPSBmbG9hdFZhbHVlICogc3R5bGUtPmZvbnQo
KS5zaXplKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAodW5pdCA9PSAi
ZXgiKSB7CisgICAgICAgIGxlbmd0aFZhbHVlID0gZmxvYXRWYWx1ZSAqIHN0eWxlLT5mb250TWV0
cmljcygpLnhIZWlnaHQoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmICh1
bml0ID09ICJweCIpIHsKKyAgICAgICAgbGVuZ3RoVmFsdWUgPSBmbG9hdFZhbHVlOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKHVuaXQgPT0gInB0IikgeworICAgICAgICBs
ZW5ndGhWYWx1ZSA9IDQgLyAzICogZmxvYXRWYWx1ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIGlmICh1bml0ID09ICJwYyIpIHsKKyAgICAgICAgbGVuZ3RoVmFsdWUgPSAoNCAv
IDMgKiBmbG9hdFZhbHVlKSAqIDEyOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
aWYgKHVuaXQgPT0gImluIikgeworICAgICAgICBsZW5ndGhWYWx1ZSA9IDk2ICogZmxvYXRWYWx1
ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmICh1bml0ID09ICJjbSIpIHsK
KyAgICAgICAgbGVuZ3RoVmFsdWUgPSA5NiAqIGZsb2F0VmFsdWUgLyAyLjU0OworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKHVuaXQgPT0gIm1tIikgeworICAgICAgICBsZW5n
dGhWYWx1ZSA9ICg5NiAqIGZsb2F0VmFsdWUgLyAyLjU0KSAvIDEwOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICAvLyB1bmV4cGVjdGVkIHVuaXQKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgcGFyc2VNYXRoTUxOYW1lZFNwYWNlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBm
bG9hdCYgbGVuZ3RoVmFsdWUsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgYm9vbCBhbGxvd05l
Z2F0aXZlKQoreworICAgIGZsb2F0IGxlbmd0aCA9IDA7CisgICAgLy8gU2VlIGlmIGl0IGlzIG9u
ZSBvZiB0aGUgbmFtZWRzcGFjZXMgKHJhbmdpbmcgLTcvMThlbSwgLTYvMTgsIC4uLiA3LzE4ZW0p
CisgICAgaWYgKHN0cmluZyA9PSAidmVyeXZlcnl0aGlubWF0aHNwYWNlIikKKyAgICAgICAgbGVu
Z3RoID0gMTsKKyAgICBlbHNlIGlmIChzdHJpbmcgPT0gInZlcnl0aGlubWF0aHNwYWNlIikKKyAg
ICAgICAgbGVuZ3RoID0gMjsKKyAgICBlbHNlIGlmIChzdHJpbmcgPT0gInRoaW5tYXRoc3BhY2Ui
KQorICAgICAgICBsZW5ndGggPSAzOworICAgIGVsc2UgaWYgKHN0cmluZyA9PSAibWVkaXVtbWF0
aHNwYWNlIikKKyAgICAgICAgbGVuZ3RoID0gNDsKKyAgICBlbHNlIGlmIChzdHJpbmcgPT0gInRo
aWNrbWF0aHNwYWNlIikKKyAgICAgICAgbGVuZ3RoID0gNTsKKyAgICBlbHNlIGlmIChzdHJpbmcg
PT0gInZlcnl0aGlja21hdGhzcGFjZSIpCisgICAgICAgIGxlbmd0aCA9IDY7CisgICAgZWxzZSBp
ZiAoc3RyaW5nID09ICJ2ZXJ5dmVyeXRoaWNrbWF0aHNwYWNlIikKKyAgICAgICAgbGVuZ3RoID0g
NzsKKyAgICBlbHNlIGlmIChhbGxvd05lZ2F0aXZlKSB7CisgICAgICAgIGlmIChzdHJpbmcgPT0g
Im5lZ2F0aXZldmVyeXZlcnl0aGlubWF0aHNwYWNlIikKKyAgICAgICAgICAgIGxlbmd0aCA9IC0x
OworICAgICAgICBlbHNlIGlmIChzdHJpbmcgPT0gIm5lZ2F0aXZldmVyeXRoaW5tYXRoc3BhY2Ui
KQorICAgICAgICAgICAgbGVuZ3RoID0gLTI7CisgICAgICAgIGVsc2UgaWYgKHN0cmluZyA9PSAi
bmVnYXRpdmV0aGlubWF0aHNwYWNlIikKKyAgICAgICAgICAgIGxlbmd0aCA9IC0zOworICAgICAg
ICBlbHNlIGlmIChzdHJpbmcgPT0gIm5lZ2F0aXZlbWVkaXVtbWF0aHNwYWNlIikKKyAgICAgICAg
ICAgIGxlbmd0aCA9IC00OworICAgICAgICBlbHNlIGlmIChzdHJpbmcgPT0gIm5lZ2F0aXZldGhp
Y2ttYXRoc3BhY2UiKQorICAgICAgICAgICAgbGVuZ3RoID0gLTU7CisgICAgICAgIGVsc2UgaWYg
KHN0cmluZyA9PSAibmVnYXRpdmV2ZXJ5dGhpY2ttYXRoc3BhY2UiKQorICAgICAgICAgICAgbGVu
Z3RoID0gLTY7CisgICAgICAgIGVsc2UgaWYgKHN0cmluZyA9PSAibmVnYXRpdmV2ZXJ5dmVyeXRo
aWNrbWF0aHNwYWNlIikKKyAgICAgICAgICAgIGxlbmd0aCA9IC03OyAgICAgICAgCisgICAgfQor
ICAgIGlmIChsZW5ndGgpIHsKKyAgICAgICAgbGVuZ3RoVmFsdWUgPSBsZW5ndGggKiBzdHlsZS0+
Zm9udCgpLnNpemUoKSAvIDE4OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0
dXJuIGZhbHNlOworfQorCiBpbnQgUmVuZGVyTWF0aE1MVGFibGU6OmZpcnN0TGluZUJveEJhc2Vs
aW5lKCkgY29uc3QKIHsKICAgICAvLyBJbiBsZWdhbCBNYXRoTUwsIHdlJ2xsIGhhdmUgYSBNYXRo
TUwgcGFyZW50LiBUaGF0IFJlbmRlckZsZXhpYmxlQm94IHBhcmVudCB3aWxsIHVzZSBvdXIgZmly
c3RMaW5lQm94QmFzZWxpbmUoKSBmb3IgYmFzZWxpbmUgYWxpZ25tZW50LCBwZXIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suaAppbmRl
eCBjZDkzZjk5Li40ZWVlZmYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
bWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5oCkBAIC0xMjcsNiArMTI3LDkgQEAgcHJpdmF0ZToK
ICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCBPVkVSUklERSB7IHJl
dHVybiAiUmVuZGVyTWF0aE1MVGFibGUiOyB9CiB9OwogCisvLyBQYXJzaW5nIGZ1bmN0aW9ucyBm
b3IgTWF0aE1MIExlbmd0aCB2YWx1ZXMKK2Jvb2wgcGFyc2VNYXRoTUxMZW5ndGgoY29uc3QgU3Ry
aW5nJiwgZmxvYXQmLCBjb25zdCBSZW5kZXJTdHlsZSosIGJvb2wgYWxsb3dOZWdhdGl2ZSA9IHRy
dWUpOworYm9vbCBwYXJzZU1hdGhNTE5hbWVkU3BhY2UoY29uc3QgU3RyaW5nJiwgZmxvYXQmLCBj
b25zdCBSZW5kZXJTdHlsZSosIGJvb2wgYWxsb3dOZWdhdGl2ZSA9IHRydWUpOwogfQogCiAjZW5k
aWYgLy8gRU5BQkxFKE1BVEhNTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9tYXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5jcHAKaW5kZXggNmYzYTM3ZS4uMzcxYWI1
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRo
TUxGcmFjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5k
ZXJNYXRoTUxGcmFjdGlvbi5jcHAKQEAgLTc4LDEyICs3OCwxMSBAQCB2b2lkIFJlbmRlck1hdGhN
TEZyYWN0aW9uOjp1cGRhdGVGcm9tRWxlbWVudCgpCiAgICAgICAgIG1fbGluZVRoaWNrbmVzcyA9
IGdMaW5lTWVkaXVtOwogICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHRoaWNrbmVzcywg
InRoaWNrIikpCiAgICAgICAgIG1fbGluZVRoaWNrbmVzcyA9IGdMaW5lVGhpY2s7Ci0gICAgZWxz
ZSB7Ci0gICAgICAgIGJvb2wgY29udmVydGVkID0gZmFsc2U7Ci0gICAgICAgIGludCB0aGlja25l
c3NJbnRWYWx1ZSA9IHRoaWNrbmVzcy50b0ludFN0cmljdCgmY29udmVydGVkKTsKLSAgICAgICAg
aWYgKGNvbnZlcnRlZCkKLSAgICAgICAgICAgIG1fbGluZVRoaWNrbmVzcyA9IHRoaWNrbmVzc0lu
dFZhbHVlOwotICAgIH0KKyAgICBlbHNlCisgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gcGFyc2Vz
IHRoZSB0aGlja25lc3MgYXR0cmlidXRlIHVzaW5nIGdMaW5lTWVkaXVtIGFzCisgICAgICAgIC8v
IHRoZSBkZWZhdWx0IHZhbHVlLiBJZiB0aGUgcGFyc2luZyBmYWlscywgbV9saW5lVGhpY2tuZXNz
IHdpbGwgbm90IGJlCisgICAgICAgIC8vIG1vZGlmaWVkIGkuZS4gdGhlIGRlZmF1bHQgdmFsdWUg
d2lsbCBiZSB1c2VkLgorICAgICAgICBwYXJzZU1hdGhNTExlbmd0aCh0aGlja25lc3MsIG1fbGlu
ZVRoaWNrbmVzcywgc3R5bGUoKSwgZmFsc2UpOwogCiAgICAgLy8gVXBkYXRlIHRoZSBzdHlsZSBm
b3IgdGhlIHBhZGRpbmcgb2YgdGhlIGRlbm9taW5hdG9yIGZvciB0aGUgbGluZSB0aGlja25lc3MK
ICAgICBsYXN0Q2hpbGQoKS0+c3R5bGUoKS0+c2V0UGFkZGluZ1RvcChMZW5ndGgoc3RhdGljX2Nh
c3Q8aW50PihtX2xpbmVUaGlja25lc3MpLCBGaXhlZCkpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>