<?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>196681</bug_id>
          
          <creation_ts>2019-04-06 17:19:11 -0700</creation_ts>
          <short_desc>HashTable::removeIf always shrinks the hash table by half even if there is nothing left</short_desc>
          <delta_ts>2019-04-20 12:16:24 -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>Web Template Framework</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1525041</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-04-06 17:19:11 -0700</bug_when>
    <thetext>HashTable::removeIf always shrinks the table to half of its original size
even if there is nothing left in the table afterwards.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1525042</commentid>
    <comment_count>1</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-04-06 17:22:35 -0700</bug_when>
    <thetext>HashTable::removeIf has the code like this:

if (shouldShrink())
    shrink();

But shrink does:

void shrink() { rehash(m_tableSize / 2, nullptr); }

Let&apos;s say we removed 30 out of 32 entires in the hash table. Then m_tableSize might have been 64 but we&apos;d only shrink the table to 16 after the removal instead of the minimal table size of 8.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1525043</commentid>
    <comment_count>2</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-04-06 17:30:00 -0700</bug_when>
    <thetext>Maybe this design was intentional to limit the rate by which we shrink to avoid table size churn??</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1525064</commentid>
    <comment_count>3</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-04-06 20:48:25 -0700</bug_when>
    <thetext>I don&apos;t think it&apos;s intentional. It&apos;s inconsistent with remove().

That said, it is true that shrinking to exactly your current size is usually a poor choice, since the very next insertion will grow.

One way to fix this is to do the shouldShrink test inside the loop.

Another way to fix this is to change the if (shouldShrink()) into a while (shouldShrink()).

Both of those are a bit wasteful, though.

The optimal solution is probably something like rehash(std::max(KeyTraits::minimumTableSize,  roundUpToPowerOfTwo(m_keyCount + 1)).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1525982</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-04-10 09:45:29 -0700</bug_when>
    <thetext>I agree with Geoff. The removeIf function should implement the same policy as shouldShrink/shrink, but those function are written with removing a single element from the hash table in mind. It’s the policy that is important. Also nice that before the policy was highly localized in those functions. It would be a shame to &quot;spread out&quot; the policy across more functions in the class, so we should carefully figure out how to factor this &quot;remove multiple items&quot; case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1526917</commentid>
    <comment_count>5</comment_count>
      <attachid>367348</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-04-12 15:10:16 -0700</bug_when>
    <thetext>Created attachment 367348
Fixes the bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1526919</commentid>
    <comment_count>6</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-04-12 15:13:05 -0700</bug_when>
    <thetext>Attachment 367348 did not pass style-queue:


ERROR: Tools/ChangeLog:12:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/HashSet.cpp:473:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/HashSet.cpp:490:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/HashSet.cpp:499:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 4 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1526928</commentid>
    <comment_count>7</comment_count>
      <attachid>367348</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-04-12 15:54:45 -0700</bug_when>
    <thetext>Comment on attachment 367348
Fixes the bug

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

&gt; Source/WTF/wtf/HashTable.h:467
&gt; +        unsigned computeBestTableSize(unsigned keyCount) { return WTF::roundUpToPowerOfTwo(keyCount) * 2; }

I think this should be should be static (and constexpr) member function, rather than a non-static.

Is it safe to call roundUpToPowerOfTwo on the key count? Is there a guarantee it won’t overflow?

&gt; Source/WTF/wtf/HashTable.h:477
&gt; +        void shrinkToBestSize()
&gt; +        {
&gt; +            unsigned minimumTableSize = KeyTraits::minimumTableSize;
&gt; +            rehash(std::max&lt;unsigned&gt;(minimumTableSize, computeBestTableSize(m_keyCount + 1)), nullptr);
&gt; +        }

Why does this add one to m_keyCount? The copy constructor doesn’t do that.

Unclear why it’s correct to do this computation without the &quot;aboveThreeQuarterLoad&quot; check that is in the copy constructor.

Is it safe to add one to m_keyCount? Is there something that guarantees it won’t overflow?

The &lt;unsigned&gt; is not needed in the call to std::max since both arguments are unsigned. Same in the code this was copied from, in the copy constructor.

Unclear why we need minimumTableSize to be put into a local variable. Same in the code this was copied from, in the copy constructor.

Style thought: I think a multi-line function should be defined outside the class, so it doesn’t take up four lines in the class definition.

&gt; Tools/ChangeLog:12
&gt; +	(WTF_HashSet.RemoveIfShrinkToBestSize):

Looks like there’s a tab here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1526982</commentid>
    <comment_count>8</comment_count>
      <attachid>367348</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-04-12 18:52:50 -0700</bug_when>
    <thetext>Comment on attachment 367348
Fixes the bug

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

&gt;&gt; Source/WTF/wtf/HashTable.h:467
&gt;&gt; +        unsigned computeBestTableSize(unsigned keyCount) { return WTF::roundUpToPowerOfTwo(keyCount) * 2; }
&gt; 
&gt; I think this should be should be static (and constexpr) member function, rather than a non-static.
&gt; 
&gt; Is it safe to call roundUpToPowerOfTwo on the key count? Is there a guarantee it won’t overflow?

Sure. I can make it static.
I don&apos;t think this code is guaranteed to be safe but HashTable in general doesn&apos;t seem to have that kind of safety check.
For example, expand(~) always multiples the current table size by 2.

&gt;&gt; Source/WTF/wtf/HashTable.h:477
&gt;&gt; +        }
&gt; 
&gt; Why does this add one to m_keyCount? The copy constructor doesn’t do that.
&gt; 
&gt; Unclear why it’s correct to do this computation without the &quot;aboveThreeQuarterLoad&quot; check that is in the copy constructor.
&gt; 
&gt; Is it safe to add one to m_keyCount? Is there something that guarantees it won’t overflow?
&gt; 
&gt; The &lt;unsigned&gt; is not needed in the call to std::max since both arguments are unsigned. Same in the code this was copied from, in the copy constructor.
&gt; 
&gt; Unclear why we need minimumTableSize to be put into a local variable. Same in the code this was copied from, in the copy constructor.
&gt; 
&gt; Style thought: I think a multi-line function should be defined outside the class, so it doesn’t take up four lines in the class definition.

Oh, I din&apos;t see that code there. We clearly should do that math. I was adding 1 to do what aboveThreeQuarterLoad is doing.
There is also std::max&lt;unsigned&gt;(bestTableSize, minimumTableSize) already so we can merge that too.

If we don&apos;t store minimumTableSize in a local variable, we hit a linking error :(
It&apos;s probably some kind of a clang bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1526987</commentid>
    <comment_count>9</comment_count>
      <attachid>367371</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-04-12 19:04:39 -0700</bug_when>
    <thetext>Created attachment 367371
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1526990</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-04-12 19:06:16 -0700</bug_when>
    <thetext>Waiting for EWS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1526991</commentid>
    <comment_count>11</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-04-12 19:07:42 -0700</bug_when>
    <thetext>Attachment 367371 did not pass style-queue:


ERROR: Tools/ChangeLog:12:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Tools/TestWebKitAPI/Tests/WTF/HashSet.cpp:473:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/HashSet.cpp:490:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/HashSet.cpp:499:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 4 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1527047</commentid>
    <comment_count>12</comment_count>
      <attachid>367348</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-04-13 08:14:26 -0700</bug_when>
    <thetext>Comment on attachment 367348
Fixes the bug

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

&gt;&gt;&gt; Source/WTF/wtf/HashTable.h:467
&gt;&gt;&gt; +        unsigned computeBestTableSize(unsigned keyCount) { return WTF::roundUpToPowerOfTwo(keyCount) * 2; }
&gt;&gt; 
&gt;&gt; I think this should be should be static (and constexpr) member function, rather than a non-static.
&gt;&gt; 
&gt;&gt; Is it safe to call roundUpToPowerOfTwo on the key count? Is there a guarantee it won’t overflow?
&gt; 
&gt; Sure. I can make it static.
&gt; I don&apos;t think this code is guaranteed to be safe but HashTable in general doesn&apos;t seem to have that kind of safety check.
&gt; For example, expand(~) always multiples the current table size by 2.

We still need to think about what prevents overflow. I understand that this is consistent with the rest of the class. We should think about the rest of the class too. Not to block landing this patch, but to make sure it’s safe to program with HashTable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1527390</commentid>
    <comment_count>13</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-04-15 14:04:46 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #12)
&gt; Comment on attachment 367348 [details]
&gt; Fixes the bug
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=367348&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WTF/wtf/HashTable.h:467
&gt; &gt;&gt;&gt; +        unsigned computeBestTableSize(unsigned keyCount) { return WTF::roundUpToPowerOfTwo(keyCount) * 2; }
&gt; &gt;&gt; 
&gt; &gt;&gt; I think this should be should be static (and constexpr) member function, rather than a non-static.
&gt; &gt;&gt; 
&gt; &gt;&gt; Is it safe to call roundUpToPowerOfTwo on the key count? Is there a guarantee it won’t overflow?
&gt; &gt; 
&gt; &gt; Sure. I can make it static.
&gt; &gt; I don&apos;t think this code is guaranteed to be safe but HashTable in general doesn&apos;t seem to have that kind of safety check.
&gt; &gt; For example, expand(~) always multiples the current table size by 2.
&gt; 
&gt; We still need to think about what prevents overflow. I understand that this
&gt; is consistent with the rest of the class. We should think about the rest of
&gt; the class too. Not to block landing this patch, but to make sure it’s safe
&gt; to program with HashTable.

Indeed. Vector::append for example has a CRASH() call after calling expandCapacity. We probably need something similar for HashTable in addition to avoiding the overflow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1527407</commentid>
    <comment_count>14</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-04-15 14:30:37 -0700</bug_when>
    <thetext>Tracking the overflow issue in https://bugs.webkit.org/show_bug.cgi?id=196935</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1527410</commentid>
    <comment_count>15</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-04-15 14:30:40 -0700</bug_when>
    <thetext>Committed r244289: &lt;https://trac.webkit.org/changeset/244289&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1527416</commentid>
    <comment_count>16</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-04-15 14:32:25 -0700</bug_when>
    <thetext>&lt;rdar://problem/49917764&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1528859</commentid>
    <comment_count>17</comment_count>
      <attachid>367371</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-04-19 14:04:43 -0700</bug_when>
    <thetext>Comment on attachment 367371
Patch for landing

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

&gt; Source/WTF/wtf/HashTable.h:1213
&gt; +        return std::max&lt;unsigned&gt;(bestTableSize, minimumTableSize);

Can we remove &lt;unsigned&gt; here?

&gt; Source/WTF/wtf/HashTable.h:1220
&gt; +        rehash(std::max&lt;unsigned&gt;(minimumTableSize, computeBestTableSize(m_keyCount)), nullptr);

Can we remove &lt;unsigned&gt; here?

&gt; Tools/ChangeLog:12
&gt; +	(WTF_HashSet.RemoveIfShrinkToBestSize):

Surprised Subversion pre-commit hooks allowed us to land a patch with a tab in a ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1529036</commentid>
    <comment_count>18</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-04-19 21:35:27 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #17)
&gt; Comment on attachment 367371 [details]
&gt; Patch for landing
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=367371&amp;action=review
&gt; 
&gt; &gt; Source/WTF/wtf/HashTable.h:1213
&gt; &gt; +        return std::max&lt;unsigned&gt;(bestTableSize, minimumTableSize);
&gt; 
&gt; Can we remove &lt;unsigned&gt; here?

Oops, I forgot to remove this. Will remove.


&gt; &gt; Source/WTF/wtf/HashTable.h:1220
&gt; &gt; +        rehash(std::max&lt;unsigned&gt;(minimumTableSize, computeBestTableSize(m_keyCount)), nullptr);
&gt; 
&gt; Can we remove &lt;unsigned&gt; here?

Ditto.

&gt; &gt; Tools/ChangeLog:12
&gt; &gt; +	(WTF_HashSet.RemoveIfShrinkToBestSize):
&gt; 
&gt; Surprised Subversion pre-commit hooks allowed us to land a patch with a tab
&gt; in a ChangeLog

Oh, it DID catch it. I had to fix that before actually committing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1529057</commentid>
    <comment_count>19</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-04-19 23:22:15 -0700</bug_when>
    <thetext>Reopening to attach new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1529058</commentid>
    <comment_count>20</comment_count>
      <attachid>367881</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-04-19 23:22:17 -0700</bug_when>
    <thetext>Created attachment 367881
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1529109</commentid>
    <comment_count>21</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2019-04-20 12:16:24 -0700</bug_when>
    <thetext>Committed r244489: &lt;https://trac.webkit.org/changeset/244489&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>367348</attachid>
            <date>2019-04-12 15:10:16 -0700</date>
            <delta_ts>2019-04-12 19:04:38 -0700</delta_ts>
            <desc>Fixes the bug</desc>
            <filename>bug-196681-20190412151015.patch</filename>
            <type>text/plain</type>
            <size>5265</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNDQyMzApCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDE5LTA0LTEyICBSeW9zdWtlIE5pd2EgIDxybml3
YUB3ZWJraXQub3JnPgorCisgICAgICAgIEhhc2hUYWJsZTo6cmVtb3ZlSWYgYWx3YXlzIHNocmlu
a3MgdGhlIGhhc2ggdGFibGUgYnkgaGFsZiBldmVuIGlmIHRoZXJlIGlzIG5vdGhpbmcgbGVmdAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk2NjgxCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWFkZSBIYXNo
VGFibGU6OnJlbW92ZUlmIHNocmluayB0byB0aGUgImJlc3Qgc2l6ZSIsIHdoaWNoIGlzIHRoZSBs
ZWFzdCBwb3dlciBvZiB0d28gYmlnZ2VyCisgICAgICAgIHRoYW4gdHdpY2UgdGhlIGtleSBjb3Vu
dCwgd2hpY2ggaXMgYWxyZWFkeSB0aGUgY29kZSB3ZSB1c2UgaW4gdGhlIGNvcHkgY29uc3RydWN0
b3IuCisgICAgICAgIFdlIHVzZSB0aGUgc3RkOjptYXggb2YgdGhhdCBhbmQgdGhlIG1pbmltdW0g
dGFibGUgc2l6ZSBpbiB0aGlzIGNhc2UuCisKKyAgICAgICAgKiB3dGYvSGFzaFRhYmxlLmg6Cisg
ICAgICAgIChXVEY6Okhhc2hUYWJsZTo6Y29tcHV0ZUJlc3RUYWJsZVNpemUpOiBFeHRyYWN0ZWQg
ZnJvbSB0aGUgY29weSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpzaHJp
bmtUb0Jlc3RTaXplKTogQWRkZWQuCisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6cmVtb3ZlSWYp
OiBVc2Ugc2hyaW5rVG9CZXN0U2l6ZSBpbnN0ZWFkIG9mIHNocmluay4KKyAgICAgICAgKFdURjo6
SGFzaFRhYmxlOjpIYXNoVGFibGUpOgorCiAyMDE5LTA0LTEyICBFcmljIENhcmxzb24gIDxlcmlj
LmNhcmxzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFVwZGF0ZSBBdWRpb1Nlc3Npb24gcm91dGUg
c2hhcmluZyBwb2xpY3kKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCShyZXZpc2lvbiAyNDQyMzApCisrKyBT
b3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDY0LDEyICs0NjQs
MTggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIHZvaWQgcmVtb3ZlQW5kSW52YWxpZGF0ZShW
YWx1ZVR5cGUqKTsKICAgICAgICAgdm9pZCByZW1vdmUoVmFsdWVUeXBlKik7CiAKKyAgICAgICAg
dW5zaWduZWQgY29tcHV0ZUJlc3RUYWJsZVNpemUodW5zaWduZWQga2V5Q291bnQpIHsgcmV0dXJu
IFdURjo6cm91bmRVcFRvUG93ZXJPZlR3byhrZXlDb3VudCkgKiAyOyB9CiAgICAgICAgIGJvb2wg
c2hvdWxkRXhwYW5kKCkgY29uc3QgeyByZXR1cm4gKG1fa2V5Q291bnQgKyBtX2RlbGV0ZWRDb3Vu
dCkgKiBtX21heExvYWQgPj0gbV90YWJsZVNpemU7IH0KICAgICAgICAgYm9vbCBtdXN0UmVoYXNo
SW5QbGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5Q291bnQgKiBtX21pbkxvYWQgPCBtX3RhYmxl
U2l6ZSAqIDI7IH0KICAgICAgICAgYm9vbCBzaG91bGRTaHJpbmsoKSBjb25zdCB7IHJldHVybiBt
X2tleUNvdW50ICogbV9taW5Mb2FkIDwgbV90YWJsZVNpemUgJiYgbV90YWJsZVNpemUgPiBLZXlU
cmFpdHM6Om1pbmltdW1UYWJsZVNpemU7IH0KICAgICAgICAgVmFsdWVUeXBlKiBleHBhbmQoVmFs
dWVUeXBlKiBlbnRyeSA9IG51bGxwdHIpOwogICAgICAgICB2b2lkIHNocmluaygpIHsgcmVoYXNo
KG1fdGFibGVTaXplIC8gMiwgbnVsbHB0cik7IH0KLQorICAgICAgICB2b2lkIHNocmlua1RvQmVz
dFNpemUoKQorICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCBtaW5pbXVtVGFibGVTaXpl
ID0gS2V5VHJhaXRzOjptaW5pbXVtVGFibGVTaXplOworICAgICAgICAgICAgcmVoYXNoKHN0ZDo6
bWF4PHVuc2lnbmVkPihtaW5pbXVtVGFibGVTaXplLCBjb21wdXRlQmVzdFRhYmxlU2l6ZShtX2tl
eUNvdW50ICsgMSkpLCBudWxscHRyKTsKKyAgICAgICAgfQorICAgIAogICAgICAgICB2b2lkIGRl
bGV0ZVJlbGVhc2VkV2Vha0J1Y2tldHMoKTsKIAogICAgICAgICBWYWx1ZVR5cGUqIHJlaGFzaCh1
bnNpZ25lZCBuZXdUYWJsZVNpemUsIFZhbHVlVHlwZSogZW50cnkpOwpAQCAtMTE0OSw3ICsxMTU1
LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIG1fa2V5Q291bnQgLT0gcmVtb3ZlZEJ1Y2tl
dENvdW50OwogCiAgICAgICAgIGlmIChzaG91bGRTaHJpbmsoKSkKLSAgICAgICAgICAgIHNocmlu
aygpOworICAgICAgICAgICAgc2hyaW5rVG9CZXN0U2l6ZSgpOwogICAgICAgICAKICAgICAgICAg
aW50ZXJuYWxDaGVja1RhYmxlQ29uc2lzdGVuY3koKTsKICAgICAgICAgcmV0dXJuIHJlbW92ZWRC
dWNrZXRDb3VudDsKQEAgLTEzMDEsNyArMTMwNyw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAg
ICBpZiAoIW90aGVyS2V5Q291bnQpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgdW5z
aWduZWQgYmVzdFRhYmxlU2l6ZSA9IFdURjo6cm91bmRVcFRvUG93ZXJPZlR3byhvdGhlcktleUNv
dW50KSAqIDI7CisgICAgICAgIHVuc2lnbmVkIGJlc3RUYWJsZVNpemUgPSBjb21wdXRlQmVzdFRh
YmxlU2l6ZShvdGhlcktleUNvdW50KTsKIAogICAgICAgICAvLyBXaXRoIG1heExvYWQgYXQgMS8y
IGFuZCBtaW5Mb2FkIGF0IDEvNiwgb3VyIGF2ZXJhZ2UgbG9hZCBpcyAyLzYuCiAgICAgICAgIC8v
IElmIHdlIGFyZSBnZXR0aW5nIGhhbGZ3YXkgYmV0d2VlbiAyLzYgYW5kIDEvMiAocGFzdCA1LzEy
KSwgd2UgZG91YmxlIHRoZSBzaXplIHRvIGF2b2lkIGJlaW5nIHRvbyBjbG9zZSB0bwpJbmRleDog
VG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24g
MjQ0MjMwKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYg
QEAKKzIwMTktMDQtMTIgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgSGFzaFRhYmxlOjpyZW1vdmVJZiBhbHdheXMgc2hyaW5rcyB0aGUgaGFzaCB0YWJsZSBieSBo
YWxmIGV2ZW4gaWYgdGhlcmUgaXMgbm90aGluZyBsZWZ0CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTY2ODEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCB0ZXN0cy4KKworICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hTZXQuY3BwOgorICAgICAgICAoV1RGX0hhc2hTZXQuUmVt
b3ZlSWYpOgorCShXVEZfSGFzaFNldC5SZW1vdmVJZlNocmlua1RvQmVzdFNpemUpOgorCiAyMDE5
LTA0LTEyICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgogCiAgICAgICAg
IFVwZGF0ZSBBdWRpb1Nlc3Npb24gcm91dGUgc2hhcmluZyBwb2xpY3kKSW5kZXg6IFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hTZXQuY3BwCShyZXZpc2lvbiAyNDQyMzApCisrKyBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNoU2V0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDY2LDQgKzQ2Niw0MCBAQCBURVNUKFdURl9IYXNoU2V0LCBSZW1vdmVSYW5kb20pCiAgICAg
QVNTRVJUX1RSVUUoc2V0MS5pc0VtcHR5KCkpOwogfQogCitURVNUKFdURl9IYXNoU2V0LCBSZW1v
dmVJZikKK3sKKyAgICBIYXNoU2V0PHVuc2lnbmVkPiBzZXQxIHsgMSwgMiwgMywgNCwgNSB9Owor
ICAgIEFTU0VSVF9FUShzZXQxLnNpemUoKSwgNXUpOworICAgIHNldDEucmVtb3ZlSWYoW10gKHVu
c2lnbmVkIGl0ZW0pIHsgcmV0dXJuIGl0ZW0gJSAyOyAgfSk7CisgICAgc2V0MS5jaGVja0NvbnNp
c3RlbmN5KCk7CisgICAgQVNTRVJUX1RSVUUoIXNldDEuY29udGFpbnMoMSkpOworICAgIEFTU0VS
VF9UUlVFKHNldDEuY29udGFpbnMoMikpOworICAgIEFTU0VSVF9UUlVFKCFzZXQxLmNvbnRhaW5z
KDMpKTsKKyAgICBBU1NFUlRfVFJVRShzZXQxLmNvbnRhaW5zKDQpKTsKKyAgICBBU1NFUlRfVFJV
RSghc2V0MS5jb250YWlucyg1KSk7CisgICAgQVNTRVJUX0VRKHNldDEuc2l6ZSgpLCAydSk7Cit9
CisKK1RFU1QoV1RGX0hhc2hTZXQsIFJlbW92ZUlmU2hyaW5rVG9CZXN0U2l6ZSkKK3sKKyAgICBI
YXNoU2V0PHVuc2lnbmVkPiBzZXQxOworICAgIHNldDEuYWRkKDEpOworICAgIHVuc2lnbmVkIG9y
aWdpbmFsQ2FwYWNpdHkgPSBzZXQxLmNhcGFjaXR5KCk7CisgICAgd2hpbGUgKHNldDEuY2FwYWNp
dHkoKSA8IG9yaWdpbmFsQ2FwYWNpdHkgKiA0KQorICAgICAgICBzZXQxLmFkZChzZXQxLnNpemUo
KSArIDEpOworICAgIHNldDEucmVtb3ZlSWYoW10gKHVuc2lnbmVkIGl0ZW0pIHsgcmV0dXJuIGl0
ZW0gIT0gMTsgfSk7CisgICAgc2V0MS5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAgQVNTRVJUX0VR
KHNldDEuc2l6ZSgpLCAxdSk7CisgICAgQVNTRVJUX0VRKHNldDEuY2FwYWNpdHkoKSwgb3JpZ2lu
YWxDYXBhY2l0eSk7CisKKyAgICBzZXQxLmNsZWFyKCk7CisgICAgc2V0MS5jaGVja0NvbnNpc3Rl
bmN5KCk7CisgICAgd2hpbGUgKHNldDEuY2FwYWNpdHkoKSA8IG9yaWdpbmFsQ2FwYWNpdHkgKiA4
KQorICAgICAgICBzZXQxLmFkZChzZXQxLnNpemUoKSArIDEpOworICAgIHNldDEucmVtb3ZlSWYo
W29yaWdpbmFsQ2FwYWNpdHldICh1bnNpZ25lZCBpdGVtKSB7IHJldHVybiBpdGVtID49IG9yaWdp
bmFsQ2FwYWNpdHkgLyAyOyB9KTsKKyAgICBzZXQxLmNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICBB
U1NFUlRfRVEoc2V0MS5zaXplKCksIG9yaWdpbmFsQ2FwYWNpdHkgLyAyIC0gMSk7CisgICAgQVNT
RVJUX0VRKHNldDEuY2FwYWNpdHkoKSwgb3JpZ2luYWxDYXBhY2l0eSk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>367371</attachid>
            <date>2019-04-12 19:04:39 -0700</date>
            <delta_ts>2019-04-12 19:05:44 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-196681-20190412190439.patch</filename>
            <type>text/plain</type>
            <size>7113</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNDQyMzApCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDE5LTA0LTEyICBSeW9zdWtlIE5pd2EgIDxybml3
YUB3ZWJraXQub3JnPgorCisgICAgICAgIEhhc2hUYWJsZTo6cmVtb3ZlSWYgYWx3YXlzIHNocmlu
a3MgdGhlIGhhc2ggdGFibGUgYnkgaGFsZiBldmVuIGlmIHRoZXJlIGlzIG5vdGhpbmcgbGVmdAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk2NjgxCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgTWFkZSBIYXNoVGFi
bGU6OnJlbW92ZUlmIHNocmluayB0byB0aGUgImJlc3Qgc2l6ZSIsIHdoaWNoIGlzIHRoZSBsZWFz
dCBwb3dlciBvZiB0d28gYmlnZ2VyCisgICAgICAgIHRoYW4gdHdpY2UgdGhlIGtleSBjb3VudCBh
cyBhbHJlYWR5IHVzZWQgaW4gdGhlIGNvcHkgY29uc3RydWN0b3IuCisKKyAgICAgICAgKiB3dGYv
SGFzaFRhYmxlLmg6CisgICAgICAgIChXVEY6Okhhc2hUYWJsZTo6Y29tcHV0ZUJlc3RUYWJsZVNp
emUpOiBFeHRyYWN0ZWQgZnJvbSB0aGUgY29weSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKFdURjo6
SGFzaFRhYmxlOjpzaHJpbmtUb0Jlc3RTaXplKTogQWRkZWQuCisgICAgICAgIChXVEY6Okhhc2hU
YWJsZTo6cmVtb3ZlSWYpOiBVc2Ugc2hyaW5rVG9CZXN0U2l6ZSBpbnN0ZWFkIG9mIHNocmluay4K
KyAgICAgICAgKFdURjo6SGFzaFRhYmxlOjpIYXNoVGFibGUpOgorCiAyMDE5LTA0LTEyICBFcmlj
IENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFVwZGF0ZSBBdWRp
b1Nlc3Npb24gcm91dGUgc2hhcmluZyBwb2xpY3kKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0hhc2hU
YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCShyZXZpc2lv
biAyNDQyMzApCisrKyBTb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNDY0LDEyICs0NjQsMTQgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIHZvaWQgcmVtb3Zl
QW5kSW52YWxpZGF0ZShWYWx1ZVR5cGUqKTsKICAgICAgICAgdm9pZCByZW1vdmUoVmFsdWVUeXBl
Kik7CiAKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjb21wdXRlQmVzdFRhYmxl
U2l6ZSh1bnNpZ25lZCBrZXlDb3VudCk7CiAgICAgICAgIGJvb2wgc2hvdWxkRXhwYW5kKCkgY29u
c3QgeyByZXR1cm4gKG1fa2V5Q291bnQgKyBtX2RlbGV0ZWRDb3VudCkgKiBtX21heExvYWQgPj0g
bV90YWJsZVNpemU7IH0KICAgICAgICAgYm9vbCBtdXN0UmVoYXNoSW5QbGFjZSgpIGNvbnN0IHsg
cmV0dXJuIG1fa2V5Q291bnQgKiBtX21pbkxvYWQgPCBtX3RhYmxlU2l6ZSAqIDI7IH0KICAgICAg
ICAgYm9vbCBzaG91bGRTaHJpbmsoKSBjb25zdCB7IHJldHVybiBtX2tleUNvdW50ICogbV9taW5M
b2FkIDwgbV90YWJsZVNpemUgJiYgbV90YWJsZVNpemUgPiBLZXlUcmFpdHM6Om1pbmltdW1UYWJs
ZVNpemU7IH0KICAgICAgICAgVmFsdWVUeXBlKiBleHBhbmQoVmFsdWVUeXBlKiBlbnRyeSA9IG51
bGxwdHIpOwogICAgICAgICB2b2lkIHNocmluaygpIHsgcmVoYXNoKG1fdGFibGVTaXplIC8gMiwg
bnVsbHB0cik7IH0KLQorICAgICAgICB2b2lkIHNocmlua1RvQmVzdFNpemUoKTsKKyAgICAKICAg
ICAgICAgdm9pZCBkZWxldGVSZWxlYXNlZFdlYWtCdWNrZXRzKCk7CiAKICAgICAgICAgVmFsdWVU
eXBlKiByZWhhc2godW5zaWduZWQgbmV3VGFibGVTaXplLCBWYWx1ZVR5cGUqIGVudHJ5KTsKQEAg
LTExNDksNyArMTE1MSw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBtX2tleUNvdW50IC09
IHJlbW92ZWRCdWNrZXRDb3VudDsKIAogICAgICAgICBpZiAoc2hvdWxkU2hyaW5rKCkpCi0gICAg
ICAgICAgICBzaHJpbmsoKTsKKyAgICAgICAgICAgIHNocmlua1RvQmVzdFNpemUoKTsKICAgICAg
ICAgCiAgICAgICAgIGludGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CiAgICAgICAgIHJl
dHVybiByZW1vdmVkQnVja2V0Q291bnQ7CkBAIC0xMTk2LDYgKzExOTgsMjkgQEAgbmFtZXNwYWNl
IFdURiB7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1
ZSwgdHlwZW5hbWUgRXh0cmFjdG9yLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBU
cmFpdHMsIHR5cGVuYW1lIEtleVRyYWl0cz4KKyAgICBjb25zdGV4cHIgdW5zaWduZWQgSGFzaFRh
YmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFp
dHM+Ojpjb21wdXRlQmVzdFRhYmxlU2l6ZSh1bnNpZ25lZCBrZXlDb3VudCkKKyAgICB7CisgICAg
ICAgIHVuc2lnbmVkIGJlc3RUYWJsZVNpemUgPSBXVEY6OnJvdW5kVXBUb1Bvd2VyT2ZUd28oa2V5
Q291bnQpICogMjsKKworICAgICAgICAvLyBXaXRoIG1heExvYWQgYXQgMS8yIGFuZCBtaW5Mb2Fk
IGF0IDEvNiwgb3VyIGF2ZXJhZ2UgbG9hZCBpcyAyLzYuCisgICAgICAgIC8vIElmIHdlIGFyZSBn
ZXR0aW5nIGhhbGZ3YXkgYmV0d2VlbiAyLzYgYW5kIDEvMiAocGFzdCA1LzEyKSwgd2UgZG91Ymxl
IHRoZSBzaXplIHRvIGF2b2lkIGJlaW5nIHRvbyBjbG9zZSB0bworICAgICAgICAvLyBsb2FkTWF4
IGFuZCBicmluZyB0aGUgcmF0aW8gY2xvc2UgdG8gMi82LiBUaGlzIGdpdmUgdXMgYSBsb2FkIGlu
IHRoZSBib3VuZHMgWzMvMTIsIDUvMTIpLgorICAgICAgICBib29sIGFib3ZlVGhyZWVRdWFydGVy
TG9hZCA9IGtleUNvdW50ICogMTIgPj0gYmVzdFRhYmxlU2l6ZSAqIDU7CisgICAgICAgIGlmIChh
Ym92ZVRocmVlUXVhcnRlckxvYWQpCisgICAgICAgICAgICBiZXN0VGFibGVTaXplICo9IDI7CisK
KyAgICAgICAgdW5zaWduZWQgbWluaW11bVRhYmxlU2l6ZSA9IEtleVRyYWl0czo6bWluaW11bVRh
YmxlU2l6ZTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWF4PHVuc2lnbmVkPihiZXN0VGFibGVTaXpl
LCBtaW5pbXVtVGFibGVTaXplKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXks
IHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlv
bnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgorICAgIHZvaWQgSGFzaFRh
YmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlUcmFp
dHM+OjpzaHJpbmtUb0Jlc3RTaXplKCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIG1pbmltdW1U
YWJsZVNpemUgPSBLZXlUcmFpdHM6Om1pbmltdW1UYWJsZVNpemU7CisgICAgICAgIHJlaGFzaChz
dGQ6Om1heDx1bnNpZ25lZD4obWluaW11bVRhYmxlU2l6ZSwgY29tcHV0ZUJlc3RUYWJsZVNpemUo
bV9rZXlDb3VudCkpLCBudWxscHRyKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5j
dGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgogICAgIHZvaWQgSGFz
aFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RvciwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzLCBLZXlU
cmFpdHM+OjpkZWxldGVSZWxlYXNlZFdlYWtCdWNrZXRzKCkKICAgICB7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX3RhYmxlU2l6ZTsgKytpKSB7CkBAIC0xMzAxLDE3ICsxMzI2
LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGlmICghb3RoZXJLZXlDb3VudCkKICAgICAg
ICAgICAgIHJldHVybjsKIAotICAgICAgICB1bnNpZ25lZCBiZXN0VGFibGVTaXplID0gV1RGOjpy
b3VuZFVwVG9Qb3dlck9mVHdvKG90aGVyS2V5Q291bnQpICogMjsKLQotICAgICAgICAvLyBXaXRo
IG1heExvYWQgYXQgMS8yIGFuZCBtaW5Mb2FkIGF0IDEvNiwgb3VyIGF2ZXJhZ2UgbG9hZCBpcyAy
LzYuCi0gICAgICAgIC8vIElmIHdlIGFyZSBnZXR0aW5nIGhhbGZ3YXkgYmV0d2VlbiAyLzYgYW5k
IDEvMiAocGFzdCA1LzEyKSwgd2UgZG91YmxlIHRoZSBzaXplIHRvIGF2b2lkIGJlaW5nIHRvbyBj
bG9zZSB0bwotICAgICAgICAvLyBsb2FkTWF4IGFuZCBicmluZyB0aGUgcmF0aW8gY2xvc2UgdG8g
Mi82LiBUaGlzIGdpdmUgdXMgYSBsb2FkIGluIHRoZSBib3VuZHMgWzMvMTIsIDUvMTIpLgotICAg
ICAgICBib29sIGFib3ZlVGhyZWVRdWFydGVyTG9hZCA9IG90aGVyS2V5Q291bnQgKiAxMiA+PSBi
ZXN0VGFibGVTaXplICogNTsKLSAgICAgICAgaWYgKGFib3ZlVGhyZWVRdWFydGVyTG9hZCkKLSAg
ICAgICAgICAgIGJlc3RUYWJsZVNpemUgKj0gMjsKLQotICAgICAgICB1bnNpZ25lZCBtaW5pbXVt
VGFibGVTaXplID0gS2V5VHJhaXRzOjptaW5pbXVtVGFibGVTaXplOwotICAgICAgICBtX3RhYmxl
U2l6ZSA9IHN0ZDo6bWF4PHVuc2lnbmVkPihiZXN0VGFibGVTaXplLCBtaW5pbXVtVGFibGVTaXpl
KTsKKyAgICAgICAgbV90YWJsZVNpemUgPSBjb21wdXRlQmVzdFRhYmxlU2l6ZShvdGhlcktleUNv
dW50KTsKICAgICAgICAgbV90YWJsZVNpemVNYXNrID0gbV90YWJsZVNpemUgLSAxOwogICAgICAg
ICBtX2tleUNvdW50ID0gb3RoZXJLZXlDb3VudDsKICAgICAgICAgbV90YWJsZSA9IGFsbG9jYXRl
VGFibGUobV90YWJsZVNpemUpOwpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjQ0MjMwKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTktMDQtMTIgIFJ5b3N1a2UgTml3YSAg
PHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSGFzaFRhYmxlOjpyZW1vdmVJZiBhbHdheXMg
c2hyaW5rcyB0aGUgaGFzaCB0YWJsZSBieSBoYWxmIGV2ZW4gaWYgdGhlcmUgaXMgbm90aGluZyBs
ZWZ0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTY2
ODEKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBBZGRlZCB0
ZXN0cy4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hTZXQuY3BwOgor
ICAgICAgICAoV1RGX0hhc2hTZXQuUmVtb3ZlSWYpOgorCShXVEZfSGFzaFNldC5SZW1vdmVJZlNo
cmlua1RvQmVzdFNpemUpOgorCiAyMDE5LTA0LTEyICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxz
b25AYXBwbGUuY29tPgogCiAgICAgICAgIFVwZGF0ZSBBdWRpb1Nlc3Npb24gcm91dGUgc2hhcmlu
ZyBwb2xpY3kKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hTZXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hTZXQuY3Bw
CShyZXZpc2lvbiAyNDQyMzApCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNo
U2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDY2LDQgKzQ2Niw0MCBAQCBURVNUKFdURl9IYXNo
U2V0LCBSZW1vdmVSYW5kb20pCiAgICAgQVNTRVJUX1RSVUUoc2V0MS5pc0VtcHR5KCkpOwogfQog
CitURVNUKFdURl9IYXNoU2V0LCBSZW1vdmVJZikKK3sKKyAgICBIYXNoU2V0PHVuc2lnbmVkPiBz
ZXQxIHsgMSwgMiwgMywgNCwgNSB9OworICAgIEFTU0VSVF9FUShzZXQxLnNpemUoKSwgNXUpOwor
ICAgIHNldDEucmVtb3ZlSWYoW10gKHVuc2lnbmVkIGl0ZW0pIHsgcmV0dXJuIGl0ZW0gJSAyOyAg
fSk7CisgICAgc2V0MS5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAgQVNTRVJUX1RSVUUoIXNldDEu
Y29udGFpbnMoMSkpOworICAgIEFTU0VSVF9UUlVFKHNldDEuY29udGFpbnMoMikpOworICAgIEFT
U0VSVF9UUlVFKCFzZXQxLmNvbnRhaW5zKDMpKTsKKyAgICBBU1NFUlRfVFJVRShzZXQxLmNvbnRh
aW5zKDQpKTsKKyAgICBBU1NFUlRfVFJVRSghc2V0MS5jb250YWlucyg1KSk7CisgICAgQVNTRVJU
X0VRKHNldDEuc2l6ZSgpLCAydSk7Cit9CisKK1RFU1QoV1RGX0hhc2hTZXQsIFJlbW92ZUlmU2hy
aW5rVG9CZXN0U2l6ZSkKK3sKKyAgICBIYXNoU2V0PHVuc2lnbmVkPiBzZXQxOworICAgIHNldDEu
YWRkKDEpOworICAgIHVuc2lnbmVkIG9yaWdpbmFsQ2FwYWNpdHkgPSBzZXQxLmNhcGFjaXR5KCk7
CisgICAgd2hpbGUgKHNldDEuY2FwYWNpdHkoKSA8IG9yaWdpbmFsQ2FwYWNpdHkgKiA0KQorICAg
ICAgICBzZXQxLmFkZChzZXQxLnNpemUoKSArIDEpOworICAgIHNldDEucmVtb3ZlSWYoW10gKHVu
c2lnbmVkIGl0ZW0pIHsgcmV0dXJuIGl0ZW0gIT0gMTsgfSk7CisgICAgc2V0MS5jaGVja0NvbnNp
c3RlbmN5KCk7CisgICAgQVNTRVJUX0VRKHNldDEuc2l6ZSgpLCAxdSk7CisgICAgQVNTRVJUX0VR
KHNldDEuY2FwYWNpdHkoKSwgb3JpZ2luYWxDYXBhY2l0eSk7CisKKyAgICBzZXQxLmNsZWFyKCk7
CisgICAgc2V0MS5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAgd2hpbGUgKHNldDEuY2FwYWNpdHko
KSA8IG9yaWdpbmFsQ2FwYWNpdHkgKiA4KQorICAgICAgICBzZXQxLmFkZChzZXQxLnNpemUoKSAr
IDEpOworICAgIHNldDEucmVtb3ZlSWYoW29yaWdpbmFsQ2FwYWNpdHldICh1bnNpZ25lZCBpdGVt
KSB7IHJldHVybiBpdGVtID49IG9yaWdpbmFsQ2FwYWNpdHkgLyAyOyB9KTsKKyAgICBzZXQxLmNo
ZWNrQ29uc2lzdGVuY3koKTsKKyAgICBBU1NFUlRfRVEoc2V0MS5zaXplKCksIG9yaWdpbmFsQ2Fw
YWNpdHkgLyAyIC0gMSk7CisgICAgQVNTRVJUX0VRKHNldDEuY2FwYWNpdHkoKSwgb3JpZ2luYWxD
YXBhY2l0eSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>367881</attachid>
            <date>2019-04-19 23:22:17 -0700</date>
            <delta_ts>2019-04-20 07:38:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-196681-20190419232216.patch</filename>
            <type>text/plain</type>
            <size>1859</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNDQ0ODIpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE5LTA0LTE5ICBSeW9zdWtlIE5pd2EgIDxybml3
YUB3ZWJraXQub3JnPgorCisgICAgICAgIEhhc2hUYWJsZTo6cmVtb3ZlSWYgYWx3YXlzIHNocmlu
a3MgdGhlIGhhc2ggdGFibGUgYnkgaGFsZiBldmVuIGlmIHRoZXJlIGlzIG5vdGhpbmcgbGVmdAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk2NjgxCisg
ICAgICAgIDxyZGFyOi8vcHJvYmxlbS80OTkxNzc2ND4KKworICAgICAgICBBZGRyZXNzIERhcmlu
J3MgY29tbWVudHMgYnkgcmVtb3ZpbmcgdGhlIGV4cGxpY2l0IHR5cGUgZnJvbSBzdGQ6Om1heC4K
KworICAgICAgICAqIHd0Zi9IYXNoVGFibGUuaDoKKyAgICAgICAgKFdURjo6S2V5VHJhaXRzPjo6
Y29tcHV0ZUJlc3RUYWJsZVNpemUpOgorICAgICAgICAoV1RGOjpLZXlUcmFpdHM+OjpzaHJpbmtU
b0Jlc3RTaXplKToKKwogMjAxOS0wNC0xOCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29t
PgogCiAgICAgICAgIFtpT1NdIEltcHJvdmUgZGV0ZWN0aW9uIG9mIHdoZW4gd2ViIHZpZXdzIGdv
IHRvIGJhY2tncm91bmQgLyBmb3JlZ3JvdW5kCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9IYXNoVGFi
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaAkocmV2aXNpb24g
MjQ0NDgyKQorKysgU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEyMTAsMTQgKzEyMTAsMTQgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgICAgICBiZXN0VGFi
bGVTaXplICo9IDI7CiAKICAgICAgICAgdW5zaWduZWQgbWluaW11bVRhYmxlU2l6ZSA9IEtleVRy
YWl0czo6bWluaW11bVRhYmxlU2l6ZTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWF4PHVuc2lnbmVk
PihiZXN0VGFibGVTaXplLCBtaW5pbXVtVGFibGVTaXplKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bWF4KGJlc3RUYWJsZVNpemUsIG1pbmltdW1UYWJsZVNpemUpOwogICAgIH0KIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEV4dHJhY3RvciwgdHlw
ZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzLCB0eXBlbmFtZSBLZXlUcmFpdHM+
CiAgICAgdm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdG9yLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHMsIEtleVRyYWl0cz46OnNocmlua1RvQmVzdFNpemUoKQogICAgIHsKICAgICAgICAg
dW5zaWduZWQgbWluaW11bVRhYmxlU2l6ZSA9IEtleVRyYWl0czo6bWluaW11bVRhYmxlU2l6ZTsK
LSAgICAgICAgcmVoYXNoKHN0ZDo6bWF4PHVuc2lnbmVkPihtaW5pbXVtVGFibGVTaXplLCBjb21w
dXRlQmVzdFRhYmxlU2l6ZShtX2tleUNvdW50KSksIG51bGxwdHIpOworICAgICAgICByZWhhc2go
c3RkOjptYXgobWluaW11bVRhYmxlU2l6ZSwgY29tcHV0ZUJlc3RUYWJsZVNpemUobV9rZXlDb3Vu
dCkpLCBudWxscHRyKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVu
YW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5
cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgo=
</data>
<flag name="review"
          id="384213"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>