<?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>160547</bug_id>
          
          <creation_ts>2016-08-04 06:05:28 -0700</creation_ts>
          <short_desc>Overflow of formulas is hidden for display mathematics</short_desc>
          <delta_ts>2018-01-28 22:38:02 -0800</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>WebKit 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>InRadar, Regression</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>180348</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Frédéric Wang Nélar">fred.wang</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>alex</cc>
    
    <cc>commit-queue</cc>
    
    <cc>distler</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jfernandez</cc>
    
    <cc>lambda</cc>
    
    <cc>rego</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1217372</commentid>
    <comment_count>0</comment_count>
      <attachid>285314</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-08-04 06:05:28 -0700</bug_when>
    <thetext>Created attachment 285314
Testcase

Jacques Distler reported the following issue: &apos;The &quot;big fraction&quot; of https://golem.ph.utexas.edu/wiki/instiki/show/Sandbox is summarily truncated&apos;.

It seems that the overflow is hidden for MathML formula in display=&quot;block&quot;: no scroll bars appear which may explain that the formula looks &quot;truncated&quot;. See the attached testcase comparing a simple formula in display and inline style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217373</commentid>
    <comment_count>1</comment_count>
      <attachid>285315</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-08-04 06:11:35 -0700</bug_when>
    <thetext>Created attachment 285315
Testcase

A better test case using a horizontal gradient from red to green. You should be able to scroll to the green part but that does not seem possible in nightly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217407</commentid>
    <comment_count>2</comment_count>
      <attachid>285326</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-08-04 08:11:42 -0700</bug_when>
    <thetext>Created attachment 285326
Experimental Patch

Some first thoughts: In general, because the preferred width of operators is overestimated (see https://bug-130326-attachments.webkit.org/attachment.cgi?id=283599). Hence all the MathML layoutBlock functions must set the correct logical width rather than relying on the preferred width. Then the RenderBox code use this logical width rather than filling the all available width.

There is an exception for &lt;math display=&quot;block&quot;&gt;: this must be rendered as a formula centered in the available space. Hence RenderMathMLRow::layoutBlock does not set the its logicalWidth to the width of the math content so that the centering done is this function is correct (http://tests.mathml-association.org/mathml/relations/html5-tree/display-1.html). I guess something in RenderBox also make it also occupy the whole available width. But when the available width is less than the width of the math content, the &lt;math&gt; tag is too narrow.

I&apos;m attaching a hack that just injects the preferredLogicalWidth to force a minimal width but the ideal would be for RenderMathMLRow to expose the width of the math content and let RenderBox calculate the logical width by taking the maximum of the available width and of the width of the math content. Maybe rego or jfernandez have suggestions about how to do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1383642</commentid>
    <comment_count>3</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2017-12-20 08:25:04 -0800</bug_when>
    <thetext>(In reply to Frédéric Wang (:fredw) [back 03/01/2018] from comment #2)
&gt; I&apos;m attaching a hack that just injects the preferredLogicalWidth to force a
&gt; minimal width but the ideal would be for RenderMathMLRow to expose the width
&gt; of the math content and let RenderBox calculate the logical width by taking
&gt; the maximum of the available width and of the width of the math content.
&gt; Maybe rego or jfernandez have suggestions about how to do that.

After bug 180348, I think it will be easier to get the actual width of the content of the &lt;math display=&quot;block&quot;&gt; element using the new RenderMathMLRow::getContentBoundingBox function. This should give better result than using the preferred width or the logical width.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393881</commentid>
    <comment_count>4</comment_count>
      <attachid>332481</attachid>
    <who name="Minsheng Liu">lambda</who>
    <bug_when>2018-01-27 12:54:38 -0800</bug_when>
    <thetext>Created attachment 332481
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393882</commentid>
    <comment_count>5</comment_count>
    <who name="Minsheng Liu">lambda</who>
    <bug_when>2018-01-27 12:55:16 -0800</bug_when>
    <thetext>Oops, it should be &quot;review?&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393883</commentid>
    <comment_count>6</comment_count>
    <who name="Minsheng Liu">lambda</who>
    <bug_when>2018-01-27 12:58:27 -0800</bug_when>
    <thetext>I would like to close this before move layout code for &lt;math&gt; to RenderMathMLMath itself. As a result, this patch becomes surprisingly simple.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393907</commentid>
    <comment_count>7</comment_count>
      <attachid>332481</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2018-01-28 02:53:08 -0800</bug_when>
    <thetext>Comment on attachment 332481
patch

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

&gt; LayoutTests/mathml/presentation/display-math-horizontal-overflow.html:14
&gt; +        assert_equals(inline.clientWidth, block.clientWidth);

I think this test is a bit weak (it assumes inline math already have the correct width). I would instead try the 4 combinations between inline/block math and 100px/200px mspace content and check that the math has the expected width: 100px (for inline/100px), 200px (for block/100px) or 400px (for inline/400px and block/400px). You could even test centering inside the 200px container in the case block/100px, by checking the position of the mspace.

&gt; Source/WebCore/ChangeLog:8
&gt; +        Previously, &lt;math&gt; with display=&quot;block&quot; uses its preferred width as logical width.

Is that true? I don&apos;t remember but I believe it takes the *container* width at the end? I think at some point it would be nice to check what RenderBox is doing and whether we can better handle MathML (what I had tried with the experimental patch). But I guess that would be more complex and I&apos;m not sure I can review the RenderBox code.

&gt; Source/WebCore/rendering/mathml/RenderMathMLRow.cpp:185
&gt; +        if (width &gt; logicalWidth())

I would do

if (width &lt; logicalWidth) {
  // DO THE CENTERING
} else
   setLogicalWidth(width);

I think we can then just do centerBlockOffset = (logicalWidth() - width) / 2;

We also need to update the comment to explain the two cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393915</commentid>
    <comment_count>8</comment_count>
    <who name="Minsheng Liu">lambda</who>
    <bug_when>2018-01-28 09:57:00 -0800</bug_when>
    <thetext>(In reply to Frédéric Wang (:fredw) from comment #7)
&gt; Comment on attachment 332481 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=332481&amp;action=review
&gt; 
&gt; &gt; LayoutTests/mathml/presentation/display-math-horizontal-overflow.html:14
&gt; &gt; +        assert_equals(inline.clientWidth, block.clientWidth);
&gt; 
&gt; I think this test is a bit weak (it assumes inline math already have the
&gt; correct width). I would instead try the 4 combinations between inline/block
&gt; math and 100px/200px mspace content and check that the math has the expected
&gt; width: 100px (for inline/100px), 200px (for block/100px) or 400px (for
&gt; inline/400px and block/400px). You could even test centering inside the
&gt; 200px container in the case block/100px, by checking the position of the
&gt; mspace.

I will do two tests, one for width when overflowed, and one for centering.

&gt; 
&gt; &gt; Source/WebCore/ChangeLog:8
&gt; &gt; +        Previously, &lt;math&gt; with display=&quot;block&quot; uses its preferred width as logical width.
&gt; 
&gt; Is that true? I don&apos;t remember but I believe it takes the *container* width
&gt; at the end? I think at some point it would be nice to check what RenderBox
&gt; is doing and whether we can better handle MathML (what I had tried with the
&gt; experimental patch). But I guess that would be more complex and I&apos;m not sure
&gt; I can review the RenderBox code.

Oops! I got the concept wrong. I thought preferred width is just the container’s width. So, may I ask what is preferred width and when is used?

&gt; 
&gt; &gt; Source/WebCore/rendering/mathml/RenderMathMLRow.cpp:185
&gt; &gt; +        if (width &gt; logicalWidth())
&gt; 
&gt; I would do
&gt; 
&gt; if (width &lt; logicalWidth) {
&gt;   // DO THE CENTERING
&gt; } else
&gt;    setLogicalWidth(width);
&gt; 
&gt; I think we can then just do centerBlockOffset = (logicalWidth() - width) / 2;
&gt; 
&gt; We also need to update the comment to explain the two cases.

I think it is complicated that it is worthy having a layoutBlock() in RenderMathMLMath.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393918</commentid>
    <comment_count>9</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2018-01-28 10:27:00 -0800</bug_when>
    <thetext>(In reply to Minsheng Liu from comment #8)
&gt; (In reply to Frédéric Wang (:fredw) from comment #7)
&gt; &gt; Comment on attachment 332481 [details]
&gt; &gt; patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=332481&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; LayoutTests/mathml/presentation/display-math-horizontal-overflow.html:14
&gt; &gt; &gt; +        assert_equals(inline.clientWidth, block.clientWidth);
&gt; &gt; 
&gt; &gt; I think this test is a bit weak (it assumes inline math already have the
&gt; &gt; correct width). I would instead try the 4 combinations between inline/block
&gt; &gt; math and 100px/200px mspace content and check that the math has the expected
&gt; &gt; width: 100px (for inline/100px), 200px (for block/100px) or 400px (for
&gt; &gt; inline/400px and block/400px). You could even test centering inside the
&gt; &gt; 200px container in the case block/100px, by checking the position of the
&gt; &gt; mspace.
&gt; 
&gt; I will do two tests, one for width when overflowed, and one for centering.

Note that I actually meant testing the situation of a mspace of width 100px &lt; 200px = container width and of width 400px &gt; 200px = container width (you are only testing the latter). Also, there is already a reftest LayoutTests/mathml/presentation/attributes-display.html for centering, but it&apos;s good to test it using javascript too. 

I think it would be nicer if you could do all the metrics checks in one test because WPT tests are currently slow and some WebKit people complain about having too many tests.

&gt; &gt; &gt; Source/WebCore/ChangeLog:8
&gt; &gt; &gt; +        Previously, &lt;math&gt; with display=&quot;block&quot; uses its preferred width as logical width.
&gt; &gt; 
&gt; &gt; Is that true? I don&apos;t remember but I believe it takes the *container* width
&gt; &gt; at the end? I think at some point it would be nice to check what RenderBox
&gt; &gt; is doing and whether we can better handle MathML (what I had tried with the
&gt; &gt; experimental patch). But I guess that would be more complex and I&apos;m not sure
&gt; &gt; I can review the RenderBox code.
&gt; 
&gt; Oops! I got the concept wrong. I thought preferred width is just the
&gt; container’s width. So, may I ask what is preferred width and when is used?

The min/max widths that would take the renderer if linebreaking happens or not. It is calculated before the layout in order to implement linebreaking (see computePreferredLogicalWidths functions). WebKit does not implement MathML linebreaking yet, so min preferred width == max preferred width is essentially the same as the logical width after layout modulo the approximations caused by stretchy operators (for which we only know the final width only after layout).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393929</commentid>
    <comment_count>10</comment_count>
      <attachid>332493</attachid>
    <who name="Minsheng Liu">lambda</who>
    <bug_when>2018-01-28 12:34:04 -0800</bug_when>
    <thetext>Created attachment 332493
patch

Note that I use &quot;overflow: auto&quot; rather than &quot;scroll&quot;. The latter will bring up the scroll bar unnecessarily in some situations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393934</commentid>
    <comment_count>11</comment_count>
      <attachid>332493</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2018-01-28 13:35:46 -0800</bug_when>
    <thetext>Comment on attachment 332493
patch

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

LGTM, but please be sure to address the review comments. Thanks!

&gt; LayoutTests/mathml/presentation/math-inline-display-width.html:25
&gt; +        }, &quot;dnline math, 100px content, 200px container&quot;);

s/dnline/display/

&gt; LayoutTests/mathml/presentation/math-inline-display-width.html:43
&gt; +        overflow: auto;

maybe you want &quot;overflow: hidden&quot; so that you don&apos;t have any potential problem with scroll bars.

&gt; LayoutTests/mathml/presentation/math-inline-display-width.html:45
&gt; +        line-height: 0;

why this line-height property?

&gt; LayoutTests/mathml/presentation/math-inline-display-width.html:49
&gt; +  &lt;body onload=&quot;setTimeout(run, 2000)&quot;&gt;

why do you need this 2 seconds delay?

&gt; Source/WebCore/rendering/mathml/RenderMathMLMath.cpp:48
&gt; +    LayoutUnit centerBlockOffset = std::max&lt;LayoutUnit&gt;(0, logicalWidth() - contentWidth) / 2;

As I said in previous review, I think this can just be centerBlockOffset = (logicalWidth() - contentWidth) / 2; since contentWidth &lt; logicalWidth().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393936</commentid>
    <comment_count>12</comment_count>
      <attachid>332496</attachid>
    <who name="Minsheng Liu">lambda</who>
    <bug_when>2018-01-28 14:50:49 -0800</bug_when>
    <thetext>Created attachment 332496
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393937</commentid>
    <comment_count>13</comment_count>
    <who name="Minsheng Liu">lambda</who>
    <bug_when>2018-01-28 14:53:39 -0800</bug_when>
    <thetext>All resolved. line-height is set because inline math with line height = 1 will make div to have an extra 4px vertically. I have added a comment for that. 2 seconds delay is a leftover during my debug process and has been removed.

(In reply to Frédéric Wang (:fredw) from comment #11)
&gt; Comment on attachment 332493 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=332493&amp;action=review
&gt; 
&gt; LGTM, but please be sure to address the review comments. Thanks!
&gt; 
&gt; &gt; LayoutTests/mathml/presentation/math-inline-display-width.html:25
&gt; &gt; +        }, &quot;dnline math, 100px content, 200px container&quot;);
&gt; 
&gt; s/dnline/display/
&gt; 
&gt; &gt; LayoutTests/mathml/presentation/math-inline-display-width.html:43
&gt; &gt; +        overflow: auto;
&gt; 
&gt; maybe you want &quot;overflow: hidden&quot; so that you don&apos;t have any potential
&gt; problem with scroll bars.
&gt; 
&gt; &gt; LayoutTests/mathml/presentation/math-inline-display-width.html:45
&gt; &gt; +        line-height: 0;
&gt; 
&gt; why this line-height property?
&gt; 
&gt; &gt; LayoutTests/mathml/presentation/math-inline-display-width.html:49
&gt; &gt; +  &lt;body onload=&quot;setTimeout(run, 2000)&quot;&gt;
&gt; 
&gt; why do you need this 2 seconds delay?
&gt; 
&gt; &gt; Source/WebCore/rendering/mathml/RenderMathMLMath.cpp:48
&gt; &gt; +    LayoutUnit centerBlockOffset = std::max&lt;LayoutUnit&gt;(0, logicalWidth() - contentWidth) / 2;
&gt; 
&gt; As I said in previous review, I think this can just be centerBlockOffset =
&gt; (logicalWidth() - contentWidth) / 2; since contentWidth &lt; logicalWidth().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393938</commentid>
    <comment_count>14</comment_count>
      <attachid>332496</attachid>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-01-28 14:54:03 -0800</bug_when>
    <thetext>Comment on attachment 332496
patch

Rejecting attachment 332496 from commit-queue.

lambda@liu.ms does not have committer permissions according to https://trac.webkit.org/browser/trunk/Tools/Scripts/webkitpy/common/config/contributors.json.

- If you do not have committer rights please read http://webkit.org/coding/contributing.html for instructions on how to use bugzilla flags.

- If you have committer rights please correct the error in Tools/Scripts/webkitpy/common/config/contributors.json by adding yourself to the file (no review needed).  The commit-queue restarts itself every 2 hours.  After restart the commit-queue will correctly respect your committer rights.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393939</commentid>
    <comment_count>15</comment_count>
    <who name="Minsheng Liu">lambda</who>
    <bug_when>2018-01-28 14:55:13 -0800</bug_when>
    <thetext>Guess I need another review+ flag…

(In reply to Build Bot from comment #14)
&gt; Comment on attachment 332496 [details]
&gt; patch
&gt; 
&gt; Rejecting attachment 332496 [details] from commit-queue.
&gt; 
&gt; lambda@liu.ms does not have committer permissions according to
&gt; https://trac.webkit.org/browser/trunk/Tools/Scripts/webkitpy/common/config/
&gt; contributors.json.
&gt; 
&gt; - If you do not have committer rights please read
&gt; http://webkit.org/coding/contributing.html for instructions on how to use
&gt; bugzilla flags.
&gt; 
&gt; - If you have committer rights please correct the error in
&gt; Tools/Scripts/webkitpy/common/config/contributors.json by adding yourself to
&gt; the file (no review needed).  The commit-queue restarts itself every 2
&gt; hours.  After restart the commit-queue will correctly respect your committer
&gt; rights.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393978</commentid>
    <comment_count>16</comment_count>
      <attachid>332496</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-01-28 22:36:01 -0800</bug_when>
    <thetext>Comment on attachment 332496
patch

Clearing flags on attachment: 332496

Committed r227722: &lt;https://trac.webkit.org/changeset/227722&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393979</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-01-28 22:36:03 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393980</commentid>
    <comment_count>18</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-01-28 22:38:02 -0800</bug_when>
    <thetext>&lt;rdar://problem/36974748&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>285314</attachid>
            <date>2016-08-04 06:05:28 -0700</date>
            <delta_ts>2016-08-04 06:11:35 -0700</delta_ts>
            <desc>Testcase</desc>
            <filename>mathml-overflow.html</filename>
            <type>text/html</type>
            <size>596</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPk1hdGhNTCBPdmVyZmxv
dzwvdGl0bGU+CiAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCIvPgogIDwvaGVhZD4KICA8Ym9keT4K
CiAgICA8cD5PdmVyZmxvdyB3aXRoIGlubGluZSBtYXRoOgogICAgPGRpdiBzdHlsZT0id2lkdGg6
IDIwMHB4OyBvdmVyZmxvdzogc2Nyb2xsOyI+CiAgICAgIDxtYXRoIHhtbG5zPSJodHRwOi8vd3d3
LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIj48bXNwYWNlIHdpZHRoPSI0MDBweCIgaGVpZ2h0PSI1
MHB4IiBtYXRoYmFja2dyb3VuZD0iZ3JlZW4iLz48L21hdGg+CiAgICA8L2Rpdj48L3A+CgogICAg
PHA+T3ZlcmZsb3cgd2l0aCBkaXNwbGF5IG1hdGg6CiAgICA8ZGl2IHN0eWxlPSJ3aWR0aDogMjAw
cHg7IG92ZXJmbG93OiBzY3JvbGw7Ij4KICAgICAgPG1hdGggZGlzcGxheT0iYmxvY2siIHhtbG5z
PSJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIj48bXNwYWNlIHdpZHRoPSI0MDBw
eCIgaGVpZ2h0PSI1MHB4IiBtYXRoYmFja2dyb3VuZD0iZ3JlZW4iLz48L21hdGg+CiAgICA8L2Rp
dj48L3A+CgogIDwvYm9keT4KPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>285315</attachid>
            <date>2016-08-04 06:11:35 -0700</date>
            <delta_ts>2016-08-04 06:11:35 -0700</delta_ts>
            <desc>Testcase</desc>
            <filename>mathml-overflow.html</filename>
            <type>text/html</type>
            <size>666</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPk1hdGhNTCBPdmVyZmxv
dzwvdGl0bGU+CiAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCIvPgogIDwvaGVhZD4KICA8Ym9keT4K
CiAgICA8cD5PdmVyZmxvdyB3aXRoIGlubGluZSBtYXRoOgogICAgPGRpdiBzdHlsZT0id2lkdGg6
IDIwMHB4OyBvdmVyZmxvdzogc2Nyb2xsOyI+CiAgICAgIDxtYXRoIHhtbG5zPSJodHRwOi8vd3d3
LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIj48bXNwYWNlIHdpZHRoPSI0MDBweCIgaGVpZ2h0PSI1
MHB4IiBzdHlsZT0iYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZWQsIGdy
ZWVuKSIvPjwvbWF0aD4KICAgIDwvZGl2PjwvcD4KCiAgICA8cD5PdmVyZmxvdyB3aXRoIGRpc3Bs
YXkgbWF0aDoKICAgIDxkaXYgc3R5bGU9IndpZHRoOiAyMDBweDsgb3ZlcmZsb3c6IHNjcm9sbDsi
PgogICAgICA8bWF0aCBkaXNwbGF5PSJibG9jayIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5
OTgvTWF0aC9NYXRoTUwiPjxtc3BhY2Ugd2lkdGg9IjQwMHB4IiBoZWlnaHQ9IjUwcHgiIHN0eWxl
PSJiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJlZCwgZ3JlZW4pIi8+PC9t
YXRoPgogICAgPC9kaXY+PC9wPgoKICA8L2JvZHk+CjwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285326</attachid>
            <date>2016-08-04 08:11:42 -0700</date>
            <delta_ts>2016-08-04 08:11:42 -0700</delta_ts>
            <desc>Experimental Patch</desc>
            <filename>160547.patch</filename>
            <type>text/plain</type>
            <size>4115</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5kZXggODFiMGFkNi4uYWI0NGZj
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTI0NTgsOCArMjQ1
OCw5IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlTG9naWNhbFdpZHRoSW5SZWdpb24oTG9naWNh
bEV4dGVudENvbXB1dGVkVmFsdWVzJiBjb21wdXRlCiAgICAgaWYgKCFoYXNQZXJwZW5kaWN1bGFy
Q29udGFpbmluZ0Jsb2NrICYmIGNvbnRhaW5lckxvZ2ljYWxXaWR0aCAmJiBjb250YWluZXJMb2dp
Y2FsV2lkdGggIT0gKGNvbXB1dGVkVmFsdWVzLm1fZXh0ZW50ICsgY29tcHV0ZWRWYWx1ZXMubV9t
YXJnaW5zLm1fc3RhcnQgKyBjb21wdXRlZFZhbHVlcy5tX21hcmdpbnMubV9lbmQpCiAgICAgICAg
ICYmICFpc0Zsb2F0aW5nKCkgJiYgIWlzSW5saW5lKCkgJiYgIWNiLmlzRmxleGlibGVCb3hJbmNs
dWRpbmdEZXByZWNhdGVkKCkKICNpZiBFTkFCTEUoTUFUSE1MKQotICAgICAgICAvLyBSZW5kZXJN
YXRoTUxCbG9ja3MgdGFrZSB0aGUgc2l6ZSBvZiB0aGVpciBjb250ZW50IHNvIHdlIG11c3Qgbm90
IGFkanVzdCB0aGUgbWFyZ2luIHRvIGZpbGwgdGhlIGNvbnRhaW5lciBzaXplLgotICAgICAgICAm
JiAhY2IuaXNSZW5kZXJNYXRoTUxCbG9jaygpCisgICAgICAgIC8vIEV4Y2VwdCBmb3IgPG1hdGgg
ZGlzcGxheT0iYmxvY2siPiwgUmVuZGVyTWF0aE1MQmxvY2tzIHRha2UgdGhlIHNpemUgb2YgdGhl
aXIgY29udGVudC4KKyAgICAgICAgLy8gSGVuY2Ugd2UgbXVzdCBub3QgYWRqdXN0IHRoZSBtYXJn
aW4gdG8gZmlsbCB0aGUgY29udGFpbmVyIHNpemUuCisgICAgICAgICYmICEoY2IuaXNSZW5kZXJN
YXRoTUxCbG9jaygpICYmICFjYi5pc0Rpc3BsYXlSZW5kZXJNYXRoTUxNYXRoKCkpCiAjZW5kaWYK
ICNpZiBFTkFCTEUoQ1NTX0dSSURfTEFZT1VUKQogICAgICAgICAmJiAhY2IuaXNSZW5kZXJHcmlk
KCkKQEAgLTI1MTcsOCArMjUxOCwxMiBAQCBMYXlvdXRVbml0IFJlbmRlckJveDo6Y29tcHV0ZUxv
Z2ljYWxXaWR0aEluUmVnaW9uVXNpbmcoU2l6ZVR5cGUgd2lkdGhUeXBlLCBMZW5ndAogICAgIGNv
bnN0IFJlbmRlckJsb2NrJiBjYiwgUmVuZGVyUmVnaW9uKiByZWdpb24pIGNvbnN0CiB7CiAgICAg
QVNTRVJUKHdpZHRoVHlwZSA9PSBNaW5TaXplIHx8IHdpZHRoVHlwZSA9PSBNYWluT3JQcmVmZXJy
ZWRTaXplIHx8ICFsb2dpY2FsV2lkdGguaXNBdXRvKCkpOwotICAgIGlmICh3aWR0aFR5cGUgPT0g
TWluU2l6ZSAmJiBsb2dpY2FsV2lkdGguaXNBdXRvKCkpCisKKyAgICBpZiAod2lkdGhUeXBlID09
IE1pblNpemUgJiYgbG9naWNhbFdpZHRoLmlzQXV0bygpKSB7CisgICAgICAgIGlmIChpc0Rpc3Bs
YXlSZW5kZXJNYXRoTUxNYXRoKCkpCisgICAgICAgICAgICByZXR1cm4gbWluUHJlZmVycmVkTG9n
aWNhbFdpZHRoKCk7CiAgICAgICAgIHJldHVybiBhZGp1c3RCb3JkZXJCb3hMb2dpY2FsV2lkdGhG
b3JCb3hTaXppbmcoMCk7CisgICAgfQogCiAgICAgaWYgKCFsb2dpY2FsV2lkdGguaXNJbnRyaW5z
aWNPckF1dG8oKSkgewogICAgICAgICAvLyBGSVhNRTogSWYgdGhlIGNvbnRhaW5pbmcgYmxvY2sg
ZmxvdyBpcyBwZXJwZW5kaWN1bGFyIHRvIG91ciBkaXJlY3Rpb24gd2UgbmVlZCB0byB1c2UgdGhl
IGF2YWlsYWJsZSBsb2dpY2FsIGhlaWdodCBpbnN0ZWFkLgpAQCAtMjYwOSw5ICsyNjE0LDkgQEAg
Ym9vbCBSZW5kZXJCb3g6OnNpemVzTG9naWNhbFdpZHRoVG9GaXRDb250ZW50KFNpemVUeXBlIHdp
ZHRoVHlwZSkgY29uc3QKICAgICB9CiAKICNpZiBFTkFCTEUoTUFUSE1MKQotICAgIC8vIFJlbmRl
ck1hdGhNTEJsb2NrcyB0YWtlIHRoZSBzaXplIG9mIHRoZWlyIGNvbnRlbnQsIG5vdCBvZiB0aGVp
ciBjb250YWluZXIuCi0gICAgaWYgKHBhcmVudCgpLT5pc1JlbmRlck1hdGhNTEJsb2NrKCkpCi0g
ICAgICAgIHJldHVybiB0cnVlOworICAgIC8vIEV4Y2VwdCBmb3IgPG1hdGggZGlzcGxheT0iYmxv
Y2siPiwgUmVuZGVyTWF0aE1MQmxvY2tzIHRha2UgdGhlIHNpemUgb2YgdGhlaXIgY29udGVudC4K
KyAgICBpZiAoaXNSZW5kZXJNYXRoTUxCbG9jaygpKQorICAgICAgICByZXR1cm4gIWlzRGlzcGxh
eVJlbmRlck1hdGhNTE1hdGgoKTsKICNlbmRpZgogCiAgICAgLy8gRmxleGlibGUgYm94IGl0ZW1z
IHNob3VsZCBzaHJpbmsgd3JhcCwgc28gd2UgbGF5IHRoZW0gb3V0IGF0IHRoZWlyIGludHJpbnNp
YyB3aWR0aHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKaW5kZXggYzZj
NmMzZi4uMjZjMDkyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaApA
QCAtMzM2LDYgKzMzNiw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJNYXRo
TUxPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlz
UmVuZGVyTWF0aE1MUm93KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJv
b2wgaXNSZW5kZXJNYXRoTUxNYXRoKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29s
IGlzRGlzcGxheVJlbmRlck1hdGhNTE1hdGgoKSBjb25zdCB7IHJldHVybiBpc1JlbmRlck1hdGhN
TE1hdGgoKSAmJiBzdHlsZSgpLmRpc3BsYXkoKSA9PSBCTE9DSzsgfQogICAgIHZpcnR1YWwgYm9v
bCBpc1JlbmRlck1hdGhNTE1lbmNsb3NlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2
aXJ0dWFsIGJvb2wgaXNSZW5kZXJNYXRoTUxGZW5jZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlck1hdGhNTEZlbmNlZE9wZXJhdG9yKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9t
YXRobWwvUmVuZGVyTWF0aE1MUm93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRo
bWwvUmVuZGVyTWF0aE1MUm93LmNwcAppbmRleCBiNWZjMjRiLi45ZGM2OWVkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvdy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb3cuY3BwCkBA
IC0xMTQsNyArMTE0LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxSb3c6OmxheW91dFJvd0l0ZW1zKExh
eW91dFVuaXQmIGFzY2VudCwgTGF5b3V0VW5pdCYgZGVzY2VudCkKICAgICB9CiAKICAgICB3aWR0
aCArPSBib3JkZXJFbmQoKSArIHBhZGRpbmdFbmQoKTsKLSAgICBpZiAoKCFpc1JlbmRlck1hdGhN
TE1hdGgoKSB8fCBzdHlsZSgpLmRpc3BsYXkoKSA9PSBJTkxJTkUpKQorICAgIGlmICghaXNEaXNw
bGF5UmVuZGVyTWF0aE1MTWF0aCgpKQogICAgICAgICBzZXRMb2dpY2FsV2lkdGgod2lkdGgpOwog
CiAgICAgTGF5b3V0VW5pdCB2ZXJ0aWNhbE9mZnNldCA9IGJvcmRlclRvcCgpICsgcGFkZGluZ1Rv
cCgpOwpAQCAtMTQ0LDcgKzE0NCw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MUm93OjpsYXlvdXRSb3dJ
dGVtcyhMYXlvdXRVbml0JiBhc2NlbnQsIExheW91dFVuaXQmIGRlc2NlbnQpCiAgICAgfQogCiAg
ICAgTGF5b3V0VW5pdCBjZW50ZXJCbG9ja09mZnNldCA9IDA7Ci0gICAgaWYgKHN0eWxlKCkuZGlz
cGxheSgpID09IEJMT0NLKQorICAgIGlmIChpc0Rpc3BsYXlSZW5kZXJNYXRoTUxNYXRoKCkpCiAg
ICAgICAgIGNlbnRlckJsb2NrT2Zmc2V0ID0gc3RkOjptYXg8TGF5b3V0VW5pdD4oMCwgKGxvZ2lj
YWxXaWR0aCgpIC0gKGhvcml6b250YWxPZmZzZXQgKyBib3JkZXJFbmQoKSArIHBhZGRpbmdFbmQo
KSkpIC8gMik7CiAKICAgICBpZiAoc2hvdWxkRmxpcEhvcml6b250YWwgJiYgY2VudGVyQmxvY2tP
ZmZzZXQgPiAwKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>332481</attachid>
            <date>2018-01-27 12:54:38 -0800</date>
            <delta_ts>2018-01-28 12:34:04 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>4644</size>
            <attacher name="Minsheng Liu">lambda</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxMDc5OGU0ZjE4NS4uNjFiNmZhNTk3ZWUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAor
MjAxOC0wMS0yNyAgTWluc2hlbmcgTGl1ICA8bGFtYmRhQGxpdS5tcz4KKworICAgICAgICBPdmVy
ZmxvdyBvZiBmb3JtdWxhcyBpcyBoaWRkZW4gZm9yIGRpc3BsYXkgbWF0aGVtYXRpY3MKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDU0NworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIHRlc3QgdG8g
ZW5zdXJlIDxtYXRoPiB3aXRoIGRpc3BsYXk9ImJsb2NrIiB3aWxsIG5vdCB0cnVuY2F0ZSBvdmVy
Zmxvd2VkIGNvbnRlbnRzLgorCisgICAgICAgICogbWF0aG1sL3ByZXNlbnRhdGlvbi9kaXNwbGF5
LW1hdGgtaG9yaXpvbnRhbC1vdmVyZmxvdy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IG1hdGhtbC9wcmVzZW50YXRpb24vZGlzcGxheS1tYXRoLWhvcml6b250YWwtb3ZlcmZsb3cuaHRt
bDogQWRkZWQuCisKIDIwMTgtMDEtMjYgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgTWFrZSBhY2Nlc3NpYmlsaXR5L21hYy9zZWxlY3Rpb24tbm90aWZpY2F0aW9u
LWZvY3VzLWNoYW5nZS5odG1sIG1vcmUgcmVsaWFibGUgYW5kIHJlLWVuYWJsZSBpdApkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvbWF0aG1sL3ByZXNlbnRhdGlvbi9kaXNwbGF5LW1hdGgtaG9yaXpv
bnRhbC1vdmVyZmxvdy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9tYXRobWwvcHJlc2VudGF0
aW9uL2Rpc3BsYXktbWF0aC1ob3Jpem9udGFsLW92ZXJmbG93LWV4cGVjdGVkLnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNWFlMGRlMGFhN2UKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9tYXRobWwvcHJlc2VudGF0aW9uL2Rpc3BsYXktbWF0aC1ob3Jp
em9udGFsLW92ZXJmbG93LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDkgQEAKK1RoZSB0ZXN0IHBh
c3NlcyBpZiBib3RoIGJhcnMgb3ZlcmZsb3csIGNhbiBiZSBzY3JvbGxlZCBob3Jpem9udGFsbHks
IGFuZCBoYXZlIHNhbWUgY29udGVudHMuCisKK092ZXJmbG93IHdpdGggaW5saW5lIG1hdGg6CisK
K092ZXJmbG93IHdpdGggZGlzcGxheSBtYXRoOgorCisKK1BBU1MgZGlzcGxheSBtYXRoIG92ZXJm
bG93IAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9tYXRobWwvcHJlc2VudGF0aW9uL2Rpc3Bs
YXktbWF0aC1ob3Jpem9udGFsLW92ZXJmbG93Lmh0bWwgYi9MYXlvdXRUZXN0cy9tYXRobWwvcHJl
c2VudGF0aW9uL2Rpc3BsYXktbWF0aC1ob3Jpem9udGFsLW92ZXJmbG93Lmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjc1YWFlMDljZDMzCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvbWF0aG1sL3ByZXNlbnRhdGlvbi9kaXNwbGF5LW1hdGgtaG9yaXpv
bnRhbC1vdmVyZmxvdy5odG1sCkBAIC0wLDAgKzEsMzIgQEAKKzwhZG9jdHlwZSBodG1sPgorPGh0
bWw+CisgIDxoZWFkPgorICAgIDx0aXRsZT5kaXNwbGF5IG1hdGggb3ZlcmZsb3c8L3RpdGxlPgor
ICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0
PgorICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMi
Pjwvc2NyaXB0PgorICAgIDxzY3JpcHQ+CisgICAgICBzZXR1cCh7ICJleHBsaWNpdF9kb25lIjog
dHJ1ZSB9KTsKKworICAgICAgZnVuY3Rpb24gcnVuKCkgeworICAgICAgICBsZXQgaW5saW5lID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lubGluZS1tYXRoJyk7CisgICAgICAgIGxldCBibG9j
ayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdibG9jay1tYXRoJyk7CisKKyAgICAgICAgYXNz
ZXJ0X2VxdWFscyhpbmxpbmUuY2xpZW50V2lkdGgsIGJsb2NrLmNsaWVudFdpZHRoKTsKKyAgICAg
ICAgZG9uZSgpOworICAgICAgfQorICAgIDwvc2NyaXB0PgorICA8L2hlYWQ+CisgIDxib2R5IG9u
bG9hZD0icnVuKCkiPgorICAgIDxwPlRoZSB0ZXN0IHBhc3NlcyBpZiBib3RoIGJhcnMgb3ZlcmZs
b3csIGNhbiBiZSBzY3JvbGxlZCBob3Jpem9udGFsbHksIGFuZCBoYXZlIHNhbWUgY29udGVudHMu
PC9wPgorCisgICAgPHA+T3ZlcmZsb3cgd2l0aCBpbmxpbmUgbWF0aDoKKyAgICA8L3A+PGRpdiBz
dHlsZT0id2lkdGg6IDIwMHB4OyBvdmVyZmxvdzogc2Nyb2xsOyI+CisgICAgICA8bWF0aCBpZD0i
aW5saW5lLW1hdGgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIj48
bXNwYWNlIHdpZHRoPSI0MDBweCIgaGVpZ2h0PSI1MHB4IiBzdHlsZT0iYmFja2dyb3VuZDogbGlu
ZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZWQsIGdyZWVuKSI+PC9tc3BhY2U+PC9tYXRoPgorICAg
IDwvZGl2PjxwPjwvcD4KKworICAgIDxwPk92ZXJmbG93IHdpdGggZGlzcGxheSBtYXRoOgorICAg
IDwvcD48ZGl2IHN0eWxlPSJ3aWR0aDogMjAwcHg7IG92ZXJmbG93OiBzY3JvbGw7Ij4KKyAgICAg
IDxtYXRoIGlkPSJibG9jay1tYXRoIiBkaXNwbGF5PSJibG9jayIgeG1sbnM9Imh0dHA6Ly93d3cu
dzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiPjxtc3BhY2Ugd2lkdGg9IjQwMHB4IiBoZWlnaHQ9IjUw
cHgiIHN0eWxlPSJiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJlZCwgZ3Jl
ZW4pIj48L21zcGFjZT48L21hdGg+CisgICAgPC9kaXY+PHA+PC9wPgorICA8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKaW5kZXggZDU5YjVhZmU2MmUuLmE4MzFkY2JhN2E2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMTgtMDEtMjcgIE1pbnNoZW5nIExpdSAgPGxhbWJkYUBsaXUubXM+
CisKKyAgICAgICAgT3ZlcmZsb3cgb2YgZm9ybXVsYXMgaXMgaGlkZGVuIGZvciBkaXNwbGF5IG1h
dGhlbWF0aWNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjA1NDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBQcmV2aW91c2x5LCA8bWF0aD4gd2l0aCBkaXNwbGF5PSJibG9jayIgdXNlcyBpdHMgcHJlZmVy
cmVkIHdpZHRoIGFzIGxvZ2ljYWwgd2lkdGguCisgICAgICAgIEhvd2V2ZXIsIHRoYXQgYmVoYXZp
b3Igd2lsbCB0cnVuY2F0ZSBvdmVyZmxvd2VkIGNvbnRlbnRzLiBUaGUgcGF0Y2ggZml4ZXMgaXQg
YnkKKyAgICAgICAgc2V0dGluZyB0aGUgbG9naWNhbCB3aWR0aCBhcyBpdHMgY29udGVudCB3aWR0
aCByYXRoZXIgdGhhbiBpdHMgcHJlZmVycmVkIGxvZ2ljYWwgd2lkdGgKKyAgICAgICAgaWYgdGhl
IGZvcm1lciBpcyB3aWRlciB0aGFuIHRoZSBsYXR0ZXIuCisKKyAgICAgICAgVGVzdDogbWF0aG1s
L3ByZXNlbnRhdGlvbi9kaXNwbGF5LW1hdGgtaG9yaXpvbnRhbC1vdmVyZmxvdy5odG1sCisKKyAg
ICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvdy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJNYXRoTUxSb3c6OmxheW91dEJsb2NrKToKKwogMjAxOC0wMS0yNiAgQW50
b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgogCiAgICAgICAgIFtXZWIgQW5pbWF0aW9u
c10gRGlzdGluZ3Vpc2ggYmV0d2VlbiBhbiBvbWl0dGVkIGFuZCBhIG51bGwgdGltZWxpbmUgYXJn
dW1lbnQgdG8gdGhlIEFuaW1hdGlvbiBjb25zdHJ1Y3RvcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb3cuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb3cuY3BwCmluZGV4IGIzM2ZkMmNhZTE1
Li40OWNiMjMwOGE3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGht
bC9SZW5kZXJNYXRoTUxSb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRo
bWwvUmVuZGVyTWF0aE1MUm93LmNwcApAQCAtMTgyLDYgKzE4Miw4IEBAIHZvaWQgUmVuZGVyTWF0
aE1MUm93OjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQpCiAg
ICAgICAgICAgICBpZiAoIWNoaWxkLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkKICAgICAgICAg
ICAgICAgICBjaGlsZC0+c2V0TG9jYXRpb24oY2hpbGQtPmxvY2F0aW9uKCkgKyBMYXlvdXRQb2lu
dChjZW50ZXJCbG9ja09mZnNldCwgMCkpOwogICAgICAgICB9CisgICAgICAgIGlmICh3aWR0aCA+
IGxvZ2ljYWxXaWR0aCgpKQorICAgICAgICAgICAgc2V0TG9naWNhbFdpZHRoKHdpZHRoKTsKICAg
ICB9IGVsc2UgewogICAgICAgICBsYXlvdXRSb3dJdGVtcyh3aWR0aCwgYXNjZW50KTsKICAgICAg
ICAgc2V0TG9naWNhbFdpZHRoKHdpZHRoKTsK
</data>
<flag name="review"
          id="351423"
          type_id="1"
          status="-"
          setter="fred.wang"
    />
    <flag name="commit-queue"
          id="351424"
          type_id="3"
          status="-"
          setter="fred.wang"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>332493</attachid>
            <date>2018-01-28 12:34:04 -0800</date>
            <delta_ts>2018-01-28 14:51:49 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>10466</size>
            <attacher name="Minsheng Liu">lambda</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxMDc5OGU0ZjE4NS4uOWQ4NWUyYmEyODAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAor
MjAxOC0wMS0yOCAgTWluc2hlbmcgTGl1ICA8bGFtYmRhQGxpdS5tcz4KKworICAgICAgICBPdmVy
ZmxvdyBvZiBmb3JtdWxhcyBpcyBoaWRkZW4gZm9yIGRpc3BsYXkgbWF0aGVtYXRpY3MKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDU0NworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIHRlc3QgdG8g
ZW5zdXJlIDxtYXRoPiB3aXRoIGRpc3BsYXk9ImJsb2NrIiB3aWxsIG5vdCB0cnVuY2F0ZSBvdmVy
Zmxvd2VkIGNvbnRlbnRzLgorCisgICAgICAgICogbWF0aG1sL3ByZXNlbnRhdGlvbi9kaXNwbGF5
LW1hdGgtaG9yaXpvbnRhbC1vdmVyZmxvdy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IG1hdGhtbC9wcmVzZW50YXRpb24vZGlzcGxheS1tYXRoLWhvcml6b250YWwtb3ZlcmZsb3cuaHRt
bDogQWRkZWQuCisKIDIwMTgtMDEtMjYgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgTWFrZSBhY2Nlc3NpYmlsaXR5L21hYy9zZWxlY3Rpb24tbm90aWZpY2F0aW9u
LWZvY3VzLWNoYW5nZS5odG1sIG1vcmUgcmVsaWFibGUgYW5kIHJlLWVuYWJsZSBpdApkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvbWF0aG1sL3ByZXNlbnRhdGlvbi9tYXRoLWlubGluZS1kaXNwbGF5
LXdpZHRoLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL21hdGhtbC9wcmVzZW50YXRpb24vbWF0
aC1pbmxpbmUtZGlzcGxheS13aWR0aC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLjM1ZDFhZTlkYWJkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvbWF0aG1sL3ByZXNlbnRhdGlvbi9tYXRoLWlubGluZS1kaXNwbGF5LXdpZHRoLWV4cGVj
dGVkLnR4dApAQCAtMCwwICsxLDE0IEBACitJbmxpbmUgbWF0aCBvZiAxMDBweCBjb250ZW50IGlu
IGEgMjAwcHggY29udGFpbmVyLiBUaGUgdGVzdCBwYXNzZXMgaWYgdGhlIGJhciBpcyB0byB0aGUg
bGVmdCBvZiB0aGUgY29udGFpbmVyLgorCitEaXNwbGF5IG1hdGggb2YgMTAwcHggY29udGVudCBp
biBhIDIwMHB4IGNvbnRhaW5lci4gVGhlIHRlc3QgcGFzc2VzIGlmIHRoZSBiYXIgaXMgaW4gdGhl
IG1pZGRsZSBvZiB0aGUgY29udGFpbmVyLgorCitJbmxpbmUgbWF0aCBvZiA0MDBweCBjb250ZW50
IGluIGEgMjAwcHggY29udGFpbmVyLiBUaGUgdGVzdCBwYXNzZXMgaWYgdGhlIGJhciBjYW4gYmUg
c2Nyb2xsZWQgaG9yaXpvbnRhbGx5IHRvIHNlZSB0aGUgZnVsbCBjb250ZW50LgorCitEaXNwbGF5
IG1hdGggb2YgNDAwcHggY29udGVudCBpbiBhIDIwMHB4IGNvbnRhaW5lci4gVGhlIHRlc3QgcGFz
c2VzIGlmIHRoZSBiYXIgYmVoYXZlcyBleGFjdGx5IHRoZSBzYW1lIGFzIHRoZSBwcmV2aW91cyBv
bmUuCisKKworUEFTUyBpbmxpbmUgbWF0aCwgMTAwcHggY29udGVudCwgMjAwcHggY29udGFpbmVy
IAorUEFTUyBkbmxpbmUgbWF0aCwgMTAwcHggY29udGVudCwgMjAwcHggY29udGFpbmVyIAorUEFT
UyBpbmxpbmUgbWF0aCwgNDAwcHggY29udGVudCwgMjAwcHggY29udGFpbmVyIAorUEFTUyBkaXNw
bGF5IG1hdGgsIDQwMHB4IGNvbnRlbnQsIDIwMHB4IGNvbnRhaW5lciAKKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvbWF0aG1sL3ByZXNlbnRhdGlvbi9tYXRoLWlubGluZS1kaXNwbGF5LXdpZHRo
Lmh0bWwgYi9MYXlvdXRUZXN0cy9tYXRobWwvcHJlc2VudGF0aW9uL21hdGgtaW5saW5lLWRpc3Bs
YXktd2lkdGguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYmI0
Njc4ODFmMzIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9tYXRobWwvcHJlc2VudGF0
aW9uL21hdGgtaW5saW5lLWRpc3BsYXktd2lkdGguaHRtbApAQCAtMCwwICsxLDgxIEBACis8IWRv
Y3R5cGUgaHRtbD4KKzxodG1sPgorICA8aGVhZD4KKyAgICA8dGl0bGU+ZGlzcGxheSBtYXRoIG92
ZXJmbG93PC90aXRsZT4KKyAgICA8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3Rlc3RoYXJu
ZXNzLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3Rlc3Ro
YXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0PgorICAgICAgc2V0dXAoeyAi
ZXhwbGljaXRfZG9uZSI6IHRydWUgfSk7CisKKyAgICAgIGZ1bmN0aW9uIHJ1bigpIHsKKyAgICAg
ICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgICBsZXQgbWF0aCA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdpbmxpbmUtMTAwJyk7CisgICAgICAgICAgYXNzZXJ0X2VxdWFscyhtYXRoLmNs
aWVudFdpZHRoLCAxMDApOworICAgICAgICB9LCAiaW5saW5lIG1hdGgsIDEwMHB4IGNvbnRlbnQs
IDIwMHB4IGNvbnRhaW5lciIpOworCisgICAgICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgbGV0IG1hdGggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGlzcGxheS0xMDAnKTsKKyAg
ICAgICAgICBhc3NlcnRfZXF1YWxzKG1hdGguY2xpZW50V2lkdGgsIDIwMCk7CisKKyAgICAgICAg
ICBsZXQgbXNwYWNlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NwYWNlLTEwMCcpOworCisg
ICAgICAgICAgbGV0IG1hdGhCb3ggPSBtYXRoLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOworICAg
ICAgICAgIGxldCBtc3BhY2VCb3ggPSBtc3BhY2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Cisg
ICAgICAgICAgYXNzZXJ0X2VxdWFscyhtc3BhY2VCb3gubGVmdCAtIG1hdGhCb3gubGVmdCwgbWF0
aEJveC5yaWdodCAtIG1zcGFjZUJveC5yaWdodCk7CisgICAgICAgIH0sICJkbmxpbmUgbWF0aCwg
MTAwcHggY29udGVudCwgMjAwcHggY29udGFpbmVyIik7CisKKyAgICAgICAgdGVzdChmdW5jdGlv
bigpIHsKKyAgICAgICAgICBsZXQgbWF0aCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbmxp
bmUtNDAwJyk7CisgICAgICAgICAgYXNzZXJ0X2VxdWFscyhtYXRoLmNsaWVudFdpZHRoLCA0MDAp
OworICAgICAgICB9LCAiaW5saW5lIG1hdGgsIDQwMHB4IGNvbnRlbnQsIDIwMHB4IGNvbnRhaW5l
ciIpOworCisgICAgICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgICAgbGV0IG1hdGggPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGlzcGxheS00MDAnKTsKKyAgICAgICAgICBhc3NlcnRf
ZXF1YWxzKG1hdGguY2xpZW50V2lkdGgsIDQwMCk7CisgICAgICAgIH0sICJkaXNwbGF5IG1hdGgs
IDQwMHB4IGNvbnRlbnQsIDIwMHB4IGNvbnRhaW5lciIpOworICAgICAgICBkb25lKCk7CisgICAg
ICB9CisgICAgPC9zY3JpcHQ+CisKKyAgICA8c3R5bGU+CisgICAgICAjdGVzdC1hcmVhIGRpdiB7
CisgICAgICAgIHdpZHRoOiAyMDBweDsKKyAgICAgICAgb3ZlcmZsb3c6IGF1dG87CisgICAgICAg
IGJvcmRlci1zdHlsZTogc29saWQ7CisgICAgICAgIGxpbmUtaGVpZ2h0OiAwOworICAgICAgfQor
ICAgIDwvc3R5bGU+CisgIDwvaGVhZD4KKyAgPGJvZHkgb25sb2FkPSJzZXRUaW1lb3V0KHJ1biwg
MjAwMCkiPgorCisgICAgPGRpdiBpZD0idGVzdC1hcmVhIj4KKyAgICAgIDxwPklubGluZSBtYXRo
IG9mIDEwMHB4IGNvbnRlbnQgaW4gYSAyMDBweCBjb250YWluZXIuIFRoZSB0ZXN0IHBhc3NlcyBp
ZiB0aGUgYmFyIGlzIHRvIHRoZSBsZWZ0IG9mIHRoZSBjb250YWluZXIuPC9wPgorICAgICAgPGRp
dj4KKyAgICAgICAgPG1hdGggaWQ9ImlubGluZS0xMDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9y
Zy8xOTk4L01hdGgvTWF0aE1MIj4KKyAgICAgICAgICA8bXNwYWNlIHdpZHRoPSIxMDBweCIgaGVp
Z2h0PSI1MHB4IiBzdHlsZT0iYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCBy
ZWQsIGdyZWVuKSI+PC9tc3BhY2U+CisgICAgICAgIDwvbWF0aD4KKyAgICAgIDwvZGl2PgorCisg
ICAgICA8cD5EaXNwbGF5IG1hdGggb2YgMTAwcHggY29udGVudCBpbiBhIDIwMHB4IGNvbnRhaW5l
ci4gVGhlIHRlc3QgcGFzc2VzIGlmIHRoZSBiYXIgaXMgaW4gdGhlIG1pZGRsZSBvZiB0aGUgY29u
dGFpbmVyLjwvcD4KKyAgICAgIDxkaXY+CisgICAgICAgIDxtYXRoIGlkPSJkaXNwbGF5LTEwMCIg
ZGlzcGxheT0iYmxvY2siIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1M
Ij4KKyAgICAgICAgICA8bXNwYWNlIGlkPSJzcGFjZS0xMDAiIHdpZHRoPSIxMDBweCIgaGVpZ2h0
PSI1MHB4IiBzdHlsZT0iYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZWQs
IGdyZWVuKSI+PC9tc3BhY2U+CisgICAgICAgIDwvbWF0aD4KKyAgICAgIDwvZGl2PgorCisgICAg
ICA8cD5JbmxpbmUgbWF0aCBvZiA0MDBweCBjb250ZW50IGluIGEgMjAwcHggY29udGFpbmVyLiBU
aGUgdGVzdCBwYXNzZXMgaWYgdGhlIGJhciBjYW4gYmUgc2Nyb2xsZWQgaG9yaXpvbnRhbGx5IHRv
IHNlZSB0aGUgZnVsbCBjb250ZW50LjwvcD4KKyAgICAgIDxkaXY+CisgICAgICAgIDxtYXRoIGlk
PSJpbmxpbmUtNDAwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCI+
CisgICAgICAgICAgPG1zcGFjZSB3aWR0aD0iNDAwcHgiIGhlaWdodD0iNTBweCIgc3R5bGU9ImJh
Y2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmVkLCBncmVlbikiPjwvbXNwYWNl
PgorICAgICAgICA8L21hdGg+CisgICAgICA8L2Rpdj4KKworICAgICAgPHA+RGlzcGxheSBtYXRo
IG9mIDQwMHB4IGNvbnRlbnQgaW4gYSAyMDBweCBjb250YWluZXIuIFRoZSB0ZXN0IHBhc3NlcyBp
ZiB0aGUgYmFyIGJlaGF2ZXMgZXhhY3RseSB0aGUgc2FtZSBhcyB0aGUgcHJldmlvdXMgb25lLjwv
cD4KKyAgICAgIDxkaXY+CisgICAgICAgIDxtYXRoIGlkPSJkaXNwbGF5LTQwMCIgZGlzcGxheT0i
YmxvY2siIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIj4KKyAgICAg
ICAgICA8bXNwYWNlIHdpZHRoPSI0MDBweCIgaGVpZ2h0PSI1MHB4IiBzdHlsZT0iYmFja2dyb3Vu
ZDogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZWQsIGdyZWVuKSI+PC9tc3BhY2U+CisgICAg
ICAgIDwvbWF0aD4KKyAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorICA8L2JvZHk+Cis8L2h0bWw+
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKaW5kZXggZDU5YjVhZmU2MmUuLjljNzQxMzgzNDgzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMjAgQEAKKzIwMTgtMDEtMjggIE1pbnNoZW5nIExpdSAgPGxhbWJkYUBsaXUubXM+CisK
KyAgICAgICAgT3ZlcmZsb3cgb2YgZm9ybXVsYXMgaXMgaGlkZGVuIGZvciBkaXNwbGF5IG1hdGhl
bWF0aWNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjA1NDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQ
cmV2aW91c2x5LCA8bWF0aD4gd2l0aCBkaXNwbGF5PSJibG9jayIgdXNlcyBpdHMgY29udGFpbmVy
J3MgbG9naWNhbCB3aWR0aCBhcyBsb2dpY2FsIHdpZHRoLgorICAgICAgICBIb3dldmVyLCB0aGF0
IGJlaGF2aW9yIHdpbGwgdHJ1bmNhdGUgb3ZlcmZsb3dlZCBjb250ZW50cy4gVGhlIHBhdGNoIGZp
eGVzIGl0IGJ5IHNldHRpbmcKKyAgICAgICAgdGhlIGxvZ2ljYWwgd2lkdGggYXMgaXRzIGNvbnRl
bnQgd2lkdGggcmF0aGVyIHRoYW4gaXRzIGNvbnRhaW5lcidzIGxvZ2ljYWwgd2lkdGgKKyAgICAg
ICAgaWYgdGhlIGZvcm1lciBpcyB3aWRlciB0aGFuIHRoZSBsYXR0ZXIuCisKKyAgICAgICAgVGVz
dDogbWF0aG1sL3ByZXNlbnRhdGlvbi9kaXNwbGF5LW1hdGgtaG9yaXpvbnRhbC1vdmVyZmxvdy5o
dG1sCisKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvdy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxSb3c6OmxheW91dEJsb2NrKToKKwogMjAxOC0w
MS0yNiAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgogCiAgICAgICAgIFtXZWIg
QW5pbWF0aW9uc10gRGlzdGluZ3Vpc2ggYmV0d2VlbiBhbiBvbWl0dGVkIGFuZCBhIG51bGwgdGlt
ZWxpbmUgYXJndW1lbnQgdG8gdGhlIEFuaW1hdGlvbiBjb25zdHJ1Y3RvcgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxNYXRoLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MTWF0aC5jcHAKaW5kZXgg
ZjhkOGZhNzYzMjQuLjdhMmM2MTVkMGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE1hdGguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MTWF0aC5jcHAKQEAgLTQzLDYgKzQzLDUzIEBAIFJl
bmRlck1hdGhNTE1hdGg6OlJlbmRlck1hdGhNTE1hdGgoTWF0aE1MUm93RWxlbWVudCYgZWxlbWVu
dCwgUmVuZGVyU3R5bGUmJiBzdHlsCiB7CiB9CiAKK3ZvaWQgUmVuZGVyTWF0aE1MTWF0aDo6Y2Vu
dGVyQ2hpbGRyZW4oTGF5b3V0VW5pdCBjb250ZW50V2lkdGgpCit7CisgICAgTGF5b3V0VW5pdCBj
ZW50ZXJCbG9ja09mZnNldCA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KDAsIGxvZ2ljYWxXaWR0aCgp
IC0gY29udGVudFdpZHRoKSAvIDI7CisgICAgaWYgKCFzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJl
Y3Rpb24oKSkKKyAgICAgICAgY2VudGVyQmxvY2tPZmZzZXQgPSAtY2VudGVyQmxvY2tPZmZzZXQ7
CisgICAgZm9yIChhdXRvKiBjaGlsZCA9IGZpcnN0Q2hpbGRCb3goKTsgY2hpbGQ7IGNoaWxkID0g
Y2hpbGQtPm5leHRTaWJsaW5nQm94KCkpIHsKKyAgICAgICAgaWYgKCFjaGlsZC0+aXNPdXRPZkZs
b3dQb3NpdGlvbmVkKCkpCisgICAgICAgICAgICBjaGlsZC0+c2V0TG9jYXRpb24oY2hpbGQtPmxv
Y2F0aW9uKCkgKyBMYXlvdXRQb2ludChjZW50ZXJCbG9ja09mZnNldCwgMCkpOworICAgIH0KK30K
Kwordm9pZCBSZW5kZXJNYXRoTUxNYXRoOjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRy
ZW4sIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQpCit7CisgICAgQVNTRVJUKG5lZWRzTGF5
b3V0KCkpOworCisgICAgaWYgKHN0eWxlKCkuZGlzcGxheSgpICE9IEJMT0NLKSB7CisgICAgICAg
IFJlbmRlck1hdGhNTFJvdzo6bGF5b3V0QmxvY2socmVsYXlvdXRDaGlsZHJlbiwgcGFnZUxvZ2lj
YWxIZWlnaHQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFyZWxheW91dENo
aWxkcmVuICYmIHNpbXBsaWZpZWRMYXlvdXQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVj
b21wdXRlTG9naWNhbFdpZHRoKCk7CisKKyAgICBzZXRMb2dpY2FsSGVpZ2h0KGJvcmRlckFuZFBh
ZGRpbmdMb2dpY2FsSGVpZ2h0KCkgKyBzY3JvbGxiYXJMb2dpY2FsSGVpZ2h0KCkpOworCisgICAg
TGF5b3V0VW5pdCB3aWR0aCwgYXNjZW50LCBkZXNjZW50OworICAgIHN0cmV0Y2hWZXJ0aWNhbE9w
ZXJhdG9yc0FuZExheW91dENoaWxkcmVuKCk7CisgICAgZ2V0Q29udGVudEJvdW5kaW5nQm94KHdp
ZHRoLCBhc2NlbnQsIGRlc2NlbnQpOworICAgIGxheW91dFJvd0l0ZW1zKGxvZ2ljYWxXaWR0aCgp
LCBhc2NlbnQpOworCisgICAgLy8gRGlzcGxheSBmb3JtdWxhcyBtdXN0IGJlIGNlbnRlcmVkIGhv
cml6b250YWxseSBpZiB0aGVyZSBpcyBleHRyYSBzcGFjZSBsZWZ0LgorICAgIC8vIE90aGVyd2lz
ZSwgbG9naWNhbCB3aWR0aCBtdXN0IGJlIHVwZGF0ZWQgdG8gdGhlIGNvbnRlbnQgd2lkdGggdG8g
YXZvaWQgdHJ1bmNhdGlvbi4KKyAgICBpZiAod2lkdGggPCBsb2dpY2FsV2lkdGgoKSkKKyAgICAg
ICAgY2VudGVyQ2hpbGRyZW4od2lkdGgpOworICAgIGVsc2UKKyAgICAgICAgc2V0TG9naWNhbFdp
ZHRoKHdpZHRoKTsKKworICAgIHNldExvZ2ljYWxIZWlnaHQoYm9yZGVyVG9wKCkgKyBwYWRkaW5n
VG9wKCkgKyBhc2NlbnQgKyBkZXNjZW50ICsgYm9yZGVyQm90dG9tKCkgKyBwYWRkaW5nQm90dG9t
KCkgKyBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkpOworICAgIHVwZGF0ZUxvZ2ljYWxIZWln
aHQoKTsKKworICAgIGxheW91dFBvc2l0aW9uZWRPYmplY3RzKHJlbGF5b3V0Q2hpbGRyZW4pOwor
CisgICAgY2xlYXJOZWVkc0xheW91dCgpOworfQorCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoTUFU
SE1MKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJN
YXRoTUxNYXRoLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhN
TE1hdGguaAppbmRleCA4ZWNlNTExNzA4MS4uNjA4NGJjZTJmMDEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MTWF0aC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MTWF0aC5oCkBAIC00MSw2ICs0
MSw5IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgYm9vbCBpc1JlbmRlck1hdGhNTE1hdGgoKSBj
b25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CiAgICAgY29uc3QgY2hhciogcmVuZGVyTmFtZSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuICJSZW5kZXJNYXRoTUxNYXRoIjsgfQorCisgICAgdm9pZCBj
ZW50ZXJDaGlsZHJlbihMYXlvdXRVbml0IGNvbnRlbnRXaWR0aCk7CisgICAgdm9pZCBsYXlvdXRC
bG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQg
PSAwKSBmaW5hbDsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9tYXRobWwvUmVuZGVyTWF0aE1MUm93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9t
YXRobWwvUmVuZGVyTWF0aE1MUm93LmNwcAppbmRleCBiMzNmZDJjYWUxNS4uMDUwNWVmMGFlZTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1M
Um93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhN
TFJvdy5jcHAKQEAgLTE3MSwyMiArMTcxLDggQEAgdm9pZCBSZW5kZXJNYXRoTUxSb3c6OmxheW91
dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCkKICAgICBMYXlvdXRVbml0
IHdpZHRoLCBhc2NlbnQsIGRlc2NlbnQ7CiAgICAgc3RyZXRjaFZlcnRpY2FsT3BlcmF0b3JzQW5k
TGF5b3V0Q2hpbGRyZW4oKTsKICAgICBnZXRDb250ZW50Qm91bmRpbmdCb3god2lkdGgsIGFzY2Vu
dCwgZGVzY2VudCk7Ci0KLSAgICBpZiAoaXNSZW5kZXJNYXRoTUxNYXRoKCkgJiYgc3R5bGUoKS5k
aXNwbGF5KCkgPT0gQkxPQ0spIHsKLSAgICAgICAgLy8gRGlzcGxheSBmb3JtdWxhcyBtdXN0IGJl
IGNlbnRlcmVkIGhvcml6b250YWxseS4KLSAgICAgICAgbGF5b3V0Um93SXRlbXMobG9naWNhbFdp
ZHRoKCksIGFzY2VudCk7Ci0gICAgICAgIExheW91dFVuaXQgY2VudGVyQmxvY2tPZmZzZXQgPSBz
dGQ6Om1heDxMYXlvdXRVbml0PigwLCBsb2dpY2FsV2lkdGgoKSAtIHdpZHRoKSAvIDI7Ci0gICAg
ICAgIGlmICghc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCi0gICAgICAgICAgICBj
ZW50ZXJCbG9ja09mZnNldCA9IC1jZW50ZXJCbG9ja09mZnNldDsKLSAgICAgICAgZm9yIChhdXRv
KiBjaGlsZCA9IGZpcnN0Q2hpbGRCb3goKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJs
aW5nQm94KCkpIHsKLSAgICAgICAgICAgIGlmICghY2hpbGQtPmlzT3V0T2ZGbG93UG9zaXRpb25l
ZCgpKQotICAgICAgICAgICAgICAgIGNoaWxkLT5zZXRMb2NhdGlvbihjaGlsZC0+bG9jYXRpb24o
KSArIExheW91dFBvaW50KGNlbnRlckJsb2NrT2Zmc2V0LCAwKSk7Ci0gICAgICAgIH0KLSAgICB9
IGVsc2UgewotICAgICAgICBsYXlvdXRSb3dJdGVtcyh3aWR0aCwgYXNjZW50KTsKLSAgICAgICAg
c2V0TG9naWNhbFdpZHRoKHdpZHRoKTsKLSAgICB9Ci0KKyAgICBsYXlvdXRSb3dJdGVtcyh3aWR0
aCwgYXNjZW50KTsKKyAgICBzZXRMb2dpY2FsV2lkdGgod2lkdGgpOwogICAgIHNldExvZ2ljYWxI
ZWlnaHQoYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCkgKyBhc2NlbnQgKyBkZXNjZW50ICsgYm9y
ZGVyQm90dG9tKCkgKyBwYWRkaW5nQm90dG9tKCkgKyBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0
KCkpOwogICAgIHVwZGF0ZUxvZ2ljYWxIZWlnaHQoKTsKIAo=
</data>
<flag name="review"
          id="351436"
          type_id="1"
          status="+"
          setter="fred.wang"
    />
    <flag name="commit-queue"
          id="351439"
          type_id="3"
          status="-"
          setter="fred.wang"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>332496</attachid>
            <date>2018-01-28 14:50:49 -0800</date>
            <delta_ts>2018-01-28 22:36:01 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>10508</size>
            <attacher name="Minsheng Liu">lambda</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxMDc5OGU0ZjE4NS4uOWQ4NWUyYmEyODAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAor
MjAxOC0wMS0yOCAgTWluc2hlbmcgTGl1ICA8bGFtYmRhQGxpdS5tcz4KKworICAgICAgICBPdmVy
ZmxvdyBvZiBmb3JtdWxhcyBpcyBoaWRkZW4gZm9yIGRpc3BsYXkgbWF0aGVtYXRpY3MKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDU0NworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIHRlc3QgdG8g
ZW5zdXJlIDxtYXRoPiB3aXRoIGRpc3BsYXk9ImJsb2NrIiB3aWxsIG5vdCB0cnVuY2F0ZSBvdmVy
Zmxvd2VkIGNvbnRlbnRzLgorCisgICAgICAgICogbWF0aG1sL3ByZXNlbnRhdGlvbi9kaXNwbGF5
LW1hdGgtaG9yaXpvbnRhbC1vdmVyZmxvdy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IG1hdGhtbC9wcmVzZW50YXRpb24vZGlzcGxheS1tYXRoLWhvcml6b250YWwtb3ZlcmZsb3cuaHRt
bDogQWRkZWQuCisKIDIwMTgtMDEtMjYgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgTWFrZSBhY2Nlc3NpYmlsaXR5L21hYy9zZWxlY3Rpb24tbm90aWZpY2F0aW9u
LWZvY3VzLWNoYW5nZS5odG1sIG1vcmUgcmVsaWFibGUgYW5kIHJlLWVuYWJsZSBpdApkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvbWF0aG1sL3ByZXNlbnRhdGlvbi9tYXRoLWlubGluZS1kaXNwbGF5
LXdpZHRoLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL21hdGhtbC9wcmVzZW50YXRpb24vbWF0
aC1pbmxpbmUtZGlzcGxheS13aWR0aC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLjkxOWY3ZGQ0NmMzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvbWF0aG1sL3ByZXNlbnRhdGlvbi9tYXRoLWlubGluZS1kaXNwbGF5LXdpZHRoLWV4cGVj
dGVkLnR4dApAQCAtMCwwICsxLDE0IEBACitJbmxpbmUgbWF0aCBvZiAxMDBweCBjb250ZW50IGlu
IGEgMjAwcHggY29udGFpbmVyLiBUaGUgdGVzdCBwYXNzZXMgaWYgdGhlIGJhciBpcyB0byB0aGUg
bGVmdCBvZiB0aGUgY29udGFpbmVyLgorCitEaXNwbGF5IG1hdGggb2YgMTAwcHggY29udGVudCBp
biBhIDIwMHB4IGNvbnRhaW5lci4gVGhlIHRlc3QgcGFzc2VzIGlmIHRoZSBiYXIgaXMgaW4gdGhl
IG1pZGRsZSBvZiB0aGUgY29udGFpbmVyLgorCitJbmxpbmUgbWF0aCBvZiA0MDBweCBjb250ZW50
IGluIGEgMjAwcHggY29udGFpbmVyLiBUaGUgdGVzdCBwYXNzZXMgaWYgdGhlIGJhciBjYW4gYmUg
c2Nyb2xsZWQgaG9yaXpvbnRhbGx5IHRvIHNlZSB0aGUgZnVsbCBjb250ZW50LgorCitEaXNwbGF5
IG1hdGggb2YgNDAwcHggY29udGVudCBpbiBhIDIwMHB4IGNvbnRhaW5lci4gVGhlIHRlc3QgcGFz
c2VzIGlmIHRoZSBiYXIgYmVoYXZlcyBleGFjdGx5IHRoZSBzYW1lIGFzIHRoZSBwcmV2aW91cyBv
bmUuCisKKworUEFTUyBpbmxpbmUgbWF0aCwgMTAwcHggY29udGVudCwgMjAwcHggY29udGFpbmVy
IAorUEFTUyBkaXNwbGF5IG1hdGgsIDEwMHB4IGNvbnRlbnQsIDIwMHB4IGNvbnRhaW5lciAKK1BB
U1MgaW5saW5lIG1hdGgsIDQwMHB4IGNvbnRlbnQsIDIwMHB4IGNvbnRhaW5lciAKK1BBU1MgZGlz
cGxheSBtYXRoLCA0MDBweCBjb250ZW50LCAyMDBweCBjb250YWluZXIgCisKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL21hdGhtbC9wcmVzZW50YXRpb24vbWF0aC1pbmxpbmUtZGlzcGxheS13aWR0
aC5odG1sIGIvTGF5b3V0VGVzdHMvbWF0aG1sL3ByZXNlbnRhdGlvbi9tYXRoLWlubGluZS1kaXNw
bGF5LXdpZHRoLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmJh
YjhiYmI1NzAwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvbWF0aG1sL3ByZXNlbnRh
dGlvbi9tYXRoLWlubGluZS1kaXNwbGF5LXdpZHRoLmh0bWwKQEAgLTAsMCArMSw4MiBAQAorPCFk
b2N0eXBlIGh0bWw+Cis8aHRtbD4KKyAgPGhlYWQ+CisgICAgPHRpdGxlPmRpc3BsYXkgbWF0aCBv
dmVyZmxvdzwvdGl0bGU+CisgICAgPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy90ZXN0aGFy
bmVzcy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy90ZXN0
aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdD4KKyAgICAgIHNldHVwKHsg
ImV4cGxpY2l0X2RvbmUiOiB0cnVlIH0pOworCisgICAgICBmdW5jdGlvbiBydW4oKSB7CisgICAg
ICAgIHRlc3QoZnVuY3Rpb24oKSB7CisgICAgICAgICAgbGV0IG1hdGggPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnaW5saW5lLTEwMCcpOworICAgICAgICAgIGFzc2VydF9lcXVhbHMobWF0aC5j
bGllbnRXaWR0aCwgMTAwKTsKKyAgICAgICAgfSwgImlubGluZSBtYXRoLCAxMDBweCBjb250ZW50
LCAyMDBweCBjb250YWluZXIiKTsKKworICAgICAgICB0ZXN0KGZ1bmN0aW9uKCkgeworICAgICAg
ICAgIGxldCBtYXRoID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Rpc3BsYXktMTAwJyk7Cisg
ICAgICAgICAgYXNzZXJ0X2VxdWFscyhtYXRoLmNsaWVudFdpZHRoLCAyMDApOworCisgICAgICAg
ICAgbGV0IG1zcGFjZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzcGFjZS0xMDAnKTsKKwor
ICAgICAgICAgIGxldCBtYXRoQm94ID0gbWF0aC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKyAg
ICAgICAgICBsZXQgbXNwYWNlQm94ID0gbXNwYWNlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwor
ICAgICAgICAgIGFzc2VydF9lcXVhbHMobXNwYWNlQm94LmxlZnQgLSBtYXRoQm94LmxlZnQsIG1h
dGhCb3gucmlnaHQgLSBtc3BhY2VCb3gucmlnaHQpOworICAgICAgICB9LCAiZGlzcGxheSBtYXRo
LCAxMDBweCBjb250ZW50LCAyMDBweCBjb250YWluZXIiKTsKKworICAgICAgICB0ZXN0KGZ1bmN0
aW9uKCkgeworICAgICAgICAgIGxldCBtYXRoID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lu
bGluZS00MDAnKTsKKyAgICAgICAgICBhc3NlcnRfZXF1YWxzKG1hdGguY2xpZW50V2lkdGgsIDQw
MCk7CisgICAgICAgIH0sICJpbmxpbmUgbWF0aCwgNDAwcHggY29udGVudCwgMjAwcHggY29udGFp
bmVyIik7CisKKyAgICAgICAgdGVzdChmdW5jdGlvbigpIHsKKyAgICAgICAgICBsZXQgbWF0aCA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkaXNwbGF5LTQwMCcpOworICAgICAgICAgIGFzc2Vy
dF9lcXVhbHMobWF0aC5jbGllbnRXaWR0aCwgNDAwKTsKKyAgICAgICAgfSwgImRpc3BsYXkgbWF0
aCwgNDAwcHggY29udGVudCwgMjAwcHggY29udGFpbmVyIik7CisgICAgICAgIGRvbmUoKTsKKyAg
ICAgIH0KKyAgICA8L3NjcmlwdD4KKworICAgIDxzdHlsZT4KKyAgICAgICN0ZXN0LWFyZWEgZGl2
IHsKKyAgICAgICAgd2lkdGg6IDIwMHB4OworICAgICAgICBvdmVyZmxvdzogaGlkZGVuOworICAg
ICAgICBib3JkZXItc3R5bGU6IHNvbGlkOworICAgICAgICAvKiBNYWtlIHN1cmUgaW5saW5lIDxt
YXRoPiB3aWxsIGZpbGwgdGhlIHdob2xlIDxkaXY+IHZlcnRpY2FsbHkuICovCisgICAgICAgIGxp
bmUtaGVpZ2h0OiAwOworICAgICAgfQorICAgIDwvc3R5bGU+CisgIDwvaGVhZD4KKyAgPGJvZHkg
b25sb2FkPSJydW4oKSI+CisKKyAgICA8ZGl2IGlkPSJ0ZXN0LWFyZWEiPgorICAgICAgPHA+SW5s
aW5lIG1hdGggb2YgMTAwcHggY29udGVudCBpbiBhIDIwMHB4IGNvbnRhaW5lci4gVGhlIHRlc3Qg
cGFzc2VzIGlmIHRoZSBiYXIgaXMgdG8gdGhlIGxlZnQgb2YgdGhlIGNvbnRhaW5lci48L3A+Cisg
ICAgICA8ZGl2PgorICAgICAgICA8bWF0aCBpZD0iaW5saW5lLTEwMCIgeG1sbnM9Imh0dHA6Ly93
d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiPgorICAgICAgICAgIDxtc3BhY2Ugd2lkdGg9IjEw
MHB4IiBoZWlnaHQ9IjUwcHgiIHN0eWxlPSJiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8g
cmlnaHQsIHJlZCwgZ3JlZW4pIj48L21zcGFjZT4KKyAgICAgICAgPC9tYXRoPgorICAgICAgPC9k
aXY+CisKKyAgICAgIDxwPkRpc3BsYXkgbWF0aCBvZiAxMDBweCBjb250ZW50IGluIGEgMjAwcHgg
Y29udGFpbmVyLiBUaGUgdGVzdCBwYXNzZXMgaWYgdGhlIGJhciBpcyBpbiB0aGUgbWlkZGxlIG9m
IHRoZSBjb250YWluZXIuPC9wPgorICAgICAgPGRpdj4KKyAgICAgICAgPG1hdGggaWQ9ImRpc3Bs
YXktMTAwIiBkaXNwbGF5PSJibG9jayIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0
aC9NYXRoTUwiPgorICAgICAgICAgIDxtc3BhY2UgaWQ9InNwYWNlLTEwMCIgd2lkdGg9IjEwMHB4
IiBoZWlnaHQ9IjUwcHgiIHN0eWxlPSJiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gcmln
aHQsIHJlZCwgZ3JlZW4pIj48L21zcGFjZT4KKyAgICAgICAgPC9tYXRoPgorICAgICAgPC9kaXY+
CisKKyAgICAgIDxwPklubGluZSBtYXRoIG9mIDQwMHB4IGNvbnRlbnQgaW4gYSAyMDBweCBjb250
YWluZXIuIFRoZSB0ZXN0IHBhc3NlcyBpZiB0aGUgYmFyIGNhbiBiZSBzY3JvbGxlZCBob3Jpem9u
dGFsbHkgdG8gc2VlIHRoZSBmdWxsIGNvbnRlbnQuPC9wPgorICAgICAgPGRpdj4KKyAgICAgICAg
PG1hdGggaWQ9ImlubGluZS00MDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgv
TWF0aE1MIj4KKyAgICAgICAgICA8bXNwYWNlIHdpZHRoPSI0MDBweCIgaGVpZ2h0PSI1MHB4IiBz
dHlsZT0iYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZWQsIGdyZWVuKSI+
PC9tc3BhY2U+CisgICAgICAgIDwvbWF0aD4KKyAgICAgIDwvZGl2PgorCisgICAgICA8cD5EaXNw
bGF5IG1hdGggb2YgNDAwcHggY29udGVudCBpbiBhIDIwMHB4IGNvbnRhaW5lci4gVGhlIHRlc3Qg
cGFzc2VzIGlmIHRoZSBiYXIgYmVoYXZlcyBleGFjdGx5IHRoZSBzYW1lIGFzIHRoZSBwcmV2aW91
cyBvbmUuPC9wPgorICAgICAgPGRpdj4KKyAgICAgICAgPG1hdGggaWQ9ImRpc3BsYXktNDAwIiBk
aXNwbGF5PSJibG9jayIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwi
PgorICAgICAgICAgIDxtc3BhY2Ugd2lkdGg9IjQwMHB4IiBoZWlnaHQ9IjUwcHgiIHN0eWxlPSJi
YWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJlZCwgZ3JlZW4pIj48L21zcGFj
ZT4KKyAgICAgICAgPC9tYXRoPgorICAgICAgPC9kaXY+CisgICAgPC9kaXY+CisgIDwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkNTliNWFmZTYyZS4uOWM3NDEzODM0ODMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwyMCBAQAorMjAxOC0wMS0yOCAgTWluc2hlbmcgTGl1ICA8bGFtYmRhQGxp
dS5tcz4KKworICAgICAgICBPdmVyZmxvdyBvZiBmb3JtdWxhcyBpcyBoaWRkZW4gZm9yIGRpc3Bs
YXkgbWF0aGVtYXRpY3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2MDU0NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFByZXZpb3VzbHksIDxtYXRoPiB3aXRoIGRpc3BsYXk9ImJsb2NrIiB1c2VzIGl0cyBj
b250YWluZXIncyBsb2dpY2FsIHdpZHRoIGFzIGxvZ2ljYWwgd2lkdGguCisgICAgICAgIEhvd2V2
ZXIsIHRoYXQgYmVoYXZpb3Igd2lsbCB0cnVuY2F0ZSBvdmVyZmxvd2VkIGNvbnRlbnRzLiBUaGUg
cGF0Y2ggZml4ZXMgaXQgYnkgc2V0dGluZworICAgICAgICB0aGUgbG9naWNhbCB3aWR0aCBhcyBp
dHMgY29udGVudCB3aWR0aCByYXRoZXIgdGhhbiBpdHMgY29udGFpbmVyJ3MgbG9naWNhbCB3aWR0
aAorICAgICAgICBpZiB0aGUgZm9ybWVyIGlzIHdpZGVyIHRoYW4gdGhlIGxhdHRlci4KKworICAg
ICAgICBUZXN0OiBtYXRobWwvcHJlc2VudGF0aW9uL2Rpc3BsYXktbWF0aC1ob3Jpem9udGFsLW92
ZXJmbG93Lmh0bWwKKworICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm93
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTFJvdzo6bGF5b3V0QmxvY2spOgor
CiAyMDE4LTAxLTI2ICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0BhcHBsZS5jb20+CiAKICAgICAg
ICAgW1dlYiBBbmltYXRpb25zXSBEaXN0aW5ndWlzaCBiZXR3ZWVuIGFuIG9taXR0ZWQgYW5kIGEg
bnVsbCB0aW1lbGluZSBhcmd1bWVudCB0byB0aGUgQW5pbWF0aW9uIGNvbnN0cnVjdG9yCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE1hdGgu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxNYXRoLmNw
cAppbmRleCBmOGQ4ZmE3NjMyNC4uY2Q5ODIzNjQ0YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MTWF0aC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxNYXRoLmNwcApAQCAtNDMsNiArNDMs
NTMgQEAgUmVuZGVyTWF0aE1MTWF0aDo6UmVuZGVyTWF0aE1MTWF0aChNYXRoTUxSb3dFbGVtZW50
JiBlbGVtZW50LCBSZW5kZXJTdHlsZSYmIHN0eWwKIHsKIH0KIAordm9pZCBSZW5kZXJNYXRoTUxN
YXRoOjpjZW50ZXJDaGlsZHJlbihMYXlvdXRVbml0IGNvbnRlbnRXaWR0aCkKK3sKKyAgICBMYXlv
dXRVbml0IGNlbnRlckJsb2NrT2Zmc2V0ID0gKGxvZ2ljYWxXaWR0aCgpIC0gY29udGVudFdpZHRo
KSAvIDI7CisgICAgaWYgKCFzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKKyAgICAg
ICAgY2VudGVyQmxvY2tPZmZzZXQgPSAtY2VudGVyQmxvY2tPZmZzZXQ7CisgICAgZm9yIChhdXRv
KiBjaGlsZCA9IGZpcnN0Q2hpbGRCb3goKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJs
aW5nQm94KCkpIHsKKyAgICAgICAgaWYgKCFjaGlsZC0+aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkp
CisgICAgICAgICAgICBjaGlsZC0+c2V0TG9jYXRpb24oY2hpbGQtPmxvY2F0aW9uKCkgKyBMYXlv
dXRQb2ludChjZW50ZXJCbG9ja09mZnNldCwgMCkpOworICAgIH0KK30KKwordm9pZCBSZW5kZXJN
YXRoTUxNYXRoOjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQg
cGFnZUxvZ2ljYWxIZWlnaHQpCit7CisgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOworCisgICAg
aWYgKHN0eWxlKCkuZGlzcGxheSgpICE9IEJMT0NLKSB7CisgICAgICAgIFJlbmRlck1hdGhNTFJv
dzo6bGF5b3V0QmxvY2socmVsYXlvdXRDaGlsZHJlbiwgcGFnZUxvZ2ljYWxIZWlnaHQpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFyZWxheW91dENoaWxkcmVuICYmIHNpbXBs
aWZpZWRMYXlvdXQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVjb21wdXRlTG9naWNhbFdp
ZHRoKCk7CisKKyAgICBzZXRMb2dpY2FsSGVpZ2h0KGJvcmRlckFuZFBhZGRpbmdMb2dpY2FsSGVp
Z2h0KCkgKyBzY3JvbGxiYXJMb2dpY2FsSGVpZ2h0KCkpOworCisgICAgTGF5b3V0VW5pdCB3aWR0
aCwgYXNjZW50LCBkZXNjZW50OworICAgIHN0cmV0Y2hWZXJ0aWNhbE9wZXJhdG9yc0FuZExheW91
dENoaWxkcmVuKCk7CisgICAgZ2V0Q29udGVudEJvdW5kaW5nQm94KHdpZHRoLCBhc2NlbnQsIGRl
c2NlbnQpOworICAgIGxheW91dFJvd0l0ZW1zKGxvZ2ljYWxXaWR0aCgpLCBhc2NlbnQpOworCisg
ICAgLy8gRGlzcGxheSBmb3JtdWxhcyBtdXN0IGJlIGNlbnRlcmVkIGhvcml6b250YWxseSBpZiB0
aGVyZSBpcyBleHRyYSBzcGFjZSBsZWZ0LgorICAgIC8vIE90aGVyd2lzZSwgbG9naWNhbCB3aWR0
aCBtdXN0IGJlIHVwZGF0ZWQgdG8gdGhlIGNvbnRlbnQgd2lkdGggdG8gYXZvaWQgdHJ1bmNhdGlv
bi4KKyAgICBpZiAod2lkdGggPCBsb2dpY2FsV2lkdGgoKSkKKyAgICAgICAgY2VudGVyQ2hpbGRy
ZW4od2lkdGgpOworICAgIGVsc2UKKyAgICAgICAgc2V0TG9naWNhbFdpZHRoKHdpZHRoKTsKKwor
ICAgIHNldExvZ2ljYWxIZWlnaHQoYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCkgKyBhc2NlbnQg
KyBkZXNjZW50ICsgYm9yZGVyQm90dG9tKCkgKyBwYWRkaW5nQm90dG9tKCkgKyBob3Jpem9udGFs
U2Nyb2xsYmFySGVpZ2h0KCkpOworICAgIHVwZGF0ZUxvZ2ljYWxIZWlnaHQoKTsKKworICAgIGxh
eW91dFBvc2l0aW9uZWRPYmplY3RzKHJlbGF5b3V0Q2hpbGRyZW4pOworCisgICAgY2xlYXJOZWVk
c0xheW91dCgpOworfQorCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoTUFUSE1MKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxNYXRoLmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE1hdGguaAppbmRleCA4
ZWNlNTExNzA4MS4uNjA4NGJjZTJmMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9tYXRobWwvUmVuZGVyTWF0aE1MTWF0aC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9tYXRobWwvUmVuZGVyTWF0aE1MTWF0aC5oCkBAIC00MSw2ICs0MSw5IEBAIHB1YmxpYzoK
IHByaXZhdGU6CiAgICAgYm9vbCBpc1JlbmRlck1hdGhNTE1hdGgoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiB0cnVlOyB9CiAgICAgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuICJSZW5kZXJNYXRoTUxNYXRoIjsgfQorCisgICAgdm9pZCBjZW50ZXJDaGlsZHJlbihM
YXlvdXRVbml0IGNvbnRlbnRXaWR0aCk7CisgICAgdm9pZCBsYXlvdXRCbG9jayhib29sIHJlbGF5
b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQgPSAwKSBmaW5hbDsKIH07
CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVy
TWF0aE1MUm93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0
aE1MUm93LmNwcAppbmRleCBiMzNmZDJjYWUxNS4uMDUwNWVmMGFlZTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm93LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvdy5jcHAKQEAgLTE3
MSwyMiArMTcxLDggQEAgdm9pZCBSZW5kZXJNYXRoTUxSb3c6OmxheW91dEJsb2NrKGJvb2wgcmVs
YXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCkKICAgICBMYXlvdXRVbml0IHdpZHRoLCBhc2NlbnQs
IGRlc2NlbnQ7CiAgICAgc3RyZXRjaFZlcnRpY2FsT3BlcmF0b3JzQW5kTGF5b3V0Q2hpbGRyZW4o
KTsKICAgICBnZXRDb250ZW50Qm91bmRpbmdCb3god2lkdGgsIGFzY2VudCwgZGVzY2VudCk7Ci0K
LSAgICBpZiAoaXNSZW5kZXJNYXRoTUxNYXRoKCkgJiYgc3R5bGUoKS5kaXNwbGF5KCkgPT0gQkxP
Q0spIHsKLSAgICAgICAgLy8gRGlzcGxheSBmb3JtdWxhcyBtdXN0IGJlIGNlbnRlcmVkIGhvcml6
b250YWxseS4KLSAgICAgICAgbGF5b3V0Um93SXRlbXMobG9naWNhbFdpZHRoKCksIGFzY2VudCk7
Ci0gICAgICAgIExheW91dFVuaXQgY2VudGVyQmxvY2tPZmZzZXQgPSBzdGQ6Om1heDxMYXlvdXRV
bml0PigwLCBsb2dpY2FsV2lkdGgoKSAtIHdpZHRoKSAvIDI7Ci0gICAgICAgIGlmICghc3R5bGUo
KS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCi0gICAgICAgICAgICBjZW50ZXJCbG9ja09mZnNl
dCA9IC1jZW50ZXJCbG9ja09mZnNldDsKLSAgICAgICAgZm9yIChhdXRvKiBjaGlsZCA9IGZpcnN0
Q2hpbGRCb3goKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nQm94KCkpIHsKLSAg
ICAgICAgICAgIGlmICghY2hpbGQtPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKQotICAgICAgICAg
ICAgICAgIGNoaWxkLT5zZXRMb2NhdGlvbihjaGlsZC0+bG9jYXRpb24oKSArIExheW91dFBvaW50
KGNlbnRlckJsb2NrT2Zmc2V0LCAwKSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAg
ICBsYXlvdXRSb3dJdGVtcyh3aWR0aCwgYXNjZW50KTsKLSAgICAgICAgc2V0TG9naWNhbFdpZHRo
KHdpZHRoKTsKLSAgICB9Ci0KKyAgICBsYXlvdXRSb3dJdGVtcyh3aWR0aCwgYXNjZW50KTsKKyAg
ICBzZXRMb2dpY2FsV2lkdGgod2lkdGgpOwogICAgIHNldExvZ2ljYWxIZWlnaHQoYm9yZGVyVG9w
KCkgKyBwYWRkaW5nVG9wKCkgKyBhc2NlbnQgKyBkZXNjZW50ICsgYm9yZGVyQm90dG9tKCkgKyBw
YWRkaW5nQm90dG9tKCkgKyBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkpOwogICAgIHVwZGF0
ZUxvZ2ljYWxIZWlnaHQoKTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>