<?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>143554</bug_id>
          
          <creation_ts>2015-04-08 20:46:35 -0700</creation_ts>
          <short_desc>Simple line layout(regression): Calling innerText on RenderFlow with multiple children is slow.</short_desc>
          <delta_ts>2015-04-10 06:44:53 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>koivisto</cc>
    
    <cc>ossy</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1083843</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2015-04-08 20:46:35 -0700</bug_when>
    <thetext>We reinitialize segment iterator for the same content each time TextIterator iterates through the text nodes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083853</commentid>
    <comment_count>1</comment_count>
      <attachid>250413</attachid>
    <who name="alan">zalan</who>
    <bug_when>2015-04-08 21:20:16 -0700</bug_when>
    <thetext>Created attachment 250413
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083958</commentid>
    <comment_count>2</comment_count>
      <attachid>250413</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-04-09 08:05:07 -0700</bug_when>
    <thetext>Comment on attachment 250413
Patch

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

&gt; Source/WebCore/editing/TextIterator.cpp:558
&gt; +            if (previousRenderer.parent() != &amp;blockFlow) {
&gt; +                m_runResolver = adoptPtr(new SimpleLineLayout::RunResolver(blockFlow, *layout));

Wouldn&apos;t it be clearer to initialise the cache when entering a flow with simple line layout (and clear when leaving it)? Now we leave an unneeded RunResolver behind (not much of a practical problem I suppose).

&gt; Source/WebCore/editing/TextIterator.cpp:564
&gt; +        if (!m_runResolver)
&gt; +            m_runResolver = adoptPtr(new SimpleLineLayout::RunResolver(blockFlow, *layout));

Why do we need two separate places to initialize this?

How about

if (!m_runResolver || !&amp;m_runResolver-&gt;flow() != &amp;blockFlow)

(or the suggestion above).

&gt; Source/WebCore/editing/TextIterator.h:172
&gt; +    OwnPtr&lt;SimpleLineLayout::RunResolver&gt; m_runResolver;

OwnPtr is dead. Please use std::unique_ptr instead.

This could be called something more informative, m_flowRunResolverCache or similar.

&gt; Source/WebCore/rendering/SimpleLineLayoutFlowContents.cpp:43
&gt; +    for (const auto&amp; child : childrenOfType&lt;RenderText&gt;(flow)) {
&gt; +        ASSERT_UNUSED(child, &amp;child);
&gt; +        ++numberOfChildren;
&gt; +    }

The assert doesn&apos;t really add any value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083959</commentid>
    <comment_count>3</comment_count>
      <attachid>250413</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-04-09 08:07:13 -0700</bug_when>
    <thetext>Comment on attachment 250413
Patch

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

&gt;&gt; Source/WebCore/editing/TextIterator.cpp:558
&gt;&gt; +                m_runResolver = adoptPtr(new SimpleLineLayout::RunResolver(blockFlow, *layout));
&gt; 
&gt; Wouldn&apos;t it be clearer to initialise the cache when entering a flow with simple line layout (and clear when leaving it)? Now we leave an unneeded RunResolver behind (not much of a practical problem I suppose).

std::make_unique&lt;SimpleLineLayout::RunResolver&gt;(blockFlow, *layout);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083962</commentid>
    <comment_count>4</comment_count>
      <attachid>250413</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-04-09 08:26:32 -0700</bug_when>
    <thetext>Comment on attachment 250413
Patch

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

&gt; PerformanceTests/ChangeLog:11
&gt; +        * Layout/simple-line-layout-innertext.html: Added.

For clear O(n^2) bugs like this it might be better to make a magnitude test (LayoutTests/perf/).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083991</commentid>
    <comment_count>5</comment_count>
      <attachid>250445</attachid>
    <who name="alan">zalan</who>
    <bug_when>2015-04-09 10:33:33 -0700</bug_when>
    <thetext>Created attachment 250445
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083994</commentid>
    <comment_count>6</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2015-04-09 10:40:28 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 250413 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=250413&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/editing/TextIterator.cpp:558
&gt; &gt; +            if (previousRenderer.parent() != &amp;blockFlow) {
&gt; &gt; +                m_runResolver = adoptPtr(new SimpleLineLayout::RunResolver(blockFlow, *layout));
&gt; 
&gt; Wouldn&apos;t it be clearer to initialise the cache when entering a flow with
&gt; simple line layout (and clear when leaving it)? Now we leave an unneeded
&gt; RunResolver behind (not much of a practical problem I suppose).
&gt; 
&gt; &gt; Source/WebCore/editing/TextIterator.cpp:564
&gt; &gt; +        if (!m_runResolver)
&gt; &gt; +            m_runResolver = adoptPtr(new SimpleLineLayout::RunResolver(blockFlow, *layout));
&gt; 
&gt; Why do we need two separate places to initialize this?
&gt; 
&gt; How about
&gt; 
&gt; if (!m_runResolver || !&amp;m_runResolver-&gt;flow() != &amp;blockFlow)
&gt; 
Fixed.

&gt; (or the suggestion above).
&gt; 
&gt; &gt; Source/WebCore/editing/TextIterator.h:172
&gt; &gt; +    OwnPtr&lt;SimpleLineLayout::RunResolver&gt; m_runResolver;
&gt; 
&gt; OwnPtr is dead. Please use std::unique_ptr instead.
Fixed.

&gt; 
&gt; This could be called something more informative, m_flowRunResolverCache or
&gt; similar.
Fixed.

&gt; 
&gt; &gt; Source/WebCore/rendering/SimpleLineLayoutFlowContents.cpp:43
&gt; &gt; +    for (const auto&amp; child : childrenOfType&lt;RenderText&gt;(flow)) {
&gt; &gt; +        ASSERT_UNUSED(child, &amp;child);
&gt; &gt; +        ++numberOfChildren;
&gt; &gt; +    }
&gt; 
&gt; The assert doesn&apos;t really add any value.
Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084013</commentid>
    <comment_count>7</comment_count>
      <attachid>250445</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-09 11:58:29 -0700</bug_when>
    <thetext>Comment on attachment 250445
Patch

Clearing flags on attachment: 250445

Committed r182604: &lt;http://trac.webkit.org/changeset/182604&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084014</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-09 11:58:34 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084250</commentid>
    <comment_count>9</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-04-10 02:09:08 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Comment on attachment 250445 [details]
&gt; Patch
&gt; 
&gt; Clearing flags on attachment: 250445
&gt; 
&gt; Committed r182604: &lt;http://trac.webkit.org/changeset/182604&gt;

The new test fails on the performance bots:

Running Layout/simple-line-layout-innertext.html (110 of 138)
ERROR: foobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobar
FAILED
Finished: 7.527268 s</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084290</commentid>
    <comment_count>10</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2015-04-10 06:31:39 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #7)
&gt; &gt; Comment on attachment 250445 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; Clearing flags on attachment: 250445
&gt; &gt; 
&gt; &gt; Committed r182604: &lt;http://trac.webkit.org/changeset/182604&gt;
&gt; 
&gt; The new test fails on the performance bots:
&gt; 
&gt; Running Layout/simple-line-layout-innertext.html (110 of 138)
&gt; ERROR:
&gt; foobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfooba
&gt; rfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoob
&gt; arfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo
&gt; barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfo
&gt; obarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarf
&gt; oobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobar
&gt; foobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfooba
&gt; rfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoob
&gt; arfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo
&gt; barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfo
&gt; obarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarf
&gt; oobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobar
&gt; foobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfooba
&gt; rfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoob
&gt; arfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo
&gt; barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfo
&gt; obarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarf
&gt; oobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobar
&gt; foobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfooba
&gt; rfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoob
&gt; arfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo
&gt; barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfo
&gt; obarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarf
&gt; oobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobar
&gt; foobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfooba
&gt; rfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoob
&gt; arfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo
&gt; barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfo
&gt; obarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarf
&gt; oobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobar
&gt; foobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfooba
&gt; rfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoob
&gt; arfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoo
&gt; barfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfo
&gt; obarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarf
&gt; oobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobar
&gt; foobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfooba
&gt; rfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoob
&gt; arfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobar
&gt; FAILED
&gt; Finished: 7.527268 s
Thanks, I&apos;ll talk to Ryosuke about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084291</commentid>
    <comment_count>11</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-04-10 06:33:17 -0700</bug_when>
    <thetext>AFAIK the problem is that a performance test isn&apos;t allowed to produce any output.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084293</commentid>
    <comment_count>12</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2015-04-10 06:44:53 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; AFAIK the problem is that a performance test isn&apos;t allowed to produce any
&gt; output.
Yea, that&apos;s an odd limitation. -and that&apos;s what I was planning to discuss with Ryosuke.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250413</attachid>
            <date>2015-04-08 21:20:16 -0700</date>
            <delta_ts>2015-04-09 10:33:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143554-20150408211925.patch</filename>
            <type>text/plain</type>
            <size>7215</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyNTcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDdkMTA0NGJjMGE0YzRh
MGIzYjRjNzk4OTAwMDMxZGVjNTMxNGMyNi4uZDliMmNhNGZjMDc3NzdiYmFjOTUzNjY2MzEwYmQ4
YWMyZjc5ZGYzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE1LTA0LTA4ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2ltcGxlIGxpbmUgbGF5b3V0
KHJlZ3Jlc3Npb24pOiBDYWxsaW5nIGlubmVyVGV4dCBvbiBSZW5kZXJGbG93IHdpdGggbXVsdGlw
bGUgY2hpbGRyZW4gaXMgc2xvdy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE0MzU1NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEluaXRpYWxpemUgcmVuZGVyIGZsb3cncyBzZWdtZW50cyBvbmx5IHdoZW4g
dGhlIHJlbmRlciBmbG93IGNoYW5nZXMgaW4gVGV4dEl0ZXJhdG9yLgorICAgICAgICBUaGUgaW5j
bHVkZWQgcGVyZm9ybWFuY2UgdGVzdCBzaG93cyA2eCBzcGVlZHVwLiAoZnJvbSB+MTAgcnVucy9z
ZWMgdG8gfjYwIHJ1bnMvc2VjKQorCisgICAgICAgIFRlc3Q6IFBlcmZvcm1hbmNlVGVzdHMvTGF5
b3V0L3NpbXBsZS1saW5lLWxheW91dC1pbm5lcnRleHQuaHRtbC4KKworICAgICAgICAqIGVkaXRp
bmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJdGVyYXRvcjo6aGFu
ZGxlVGV4dE5vZGUpOgorICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmg6CisgICAgICAg
ICogcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuY3BwOiBJbnN0cnVtZW50
cyBsb2cgc2hvd3MgdGhhdCB2ZWN0b3IncyBleHBhbmRDYXBhY2l0eSBjb3VsZCBiZSBleHBlbnNp
dmUgd2hlbiBmbG93IGhhcyBsYXJnZSBhbW91bnQgb2YgY2hpbGRyZW4uCisgICAgICAgIChXZWJD
b3JlOjpTaW1wbGVMaW5lTGF5b3V0Ojppbml0aWFsaXplU2VnbWVudHMpOgorCiAyMDE1LTA0LTA4
ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3Zl
IEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6bV9pc0NvcHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4
dEl0ZXJhdG9yLmNwcAppbmRleCBiNmFjMDc5ZDNlNDZmYmQyOTdjMDBlN2VlZGFjMDUwMzlhYjY4
ZjQ0Li42NDAzZGY0NzFkYTA3MjJhY2Q2MmIxNjczZWM0MjhlNmUxZWJjZjUzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCkBAIC01NDksMTkgKzU0OSwyMSBAQCBib29s
IFRleHRJdGVyYXRvcjo6aGFuZGxlVGV4dE5vZGUoKQogICAgICAgICAvLyBVc2UgdGhlIHNpbXBs
ZSBsYXlvdXQgcnVucyB0byBpdGVyYXRlIG92ZXIgdGhlIHRleHQgY29udGVudC4KICAgICAgICAg
QVNTRVJUKHJlbmRlcmVyLnBhcmVudCgpICYmIGlzPFJlbmRlckJsb2NrRmxvdz4ocmVuZGVyZXIu
cGFyZW50KCkpKTsKICAgICAgICAgY29uc3QgYXV0byYgYmxvY2tGbG93ID0gZG93bmNhc3Q8UmVu
ZGVyQmxvY2tGbG93PigqcmVuZGVyZXIucGFyZW50KCkpOwotICAgICAgICBTaW1wbGVMaW5lTGF5
b3V0OjpSdW5SZXNvbHZlciBydW5SZXNvbHZlcihibG9ja0Zsb3csICpsYXlvdXQpOwotICAgICAg
ICBhdXRvIHJhbmdlID0gcnVuUmVzb2x2ZXIucmFuZ2VGb3JSZW5kZXJlcihyZW5kZXJlcik7CiAg
ICAgICAgIHVuc2lnbmVkIGVuZFBvc2l0aW9uID0gKG1fbm9kZSA9PSBtX2VuZENvbnRhaW5lcikg
PyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9lbmRPZmZzZXQpIDogcmVuZGVyZXJUZXh0Lmxlbmd0
aCgpOwogICAgICAgICAvLyBTaW1wbGUgbGluZSBsYXlvdXQgcnVuIHBvc2l0aW9ucyBhcmUgYWxs
IGFic29sdXRlIHRvIHRoZSBwYXJlbnQgZmxvdy4KICAgICAgICAgLy8gT2Zmc2V0dGluZyBpcyBy
ZXF1aXJlZCB3aGVuIG11bHRpcGxlIHJlbmRlcmVycyBhcmUgcHJlc2VudC4KICAgICAgICAgaWYg
KHByZXZpb3VzVGV4dE5vZGUgJiYgcHJldmlvdXNUZXh0Tm9kZSAhPSAmdGV4dE5vZGUpIHsKICAg
ICAgICAgICAgIGNvbnN0IFJlbmRlck9iamVjdCYgcHJldmlvdXNSZW5kZXJlciA9ICpwcmV2aW91
c1RleHROb2RlLT5yZW5kZXJlcigpOwotICAgICAgICAgICAgaWYgKHByZXZpb3VzUmVuZGVyZXIu
cGFyZW50KCkgIT0gJmJsb2NrRmxvdykKKyAgICAgICAgICAgIGlmIChwcmV2aW91c1JlbmRlcmVy
LnBhcmVudCgpICE9ICZibG9ja0Zsb3cpIHsKKyAgICAgICAgICAgICAgICBtX3J1blJlc29sdmVy
ID0gYWRvcHRQdHIobmV3IFNpbXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVyKGJsb2NrRmxvdywg
KmxheW91dCkpOwogICAgICAgICAgICAgICAgIG1fcHJldmlvdXNUZXh0TGVuZ3RoSW5GbG93ID0g
MDsKLSAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAg
IG1fcHJldmlvdXNUZXh0TGVuZ3RoSW5GbG93ICs9IHByZXZpb3VzVGV4dE5vZGUtPnJlbmRlcmVy
KCktPnRleHQoKS0+bGVuZ3RoKCk7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKCFtX3J1blJlc29s
dmVyKQorICAgICAgICAgICAgbV9ydW5SZXNvbHZlciA9IGFkb3B0UHRyKG5ldyBTaW1wbGVMaW5l
TGF5b3V0OjpSdW5SZXNvbHZlcihibG9ja0Zsb3csICpsYXlvdXQpKTsKICAgICAgICAgLy8gU2tp
cCB0byBtX29mZnNldCBwb3NpdGlvbi4KKyAgICAgICAgYXV0byByYW5nZSA9IG1fcnVuUmVzb2x2
ZXItPnJhbmdlRm9yUmVuZGVyZXIocmVuZGVyZXIpOwogICAgICAgICBhdXRvIGl0ID0gcmFuZ2Uu
YmVnaW4oKTsKICAgICAgICAgYXV0byBlbmQgPSByYW5nZS5lbmQoKTsKICAgICAgICAgd2hpbGUg
KGl0ICE9IGVuZCAmJiAoKml0KS5lbmQoKSA8PSAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fb2Zm
c2V0KSArIG1fcHJldmlvdXNUZXh0TGVuZ3RoSW5GbG93KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Rl
eHRJdGVyYXRvci5oCmluZGV4IDYzY2YzZDU2Y2ViYzEyZjlkYmViM2QzNThmZDNkZjY0YmZkNzY1
YzMuLjcyMjkxZjQ4ZDAyOWZiZGRlMjFlNWFmM2Q5ZGVhOWUzZTg3NDNkNDYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuaApAQCAtMzksNiArMzksOSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBjbGFzcyBJbmxpbmVUZXh0Qm94OwogY2xhc3MgUmVuZGVyVGV4dDsKIGNsYXNzIFJl
bmRlclRleHRGcmFnbWVudDsKK25hbWVzcGFjZSBTaW1wbGVMaW5lTGF5b3V0IHsKK2NsYXNzIFJ1
blJlc29sdmVyOworfQogCiBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgcGxhaW5UZXh0KGNvbnN0IFJh
bmdlKiwgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgPSBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3Is
IGJvb2wgaXNEaXNwbGF5U3RyaW5nID0gZmFsc2UpOwogV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHBs
YWluVGV4dFJlcGxhY2luZ05vQnJlYWtTcGFjZShjb25zdCBSYW5nZSosIFRleHRJdGVyYXRvckJl
aGF2aW9yID0gVGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yLCBib29sIGlzRGlzcGxheVN0cmlu
ZyA9IGZhbHNlKTsKQEAgLTE2Niw2ICsxNjksOCBAQCBwcml2YXRlOgogICAgIC8vIFVzZWQgdG8g
ZG8gc2ltcGxlIGxpbmUgbGF5b3V0IHJ1biBsb2dpYy4KICAgICBib29sIG1fbmV4dFJ1bk5lZWRz
V2hpdGVzcGFjZSB7IGZhbHNlIH07CiAgICAgdW5zaWduZWQgbV9wcmV2aW91c1RleHRMZW5ndGhJ
bkZsb3cgeyAwIH07CisgICAgT3duUHRyPFNpbXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVyPiBt
X3J1blJlc29sdmVyOworCiAgICAgLy8gVXNlZCB3aGVuIHRleHQgYm94ZXMgYXJlIG91dCBvZiBv
cmRlciAoSGVicmV3L0FyYWJpYyB3aXRoIGVtYmVkZGVkIExUUiB0ZXh0KQogICAgIFZlY3RvcjxJ
bmxpbmVUZXh0Qm94Kj4gbV9zb3J0ZWRUZXh0Qm94ZXM7CiAgICAgc2l6ZV90IG1fc29ydGVkVGV4
dEJveGVzUG9zaXRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2lt
cGxlTGluZUxheW91dEZsb3dDb250ZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
U2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5jcHAKaW5kZXggMTZjYjA5ZTg5NDkxZTMxMDdk
MTBhMTkxZWNmZGUzMzgzNmI4OWMxYi4uMjI4M2E3ODUwOTQxMmE2Nzg0YjRmMDg4ZWRhYmJlM2E5
MDVkNjI0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVM
YXlvdXRGbG93Q29udGVudHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1w
bGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmNwcApAQCAtMzUsNyArMzUsMTQgQEAgbmFtZXNwYWNl
IFNpbXBsZUxpbmVMYXlvdXQgewogCiBzdGF0aWMgVmVjdG9yPEZsb3dDb250ZW50czo6U2VnbWVu
dD4gaW5pdGlhbGl6ZVNlZ21lbnRzKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdykKIHsKLSAg
ICBWZWN0b3I8Rmxvd0NvbnRlbnRzOjpTZWdtZW50LCA4PiBzZWdtZW50czsKKworICAgIHVuc2ln
bmVkIG51bWJlck9mQ2hpbGRyZW4gPSAwOworICAgIGZvciAoY29uc3QgYXV0byYgY2hpbGQgOiBj
aGlsZHJlbk9mVHlwZTxSZW5kZXJUZXh0PihmbG93KSkgeworICAgICAgICBBU1NFUlRfVU5VU0VE
KGNoaWxkLCAmY2hpbGQpOworICAgICAgICArK251bWJlck9mQ2hpbGRyZW47CisgICAgfQorICAg
IFZlY3RvcjxGbG93Q29udGVudHM6OlNlZ21lbnQ+IHNlZ21lbnRzOworICAgIHNlZ21lbnRzLnJl
c2VydmVDYXBhY2l0eShudW1iZXJPZkNoaWxkcmVuKTsKICAgICB1bnNpZ25lZCBzdGFydFBvc2l0
aW9uID0gMDsKICAgICBmb3IgKGF1dG8mIHRleHRDaGlsZCA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRl
clRleHQ+KGZsb3cpKSB7CiAgICAgICAgIHVuc2lnbmVkIHRleHRMZW5ndGggPSB0ZXh0Q2hpbGQu
dGV4dCgpLT5sZW5ndGgoKTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9n
IGIvUGVyZm9ybWFuY2VUZXN0cy9DaGFuZ2VMb2cKaW5kZXggODYxNWRkNDI4ZTdjNzhlMGY5Mjhl
YTc0OGNmNTVjNzk5Y2QxYmFhNy4uMThiOTNmNzZhMDg2YTY4NDZkZGQ3NzFiMzhhOWEyMWFiODNm
MWZkZCAxMDA2NDQKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9DaGFuZ2VMb2cKKysrIGIvUGVyZm9y
bWFuY2VUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxNS0wNC0wOCAgWmFsYW4g
QnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgorCisgICAgICAgIFNpbXBsZSBsaW5lIGxheW91dChy
ZWdyZXNzaW9uKTogQ2FsbGluZyBpbm5lclRleHQgb24gUmVuZGVyRmxvdyB3aXRoIG11bHRpcGxl
IGNoaWxkcmVuIGlzIHNsb3cuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNDM1NTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBJbml0aWFsaXplIHJlbmRlciBmbG93J3Mgc2VnbWVudHMgb25seSB3aGVuIHRo
ZSByZW5kZXIgZmxvdyBjaGFuZ2VzIGluIFRleHRJdGVyYXRvci4KKyAgICAgICAgVGhlIGluY2x1
ZGVkIHBlcmZvcm1hbmNlIHRlc3Qgc2hvd3MgNnggc3BlZWR1cC4gKGZyb20gfjEwIHJ1bnMvc2Vj
IHRvIH42MCBydW5zL3NlYykKKworICAgICAgICAqIExheW91dC9zaW1wbGUtbGluZS1sYXlvdXQt
aW5uZXJ0ZXh0Lmh0bWw6IEFkZGVkLgorCiAyMDE1LTAzLTA5ICBDaHJpcyBEdW1leiAgPGNkdW1l
ekBhcHBsZS5jb20+CiAKICAgICAgICAgW0NHXSBIYXZlIENhbnZhcyB1c2UgdGhlIElPU3VyZmFj
ZVBvb2wKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvTGF5b3V0L3NpbXBsZS1saW5lLWxh
eW91dC1pbm5lcnRleHQuaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvTGF5b3V0L3NpbXBsZS1saW5l
LWxheW91dC1pbm5lcnRleHQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNmE3NGViNzgyZTNkNzA4MmI5MzZk
YWUyNDBmOGYzMjI1YzEzOGUyCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9M
YXlvdXQvc2ltcGxlLWxpbmUtbGF5b3V0LWlubmVydGV4dC5odG1sCkBAIC0wLDAgKzEsMjUgQEAK
KzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8dGl0bGU+aW5uZXJUZXh0IHBl
cmZvcm1hbmNlIHRlc3Qgd2l0aCBzaW1wbGUgbGluZSBsYXlvdXQuPC90aXRsZT4KKyAgICA8c2Ny
aXB0IHNyYz0iLi4vcmVzb3VyY2VzL3J1bm5lci5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKyAgICA8cHJlIGlkPSJsb2ciPjwvcHJlPgorICAgIDxkaXYgaWQ9InRhcmdldCIgc3R5bGU9
IndpZHRoOiAzMDBweDsiPjwvZGl2PgorICAgIDxkaXYgaWQ9InJlc3VsdCI+PC9kaXY+CisgICAg
PHNjcmlwdD4KKyAgICAgICAgdmFyIHRhcmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0
YXJnZXQiKTsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJy
ZXN1bHQiKTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDUwMDsgKytpKQorICAgICAgICAgICAg
dGFyZ2V0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJmb29iYXIiKSk7CisK
KyAgICAgICAgZnVuY3Rpb24gdGVzdCgpIHsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAx
MDsgKytpKQorICAgICAgICAgICAgICAgIHJlc3VsdC5pbm5lclRleHQgKz0gdGFyZ2V0LmlubmVy
VGV4dDsKKyAgICAgICAgICAgIHJlc3VsdC5pbm5lclRleHQgPSAiIjsKKyAgICAgICAgfQorICAg
ICAgICBQZXJmVGVzdFJ1bm5lci5tZWFzdXJlUnVuc1BlclNlY29uZCh7IHJ1bjogdGVzdCB9KTsK
KyAgICA8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250445</attachid>
            <date>2015-04-09 10:33:33 -0700</date>
            <delta_ts>2015-04-09 11:58:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143554-20150409103241.patch</filename>
            <type>text/plain</type>
            <size>9176</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyNTcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDdkMTA0NGJjMGE0YzRh
MGIzYjRjNzk4OTAwMDMxZGVjNTMxNGMyNi4uMjQ0NDlhZWVmMzc5OWMwZGU4ZDUzODc4ZDZjNDAx
OTc0YTY0YWE3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE1LTA0LTA4ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2ltcGxlIGxpbmUgbGF5b3V0
KHJlZ3Jlc3Npb24pOiBDYWxsaW5nIGlubmVyVGV4dCBvbiBSZW5kZXJGbG93IHdpdGggbXVsdGlw
bGUgY2hpbGRyZW4gaXMgc2xvdy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE0MzU1NAorCisgICAgICAgIFJldmlld2VkIGJ5IEFudHRpIEtvaXZpc3Rv
LgorCisgICAgICAgIEluaXRpYWxpemUgcmVuZGVyIGZsb3cncyBzZWdtZW50cyBvbmx5IHdoZW4g
dGhlIHJlbmRlciBmbG93IGNoYW5nZXMgaW4gVGV4dEl0ZXJhdG9yLgorICAgICAgICBUaGUgaW5j
bHVkZWQgcGVyZm9ybWFuY2UgdGVzdCBzaG93cyA2eCBzcGVlZHVwLiAoZnJvbSB+MTAgcnVucy9z
ZWMgdG8gfjYwIHJ1bnMvc2VjKQorCisgICAgICAgIFRlc3Q6IFBlcmZvcm1hbmNlVGVzdHMvTGF5
b3V0L3NpbXBsZS1saW5lLWxheW91dC1pbm5lcnRleHQuaHRtbC4KKworICAgICAgICAqIGVkaXRp
bmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJdGVyYXRvcjo6aGFu
ZGxlVGV4dE5vZGUpOgorICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmg6CisgICAgICAg
ICogcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuY3BwOiBJbnN0cnVtZW50
cyBsb2cgc2hvd3MgdGhhdCB2ZWN0b3IncyBleHBhbmRDYXBhY2l0eSBjb3VsZCBiZSBleHBlbnNp
dmUgd2hlbiBmbG93IGhhcyBsYXJnZSBhbW91bnQgb2YgY2hpbGRyZW4uCisgICAgICAgIChXZWJD
b3JlOjpTaW1wbGVMaW5lTGF5b3V0Ojppbml0aWFsaXplU2VnbWVudHMpOgorCiAyMDE1LTA0LTA4
ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3Zl
IEFwcGxpY2F0aW9uQ2FjaGVHcm91cDo6bV9pc0NvcHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4
dEl0ZXJhdG9yLmNwcAppbmRleCBiNmFjMDc5ZDNlNDZmYmQyOTdjMDBlN2VlZGFjMDUwMzlhYjY4
ZjQ0Li5iMTVkNWFkZTcwNjY0ZjFkYmE3OWI0OWQ2NmFhMWRmZGE0NjJiMWE5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCkBAIC01NDgsMjAgKzU0OCwxOCBAQCBib29s
IFRleHRJdGVyYXRvcjo6aGFuZGxlVGV4dE5vZGUoKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIC8vIFVzZSB0aGUgc2ltcGxlIGxheW91dCBydW5zIHRvIGl0ZXJhdGUgb3ZlciB0
aGUgdGV4dCBjb250ZW50LgogICAgICAgICBBU1NFUlQocmVuZGVyZXIucGFyZW50KCkgJiYgaXM8
UmVuZGVyQmxvY2tGbG93PihyZW5kZXJlci5wYXJlbnQoKSkpOwotICAgICAgICBjb25zdCBhdXRv
JiBibG9ja0Zsb3cgPSBkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCpyZW5kZXJlci5wYXJlbnQo
KSk7Ci0gICAgICAgIFNpbXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVyIHJ1blJlc29sdmVyKGJs
b2NrRmxvdywgKmxheW91dCk7Ci0gICAgICAgIGF1dG8gcmFuZ2UgPSBydW5SZXNvbHZlci5yYW5n
ZUZvclJlbmRlcmVyKHJlbmRlcmVyKTsKICAgICAgICAgdW5zaWduZWQgZW5kUG9zaXRpb24gPSAo
bV9ub2RlID09IG1fZW5kQ29udGFpbmVyKSA/IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2VuZE9m
ZnNldCkgOiByZW5kZXJlclRleHQubGVuZ3RoKCk7Ci0gICAgICAgIC8vIFNpbXBsZSBsaW5lIGxh
eW91dCBydW4gcG9zaXRpb25zIGFyZSBhbGwgYWJzb2x1dGUgdG8gdGhlIHBhcmVudCBmbG93Lgot
ICAgICAgICAvLyBPZmZzZXR0aW5nIGlzIHJlcXVpcmVkIHdoZW4gbXVsdGlwbGUgcmVuZGVyZXJz
IGFyZSBwcmVzZW50LgotICAgICAgICBpZiAocHJldmlvdXNUZXh0Tm9kZSAmJiBwcmV2aW91c1Rl
eHROb2RlICE9ICZ0ZXh0Tm9kZSkgewotICAgICAgICAgICAgY29uc3QgUmVuZGVyT2JqZWN0JiBw
cmV2aW91c1JlbmRlcmVyID0gKnByZXZpb3VzVGV4dE5vZGUtPnJlbmRlcmVyKCk7Ci0gICAgICAg
ICAgICBpZiAocHJldmlvdXNSZW5kZXJlci5wYXJlbnQoKSAhPSAmYmxvY2tGbG93KQotICAgICAg
ICAgICAgICAgIG1fcHJldmlvdXNUZXh0TGVuZ3RoSW5GbG93ID0gMDsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBtX3ByZXZpb3VzVGV4dExlbmd0aEluRmxvdyArPSBwcmV2aW91
c1RleHROb2RlLT5yZW5kZXJlcigpLT50ZXh0KCktPmxlbmd0aCgpOworICAgICAgICBjb25zdCBh
dXRvJiBibG9ja0Zsb3cgPSBkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KCpyZW5kZXJlci5wYXJl
bnQoKSk7CisgICAgICAgIGlmICghbV9mbG93UnVuUmVzb2x2ZXJDYWNoZSB8fCAmbV9mbG93UnVu
UmVzb2x2ZXJDYWNoZS0+ZmxvdygpICE9ICZibG9ja0Zsb3cpIHsKKyAgICAgICAgICAgIG1fZmxv
d1J1blJlc29sdmVyQ2FjaGUgPSBzdGQ6Om1ha2VfdW5pcXVlPFNpbXBsZUxpbmVMYXlvdXQ6OlJ1
blJlc29sdmVyPihibG9ja0Zsb3csICpsYXlvdXQpOworICAgICAgICAgICAgbV9wcmV2aW91c1Rl
eHRMZW5ndGhJbkZsb3cgPSAwOworICAgICAgICB9IGVsc2UgaWYgKHByZXZpb3VzVGV4dE5vZGUg
JiYgcHJldmlvdXNUZXh0Tm9kZSAhPSAmdGV4dE5vZGUpIHsKKyAgICAgICAgICAgIC8vIFNpbXBs
ZSBsaW5lIGxheW91dCBydW4gcG9zaXRpb25zIGFyZSBhbGwgYWJzb2x1dGUgdG8gdGhlIHBhcmVu
dCBmbG93LgorICAgICAgICAgICAgLy8gT2Zmc2V0dGluZyBpcyByZXF1aXJlZCB3aGVuIG11bHRp
cGxlIHJlbmRlcmVycyBhcmUgcHJlc2VudC4KKyAgICAgICAgICAgIG1fcHJldmlvdXNUZXh0TGVu
Z3RoSW5GbG93ICs9IHByZXZpb3VzVGV4dE5vZGUtPnJlbmRlcmVyKCktPnRleHQoKS0+bGVuZ3Ro
KCk7CiAgICAgICAgIH0KICAgICAgICAgLy8gU2tpcCB0byBtX29mZnNldCBwb3NpdGlvbi4KKyAg
ICAgICAgYXV0byByYW5nZSA9IG1fZmxvd1J1blJlc29sdmVyQ2FjaGUtPnJhbmdlRm9yUmVuZGVy
ZXIocmVuZGVyZXIpOwogICAgICAgICBhdXRvIGl0ID0gcmFuZ2UuYmVnaW4oKTsKICAgICAgICAg
YXV0byBlbmQgPSByYW5nZS5lbmQoKTsKICAgICAgICAgd2hpbGUgKGl0ICE9IGVuZCAmJiAoKml0
KS5lbmQoKSA8PSAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fb2Zmc2V0KSArIG1fcHJldmlvdXNU
ZXh0TGVuZ3RoSW5GbG93KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4
dEl0ZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5oCmluZGV4
IDYzY2YzZDU2Y2ViYzEyZjlkYmViM2QzNThmZDNkZjY0YmZkNzY1YzMuLmFmMmMzODY4OGIxMzFj
NmJjOTczMzAwZDNkYmM2OTYxOTk1OWQyMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVGV4dEl0ZXJhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRl
cmF0b3IuaApAQCAtMzksNiArMzksOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJbmxp
bmVUZXh0Qm94OwogY2xhc3MgUmVuZGVyVGV4dDsKIGNsYXNzIFJlbmRlclRleHRGcmFnbWVudDsK
K25hbWVzcGFjZSBTaW1wbGVMaW5lTGF5b3V0IHsKK2NsYXNzIFJ1blJlc29sdmVyOworfQogCiBX
RUJDT1JFX0VYUE9SVCBTdHJpbmcgcGxhaW5UZXh0KGNvbnN0IFJhbmdlKiwgVGV4dEl0ZXJhdG9y
QmVoYXZpb3IgPSBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IsIGJvb2wgaXNEaXNwbGF5U3Ry
aW5nID0gZmFsc2UpOwogV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHBsYWluVGV4dFJlcGxhY2luZ05v
QnJlYWtTcGFjZShjb25zdCBSYW5nZSosIFRleHRJdGVyYXRvckJlaGF2aW9yID0gVGV4dEl0ZXJh
dG9yRGVmYXVsdEJlaGF2aW9yLCBib29sIGlzRGlzcGxheVN0cmluZyA9IGZhbHNlKTsKQEAgLTE2
Niw2ICsxNjksOCBAQCBwcml2YXRlOgogICAgIC8vIFVzZWQgdG8gZG8gc2ltcGxlIGxpbmUgbGF5
b3V0IHJ1biBsb2dpYy4KICAgICBib29sIG1fbmV4dFJ1bk5lZWRzV2hpdGVzcGFjZSB7IGZhbHNl
IH07CiAgICAgdW5zaWduZWQgbV9wcmV2aW91c1RleHRMZW5ndGhJbkZsb3cgeyAwIH07CisgICAg
c3RkOjp1bmlxdWVfcHRyPFNpbXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVyPiBtX2Zsb3dSdW5S
ZXNvbHZlckNhY2hlOworCiAgICAgLy8gVXNlZCB3aGVuIHRleHQgYm94ZXMgYXJlIG91dCBvZiBv
cmRlciAoSGVicmV3L0FyYWJpYyB3aXRoIGVtYmVkZGVkIExUUiB0ZXh0KQogICAgIFZlY3RvcjxJ
bmxpbmVUZXh0Qm94Kj4gbV9zb3J0ZWRUZXh0Qm94ZXM7CiAgICAgc2l6ZV90IG1fc29ydGVkVGV4
dEJveGVzUG9zaXRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2lt
cGxlTGluZUxheW91dEZsb3dDb250ZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
U2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5jcHAKaW5kZXggMTZjYjA5ZTg5NDkxZTMxMDdk
MTBhMTkxZWNmZGUzMzgzNmI4OWMxYi4uYzI5NDAyZGYxNWE4OGUxOTdhNDVhY2VlNTJiZGQ0MzRl
ODNlMTY1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVM
YXlvdXRGbG93Q29udGVudHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1w
bGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmNwcApAQCAtMzUsNyArMzUsMTMgQEAgbmFtZXNwYWNl
IFNpbXBsZUxpbmVMYXlvdXQgewogCiBzdGF0aWMgVmVjdG9yPEZsb3dDb250ZW50czo6U2VnbWVu
dD4gaW5pdGlhbGl6ZVNlZ21lbnRzKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdykKIHsKLSAg
ICBWZWN0b3I8Rmxvd0NvbnRlbnRzOjpTZWdtZW50LCA4PiBzZWdtZW50czsKKworICAgIHVuc2ln
bmVkIG51bWJlck9mQ2hpbGRyZW4gPSAwOworICAgIGF1dG8gY2hpbGRyZW4gPSBjaGlsZHJlbk9m
VHlwZTxSZW5kZXJUZXh0PihmbG93KTsKKyAgICBmb3IgKGF1dG8gaXQgPSBjaGlsZHJlbi5iZWdp
bigpLCBlbmQgPSBjaGlsZHJlbi5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICArK251
bWJlck9mQ2hpbGRyZW47CisgICAgVmVjdG9yPEZsb3dDb250ZW50czo6U2VnbWVudD4gc2VnbWVu
dHM7CisgICAgc2VnbWVudHMucmVzZXJ2ZUNhcGFjaXR5KG51bWJlck9mQ2hpbGRyZW4pOwogICAg
IHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24gPSAwOwogICAgIGZvciAoYXV0byYgdGV4dENoaWxkIDog
Y2hpbGRyZW5PZlR5cGU8UmVuZGVyVGV4dD4oZmxvdykpIHsKICAgICAgICAgdW5zaWduZWQgdGV4
dExlbmd0aCA9IHRleHRDaGlsZC50ZXh0KCktPmxlbmd0aCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmNwcAppbmRleCBiMjNi
NDc1NGVlZjc1OTZmZDU2ZTQxMjZjYzQxNDllNmY1NzFjYmRkLi5mYTZjOTZhODc0YjRlNTIwOTU0
MTQxYjA0YWFiMzQ4MTAyM2RmMzAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmNwcApAQCAtMTE2LDcgKzExNiw4IEBAIFJ1
blJlc29sdmVyOjpJdGVyYXRvciYgUnVuUmVzb2x2ZXI6Okl0ZXJhdG9yOjphZHZhbmNlTGluZXMo
dW5zaWduZWQgbGluZUNvdW50KQogfQogCiBSdW5SZXNvbHZlcjo6UnVuUmVzb2x2ZXIoY29uc3Qg
UmVuZGVyQmxvY2tGbG93JiBmbG93LCBjb25zdCBMYXlvdXQmIGxheW91dCkKLSAgICA6IG1fbGF5
b3V0KGxheW91dCkKKyAgICA6IG1fZmxvd1JlbmRlcmVyKGZsb3cpCisgICAgLCBtX2xheW91dChs
YXlvdXQpCiAgICAgLCBtX2Zsb3dDb250ZW50cyhmbG93KQogICAgICwgbV9saW5lSGVpZ2h0KGxp
bmVIZWlnaHRGcm9tRmxvdyhmbG93KSkKICAgICAsIG1fYmFzZWxpbmUoYmFzZWxpbmVGcm9tRmxv
dyhmbG93KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5l
TGF5b3V0UmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5
b3V0UmVzb2x2ZXIuaAppbmRleCAwYTk4ZDFmNWE3YTBmMmRmMjZhZjYyNGFmNDg1MDczODAyY2Vi
YmZlLi4zN2JjOThmNTdkNjY5NTIwMzBlOGNmMWZiOTk2MTRmOTI5Y2U2OTEzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5oCkBA
IC05OSw2ICs5OSw3IEBAIHB1YmxpYzoKIAogICAgIFJ1blJlc29sdmVyKGNvbnN0IFJlbmRlckJs
b2NrRmxvdyYsIGNvbnN0IExheW91dCYpOwogCisgICAgY29uc3QgUmVuZGVyQmxvY2tGbG93JiBm
bG93KCkgY29uc3QgeyByZXR1cm4gbV9mbG93UmVuZGVyZXI7IH0KICAgICBJdGVyYXRvciBiZWdp
bigpIGNvbnN0OwogICAgIEl0ZXJhdG9yIGVuZCgpIGNvbnN0OwogCkBAIC0xMDksNiArMTEwLDcg
QEAgcHJpdmF0ZToKICAgICBlbnVtIGNsYXNzIEluZGV4VHlwZSB7IEZpcnN0LCBMYXN0IH07CiAg
ICAgdW5zaWduZWQgbGluZUluZGV4Rm9ySGVpZ2h0KExheW91dFVuaXQsIEluZGV4VHlwZSkgY29u
c3Q7CiAKKyAgICBjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIG1fZmxvd1JlbmRlcmVyOwogICAgIGNv
bnN0IExheW91dCYgbV9sYXlvdXQ7CiAgICAgY29uc3QgRmxvd0NvbnRlbnRzIG1fZmxvd0NvbnRl
bnRzOwogICAgIGNvbnN0IExheW91dFVuaXQgbV9saW5lSGVpZ2h0OwpkaWZmIC0tZ2l0IGEvUGVy
Zm9ybWFuY2VUZXN0cy9DaGFuZ2VMb2cgYi9QZXJmb3JtYW5jZVRlc3RzL0NoYW5nZUxvZwppbmRl
eCA4NjE1ZGQ0MjhlN2M3OGUwZjkyOGVhNzQ4Y2Y1NWM3OTljZDFiYWE3Li42ZWNiZTcyNDA0ODRi
NjYyMmUxNjMwZDE5Njk2MGZiNDU3NmI5OTM0IDEwMDY0NAotLS0gYS9QZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZworKysgYi9QZXJmb3JtYW5jZVRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1
IEBACisyMDE1LTA0LTA4ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgU2ltcGxlIGxpbmUgbGF5b3V0KHJlZ3Jlc3Npb24pOiBDYWxsaW5nIGlubmVyVGV4dCBvbiBS
ZW5kZXJGbG93IHdpdGggbXVsdGlwbGUgY2hpbGRyZW4gaXMgc2xvdy4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzU1NAorCisgICAgICAgIFJldmll
d2VkIGJ5IEFudHRpIEtvaXZpc3RvLgorCisgICAgICAgIEluaXRpYWxpemUgcmVuZGVyIGZsb3cn
cyBzZWdtZW50cyBvbmx5IHdoZW4gdGhlIHJlbmRlciBmbG93IGNoYW5nZXMgaW4gVGV4dEl0ZXJh
dG9yLgorICAgICAgICBUaGUgaW5jbHVkZWQgcGVyZm9ybWFuY2UgdGVzdCBzaG93cyA2eCBzcGVl
ZHVwLiAoZnJvbSB+MTAgcnVucy9zZWMgdG8gfjYwIHJ1bnMvc2VjKQorCisgICAgICAgICogTGF5
b3V0L3NpbXBsZS1saW5lLWxheW91dC1pbm5lcnRleHQuaHRtbDogQWRkZWQuCisKIDIwMTUtMDMt
MDkgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBbQ0ddIEhhdmUg
Q2FudmFzIHVzZSB0aGUgSU9TdXJmYWNlUG9vbApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0
cy9MYXlvdXQvc2ltcGxlLWxpbmUtbGF5b3V0LWlubmVydGV4dC5odG1sIGIvUGVyZm9ybWFuY2VU
ZXN0cy9MYXlvdXQvc2ltcGxlLWxpbmUtbGF5b3V0LWlubmVydGV4dC5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmU2YTc0ZWI3ODJlM2Q3MDgyYjkzNmRhZTI0MGY4ZjMyMjVjMTM4ZTIKLS0tIC9kZXYvbnVsbAor
KysgYi9QZXJmb3JtYW5jZVRlc3RzL0xheW91dC9zaW1wbGUtbGluZS1sYXlvdXQtaW5uZXJ0ZXh0
Lmh0bWwKQEAgLTAsMCArMSwyNSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgor
ICAgIDx0aXRsZT5pbm5lclRleHQgcGVyZm9ybWFuY2UgdGVzdCB3aXRoIHNpbXBsZSBsaW5lIGxh
eW91dC48L3RpdGxlPgorICAgIDxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvcnVubmVyLmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorICAgIDxwcmUgaWQ9ImxvZyI+PC9wcmU+CisgICAg
PGRpdiBpZD0idGFyZ2V0IiBzdHlsZT0id2lkdGg6IDMwMHB4OyI+PC9kaXY+CisgICAgPGRpdiBp
ZD0icmVzdWx0Ij48L2Rpdj4KKyAgICA8c2NyaXB0PgorICAgICAgICB2YXIgdGFyZ2V0ID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRhcmdldCIpOworICAgICAgICB2YXIgcmVzdWx0ID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdCIpOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwg
NTAwOyArK2kpCisgICAgICAgICAgICB0YXJnZXQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl
VGV4dE5vZGUoImZvb2JhciIpKTsKKworICAgICAgICBmdW5jdGlvbiB0ZXN0KCkgeworICAgICAg
ICAgICAgZm9yIChpID0gMDsgaSA8IDEwOyArK2kpCisgICAgICAgICAgICAgICAgcmVzdWx0Lmlu
bmVyVGV4dCArPSB0YXJnZXQuaW5uZXJUZXh0OworICAgICAgICAgICAgcmVzdWx0LmlubmVyVGV4
dCA9ICIiOworICAgICAgICB9CisgICAgICAgIFBlcmZUZXN0UnVubmVyLm1lYXN1cmVSdW5zUGVy
U2Vjb25kKHsgcnVuOiB0ZXN0IH0pOworICAgIDwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>