<?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>201633</bug_id>
          
          <creation_ts>2019-09-09 23:18:37 -0700</creation_ts>
          <short_desc>[JSC] Remove CheckAdd in JetStream2/async-fs&apos;s Math.random function</short_desc>
          <delta_ts>2019-09-22 02:08:32 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>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="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1569461</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-09-09 23:18:37 -0700</bug_when>
    <thetext>Math.random function implementation in async-fs repeatedly emits CheckAdd.
And this makes PutGlobalVariable un-sunkable, and bloats many code that is not inherently necessary.

 35     return function() {
 36         // Robert Jenkins&apos; 32 bit integer hash function.
 37         seed = ((seed + 0x7ed55d16) + (seed &lt;&lt; 12))  &amp; 0xffffffff;
 38         seed = ((seed ^ 0xc761c23c) ^ (seed &gt;&gt;&gt; 19)) &amp; 0xffffffff;
 39         seed = ((seed + 0x165667b1) + (seed &lt;&lt; 5))   &amp; 0xffffffff;
 40         seed = ((seed + 0xd3a2646c) ^ (seed &lt;&lt; 9))   &amp; 0xffffffff;
 41         seed = ((seed + 0xfd7046c5) + (seed &lt;&lt; 3))   &amp; 0xffffffff;
 42         seed = ((seed ^ 0xb55a4f09) ^ (seed &gt;&gt;&gt; 16)) &amp; 0xffffffff;
 43         return (seed &amp; 0xfffffff) / 0x10000000;
 44     };

But seems that `&amp; 0xffffffff` is saying that we only care lower 32bit. I would like to check how to remove the above check-add and make this efficient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1572294</commentid>
    <comment_count>1</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-09-19 01:35:57 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #0)
&gt; Math.random function implementation in async-fs repeatedly emits CheckAdd.
&gt; And this makes PutGlobalVariable un-sunkable, and bloats many code that is
&gt; not inherently necessary.
&gt; 
&gt;  35     return function() {
&gt;  36         // Robert Jenkins&apos; 32 bit integer hash function.
&gt;  37         seed = ((seed + 0x7ed55d16) + (seed &lt;&lt; 12))  &amp; 0xffffffff;
&gt;  38         seed = ((seed ^ 0xc761c23c) ^ (seed &gt;&gt;&gt; 19)) &amp; 0xffffffff;
&gt;  39         seed = ((seed + 0x165667b1) + (seed &lt;&lt; 5))   &amp; 0xffffffff;
&gt;  40         seed = ((seed + 0xd3a2646c) ^ (seed &lt;&lt; 9))   &amp; 0xffffffff;
&gt;  41         seed = ((seed + 0xfd7046c5) + (seed &lt;&lt; 3))   &amp; 0xffffffff;
&gt;  42         seed = ((seed ^ 0xb55a4f09) ^ (seed &gt;&gt;&gt; 16)) &amp; 0xffffffff;
&gt;  43         return (seed &amp; 0xfffffff) / 0x10000000;
&gt;  44     };
&gt; 
&gt; But seems that `&amp; 0xffffffff` is saying that we only care lower 32bit. I
&gt; would like to check how to remove the above check-add and make this
&gt; efficient.

Maybe, we should do integer-range-optimization in B3 to convert CheckAdd to Add. Then, CSE should work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1572295</commentid>
    <comment_count>2</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-09-19 01:42:11 -0700</bug_when>
    <thetext>Or, extend existing DFG IntegerRangeOptimization Phase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1572297</commentid>
    <comment_count>3</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-09-19 02:02:29 -0700</bug_when>
    <thetext>After looking through the code, I think,

1. We can improve things in B3 by analyzing integer-range.
2. But in this case, we can easily improve it in DFG since DFG knows Int52Rep(Int32) semantics while it is encoded into shift in B3

And the most common case in general JS code with Int52 is `ArithAdd(Int52Rep(Int32), Int52Constant)`, which will be shown when we decide upgrading Int32 to Int52. After considering about it, I&apos;m guessing this is soooooooooo common than I expected (maybe, the most common pattern for Int52 calculation?). If we can remove CheckOverflow from this, we could improve many programs (even in non-FTL) very easily.
While (1) is attractive, just adding (2) adhocly also looks nice to me. (1) looks nice to me too, it could potentially improve bound-checked Wasm code...? I&apos;m not sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573014</commentid>
    <comment_count>4</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-09-20 18:30:01 -0700</bug_when>
    <thetext>Or, we can do this easily in B3, checking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573017</commentid>
    <comment_count>5</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-09-20 19:09:32 -0700</bug_when>
    <thetext>Do it in B3 first. I found that this is super easy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573034</commentid>
    <comment_count>6</comment_count>
      <attachid>379305</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-09-20 22:09:28 -0700</bug_when>
    <thetext>Created attachment 379305
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573037</commentid>
    <comment_count>7</comment_count>
      <attachid>379306</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-09-20 22:17:47 -0700</bug_when>
    <thetext>Created attachment 379306
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573040</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-09-20 22:55:55 -0700</bug_when>
    <thetext>&lt;rdar://problem/55583016&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573135</commentid>
    <comment_count>9</comment_count>
      <attachid>379306</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-09-21 20:56:48 -0700</bug_when>
    <thetext>Comment on attachment 379306
Patch

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

Nice.  r=me

&gt; Source/JavaScriptCore/ChangeLog:25
&gt; +        This converts many CheckAdd in JetStream2/async-fs&apos;s hot function simple Add, removes bunch of unnecessary instructions which exist because of this OSR exit.

/function simple Add, removes bunch/function to simple Add, and removes a bunch/.

&gt; Source/JavaScriptCore/b3/testb3_5.cpp:950
&gt; +    CHECK(invoke&lt;int64_t&gt;(*code, value) == 2ll * static_cast&lt;int32_t&gt;(value));

Why is this static_cast necessary?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573171</commentid>
    <comment_count>10</comment_count>
      <attachid>379306</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-09-22 00:18:53 -0700</bug_when>
    <thetext>Comment on attachment 379306
Patch

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

&gt;&gt; Source/JavaScriptCore/b3/testb3_5.cpp:950
&gt;&gt; +    CHECK(invoke&lt;int64_t&gt;(*code, value) == 2ll * static_cast&lt;int32_t&gt;(value));
&gt; 
&gt; Why is this static_cast necessary?

This code is precisely simulating the B3&apos;s code, like, first performing SExt8, just for readability.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573172</commentid>
    <comment_count>11</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-09-22 00:19:47 -0700</bug_when>
    <thetext>Committed r250198: &lt;https://trac.webkit.org/changeset/250198&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573174</commentid>
    <comment_count>12</comment_count>
      <attachid>379306</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-09-22 00:38:03 -0700</bug_when>
    <thetext>Comment on attachment 379306
Patch

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

&gt;&gt;&gt; Source/JavaScriptCore/b3/testb3_5.cpp:950
&gt;&gt;&gt; +    CHECK(invoke&lt;int64_t&gt;(*code, value) == 2ll * static_cast&lt;int32_t&gt;(value));
&gt;&gt; 
&gt;&gt; Why is this static_cast necessary?
&gt; 
&gt; This code is precisely simulating the B3&apos;s code, like, first performing SExt8, just for readability.

Yeah, but you don&apos;t do this for the SExt16 case below.  I noticed the inconsistency and wondered why.  It&apos;s not a big deal as the code behaves the same either way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573176</commentid>
    <comment_count>13</comment_count>
      <attachid>379306</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-09-22 02:02:58 -0700</bug_when>
    <thetext>Comment on attachment 379306
Patch

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

&gt;&gt;&gt;&gt; Source/JavaScriptCore/b3/testb3_5.cpp:950
&gt;&gt;&gt;&gt; +    CHECK(invoke&lt;int64_t&gt;(*code, value) == 2ll * static_cast&lt;int32_t&gt;(value));
&gt;&gt;&gt; 
&gt;&gt;&gt; Why is this static_cast necessary?
&gt;&gt; 
&gt;&gt; This code is precisely simulating the B3&apos;s code, like, first performing SExt8, just for readability.
&gt; 
&gt; Yeah, but you don&apos;t do this for the SExt16 case below.  I noticed the inconsistency and wondered why.  It&apos;s not a big deal as the code behaves the same either way.

I see, I&apos;ll add the static_cast to SExt16 case too!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573177</commentid>
    <comment_count>14</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-09-22 02:08:32 -0700</bug_when>
    <thetext>Committed r250199: &lt;https://trac.webkit.org/changeset/250199&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379305</attachid>
            <date>2019-09-20 22:09:28 -0700</date>
            <delta_ts>2019-09-20 22:17:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201633-20190920220927.patch</filename>
            <type>text/plain</type>
            <size>10571</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwMTMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
NzU5ZWZhNGUxYjBhOTc0YmY3OWU0YmM5YmI3OGFmODY3ZDQ2MjVkLi5jMDU5NGJiNmFiYzg3YTM0
NWZhNWYwMjk1MTY1MzdhN2FiNTQyYThhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MiBAQAorMjAxOS0wOS0yMCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIFJlbW92ZSBDaGVja0FkZCBpbiBKZXRTdHJlYW0yL2FzeW5jLWZz
J3MgTWF0aC5yYW5kb20gZnVuY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwMTYzMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEludDUyUmVwIGlzIHVzZWQgaW4gREZHIGFuZCBGVEwgdG8gY2FsY3Vs
YXRlIEludDUyIHRoaW5ncyBmYXN0ZXIuIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgd2hlbiB1c2Vy
IGNvZGUgc2VlIHVpbnQzMl90IHR5cGUuCisgICAgICAgIEluIEpTLCB3ZSBoYW5kbGVzIEludDMy
IHdlbGwsIGJ1dCBpZiB0aGUgdmFsdWUgZXhjZWVkcyBJbnQzMiByYW5nZSAobGlrZSwgdXNpbmcg
MHhmZmZmZmZmZiksIHdlIHVzZSBJbnQ1MiBpbnN0ZWFkIG5vdCB0byBmYWxsYmFjayB0byBEb3Vi
bGUuCisKKyAgICAgICAgVGhlIHByb2JsZW0gaXMgdGhhdCB3ZSBkbyBub3QgaGF2ZSBvcHRpbWl6
YXRpb25zIGZvciBJbnQ1MidzIG92ZXJmbG93IGNoZWNrcy4gVGhpcyBlbWl0cyBtYW55IEFyaXRo
QWRkKEludDUyUmVwIHggMiwgQ2hlY2tPdmVyZmxvdykuIEVhY2gKKyAgICAgICAgb2YgdGhlbSBl
bWl0cyBPU1IgZXhpdCwgd2hpY2ggcHJldmVudHMgZGVhZC1zdG9yZS1lbGltaW5hdGlvbiBpbiBC
MywgYW5kIG1ha2VzIFZhbHVlVG9JbnQzMihJbnQ1MikgYWxpdmUgaWYgaXQgaXMgcmVmZXJlbmNl
ZCBmcm9tIHNvbWUgdmFyaWFibGUgd2hpY2gKKyAgICAgICAgY2FuIGJlIHNlZW4gaWYgT1NSIGV4
aXQgb2NjdXJzLgorCisgICAgICAgIEluIHRoaXMgcGF0Y2gsIHdlIHBlcmZvcm0gc3RyZW5ndGgt
cmVkdWN0aW9uIGZvciBDaGVja0FkZCwgY29udmVydGluZyB0byBBZGQuIFdlIGFscmVhZHkgaGF2
ZSBzdWNoIGEgdGhpbmcuIEJ1dCB0aGUgZXhpc3Rpbmcgb25lIGRvZXMgbm90IGhhbmRsZSBpbnN0
cnVjdGlvbnMKKyAgICAgICAgd2VsbCBlbWl0dGVkIHdoZW4gSW50NTIgaXMgdXNlZC4KKworICAg
ICAgICBXaGVuIEludDUyIGlzIHVzZWQsIHdlIHR5cGljYWxseSBoYXZlIHRoZSBzZXF1ZW5jZSBs
aWtlLAorCisgICAgICAgICAgICBJbnQ2NCBANzggPSBTRXh0MzIoQDczLCBERkc6QDY3PEludDUy
PikgLy8gV2lkZW4gSW50MzIgdG8gSW50NjQKKyAgICAgICAgICAgIEludDY0IEA4MSA9IFNobChA
NzgsICQxMihAODApLCBERkc6QDE2MjxJbnQ1Mj4pIC8vIENvbnZlcnQgSW50MzIgdG8gSW50NTIK
KworICAgICAgICBXaGlsZSB3ZSBoYXZlIFNobCBoYW5kbGluZyBmb3IgaW50ZWdlci1yYW5nZSBv
cHRpbWl6YXRpb24gaW4gQjNSZWR1Y2VTdHJlbmd0aCwgd2UgbGFjayBoYW5kbGluZyBvZiBTRXh0
MzIgd2hpbGUgaXQgaXMgdmVyeSBlYXN5LgorICAgICAgICBUaGlzIHBhdGNoIGFkZHMgU0V4dDgs
IFNFeHQxNiwgU0V4dDMyLCBhbmQgWkV4dDMyIGhhbmRsaW5nIHRvIEIzUmVkdWNlU3RyZW5ndGgn
cyBpbnRlZ2VyIHJhbmdlIGFuYWx5c2lzLgorICAgICAgICBUaGlzIGNvbnZlcnRzIG1hbnkgQ2hl
Y2tBZGQgaW4gSmV0U3RyZWFtMi9hc3luYy1mcydzIGhvdCBmdW5jdGlvbiBzaW1wbGUgQWRkLCBy
ZW1vdmVzIGJ1bmNoIG9mIHVubmVjZXNzYXJ5IGluc3RydWN0aW9ucyB3aGljaCBleGlzdCBiZWNh
dXNlIG9mIHRoaXMgT1NSIGV4aXQuCisgICAgICAgIFdlIGNhbiBzZWUgNX4lIGltcHJvdmVtZW50
IGluIEpldFN0cmVhbTIvYXN5bmMtZnMuCisKKyAgICAgICAgKiBiMy9CM1JlZHVjZVN0cmVuZ3Ro
LmNwcDoKKyAgICAgICAgKiBiMy90ZXN0YjMuaDoKKyAgICAgICAgKGludDE2T3BlcmFuZHMpOgor
ICAgICAgICAoaW50OE9wZXJhbmRzKToKKyAgICAgICAgKiBiMy90ZXN0YjNfMS5jcHA6CisgICAg
ICAgIChydW4pOgorICAgICAgICAqIGIzL3Rlc3RiM181LmNwcDoKKyAgICAgICAgKHRlc3RDaGVj
a0FkZFJlbW92ZUNoZWNrV2l0aFNFeHQ4KToKKyAgICAgICAgKHRlc3RDaGVja0FkZFJlbW92ZUNo
ZWNrV2l0aFNFeHQxNik6CisgICAgICAgICh0ZXN0Q2hlY2tBZGRSZW1vdmVDaGVja1dpdGhTRXh0
MzIpOgorICAgICAgICAodGVzdENoZWNrQWRkUmVtb3ZlQ2hlY2tXaXRoWkV4dDMyKToKKwogMjAx
OS0wOS0yMCAgUGF1bG8gTWF0b3MgIDxwbWF0b3NAaWdhbGlhLmNvbT4KIAogICAgICAgICBJbXBs
ZW1lbnQgbWVtb3J5IG1vbml0b3JpbmcgZnVuY3Rpb25zIGZvciBMaW51eCBPUwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCmluZGV4IDlhOGM5YWIyNjI2
ZWFhMDVmYjY4OTEwODE1ZjZhZjQ5YWJlMjUyZGIuLjhmOTk0MDE4MWYzOWUxMzhmMTZmNjYzOWYy
Yzc1MWNmNzBmNmQyM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Jl
ZHVjZVN0cmVuZ3RoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VT
dHJlbmd0aC5jcHAKQEAgLTM5MSw2ICszOTEsMTUgQEAgY2xhc3MgSW50UmFuZ2UgewogICAgICAg
ICB9CiAgICAgfQogCisgICAgSW50UmFuZ2UgekV4dDMyKCkKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX21pbiA+PSBJTlQzMl9NSU4pOworICAgICAgICBBU1NFUlQobV9tYXggPD0gSU5UMzJfTUFY
KTsKKyAgICAgICAgaW50MzJfdCBtaW4gPSBtX21pbjsKKyAgICAgICAgaW50MzJfdCBtYXggPSBt
X21heDsKKyAgICAgICAgcmV0dXJuIEludFJhbmdlKHN0YXRpY19jYXN0PHVpbnQ2NF90PihzdGF0
aWNfY2FzdDx1aW50MzJfdD4obWluKSksIHN0YXRpY19jYXN0PHVpbnQ2NF90PihzdGF0aWNfY2Fz
dDx1aW50MzJfdD4obWF4KSkpOworICAgIH0KKwogcHJpdmF0ZToKICAgICBpbnQ2NF90IG1fbWlu
IHsgMCB9OwogICAgIGludDY0X3QgbV9tYXggeyAwIH07CkBAIC0yNTk1LDYgKzI2MDQsMTQgQEAg
Y2xhc3MgUmVkdWNlU3RyZW5ndGggewogICAgICAgICAgICAgcmV0dXJuIHJhbmdlRm9yKHZhbHVl
LT5jaGlsZCgwKSwgdGltZVRvTGl2ZSAtIDEpLm11bCgKICAgICAgICAgICAgICAgICByYW5nZUZv
cih2YWx1ZS0+Y2hpbGQoMSksIHRpbWVUb0xpdmUgLSAxKSwgdmFsdWUtPnR5cGUoKSk7CiAKKyAg
ICAgICAgY2FzZSBTRXh0ODoKKyAgICAgICAgY2FzZSBTRXh0MTY6CisgICAgICAgIGNhc2UgU0V4
dDMyOgorICAgICAgICAgICAgcmV0dXJuIHJhbmdlRm9yKHZhbHVlLT5jaGlsZCgwKSwgdGltZVRv
TGl2ZSAtIDEpOworCisgICAgICAgIGNhc2UgWkV4dDMyOgorICAgICAgICAgICAgcmV0dXJuIHJh
bmdlRm9yKHZhbHVlLT5jaGlsZCgwKSwgdGltZVRvTGl2ZSAtIDEpLnpFeHQzMigpOworCiAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL3Rlc3RiMy5oCmluZGV4IDkyNGM5YzVkZDg1YTM5MGQ0NWM3Mjg2M2ZlODgzOTljYTMxYWE1
YTAuLjM1ZDAxNzU2ZDUzMmE3MWVjMDdmZTQwM2VmN2E1MjUwYjVmYzZmNjEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvdGVzdGIzLmgKQEAgLTI3MCw2ICsyNzAsOCBAQCBzdHJ1Y3QgT3BlcmFuZCB7CiAK
IHR5cGVkZWYgT3BlcmFuZDxpbnQ2NF90PiBJbnQ2NE9wZXJhbmQ7CiB0eXBlZGVmIE9wZXJhbmQ8
aW50MzJfdD4gSW50MzJPcGVyYW5kOwordHlwZWRlZiBPcGVyYW5kPGludDE2X3Q+IEludDE2T3Bl
cmFuZDsKK3R5cGVkZWYgT3BlcmFuZDxpbnQ4X3Q+IEludDhPcGVyYW5kOwogCiAjZGVmaW5lIE1B
S0VfT1BFUkFORCh2YWx1ZSkgT3BlcmFuZDxkZWNsdHlwZSh2YWx1ZSk+IHsgI3ZhbHVlLCB2YWx1
ZSB9CiAKQEAgLTM0Myw2ICszNDUsMzggQEAgaW5saW5lIFZlY3RvcjxJbnQzMk9wZXJhbmQ+IGlu
dDMyT3BlcmFuZHMoKQogICAgIHJldHVybiBvcGVyYW5kczsKIH0KIAoraW5saW5lIFZlY3RvcjxJ
bnQxNk9wZXJhbmQ+IGludDE2T3BlcmFuZHMoKQoreworICAgIFZlY3RvcjxJbnQxNk9wZXJhbmQ+
IG9wZXJhbmRzKHsKKyAgICAgICAgeyAiMCIsIDAgfSwKKyAgICAgICAgeyAiMSIsIDEgfSwKKyAg
ICAgICAgeyAiLTEiLCAtMSB9LAorICAgICAgICB7ICI0MiIsIDQyIH0sCisgICAgICAgIHsgIi00
MiIsIC00MiB9LAorICAgICAgICB7ICJpbnQxNi1tYXgiLCBzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dDE2X3Q+OjptYXgoKSB9LAorICAgICAgICB7ICJpbnQxNi1taW4iLCBzdGQ6Om51bWVyaWNfbGlt
aXRzPGludDE2X3Q+OjptaW4oKSB9LAorICAgICAgICB7ICJ1aW50MTYtbWF4Iiwgc3RhdGljX2Nh
c3Q8aW50MTZfdD4oc3RkOjpudW1lcmljX2xpbWl0czx1aW50MTZfdD46Om1heCgpKSB9LAorICAg
ICAgICB7ICJ1aW50MTYtbWluIiwgc3RhdGljX2Nhc3Q8aW50MTZfdD4oc3RkOjpudW1lcmljX2xp
bWl0czx1aW50MTZfdD46Om1pbigpKSB9CisgICAgfSk7CisgICAgcmV0dXJuIG9wZXJhbmRzOwor
fQorCitpbmxpbmUgVmVjdG9yPEludDhPcGVyYW5kPiBpbnQ4T3BlcmFuZHMoKQoreworICAgIFZl
Y3RvcjxJbnQ4T3BlcmFuZD4gb3BlcmFuZHMoeworICAgICAgICB7ICIwIiwgMCB9LAorICAgICAg
ICB7ICIxIiwgMSB9LAorICAgICAgICB7ICItMSIsIC0xIH0sCisgICAgICAgIHsgIjQyIiwgNDIg
fSwKKyAgICAgICAgeyAiLTQyIiwgLTQyIH0sCisgICAgICAgIHsgImludDgtbWF4Iiwgc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQ4X3Q+OjptYXgoKSB9LAorICAgICAgICB7ICJpbnQ4LW1pbiIsIHN0
ZDo6bnVtZXJpY19saW1pdHM8aW50OF90Pjo6bWluKCkgfSwKKyAgICAgICAgeyAidWludDgtbWF4
Iiwgc3RhdGljX2Nhc3Q8aW50OF90PihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ4X3Q+OjptYXgo
KSkgfSwKKyAgICAgICAgeyAidWludDgtbWluIiwgc3RhdGljX2Nhc3Q8aW50OF90PihzdGQ6Om51
bWVyaWNfbGltaXRzPHVpbnQ4X3Q+OjptaW4oKSkgfQorICAgIH0pOworICAgIHJldHVybiBvcGVy
YW5kczsKK30KKwogaW5saW5lIHZvaWQgYWRkMzIoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBz
cmMxLCBHUFJSZWcgc3JjMiwgR1BSUmVnIGRlc3QpCiB7CiAgICAgaWYgKHNyYzIgPT0gZGVzdCkK
QEAgLTc2MSw2ICs3OTUsMTAgQEAgdm9pZCB0ZXN0Q2hlY2tBZGRBcmd1bWVudEFsaWFzaW5nNjQo
KTsKIHZvaWQgdGVzdENoZWNrQWRkQXJndW1lbnRBbGlhc2luZzMyKCk7CiB2b2lkIHRlc3RDaGVj
a0FkZFNlbGZPdmVyZmxvdzY0KCk7CiB2b2lkIHRlc3RDaGVja0FkZFNlbGZPdmVyZmxvdzMyKCk7
Cit2b2lkIHRlc3RDaGVja0FkZFJlbW92ZUNoZWNrV2l0aFNFeHQ4KGludDhfdCk7Cit2b2lkIHRl
c3RDaGVja0FkZFJlbW92ZUNoZWNrV2l0aFNFeHQxNihpbnQxNl90KTsKK3ZvaWQgdGVzdENoZWNr
QWRkUmVtb3ZlQ2hlY2tXaXRoU0V4dDMyKGludDMyX3QpOwordm9pZCB0ZXN0Q2hlY2tBZGRSZW1v
dmVDaGVja1dpdGhaRXh0MzIoaW50MzJfdCk7CiB2b2lkIHRlc3RDaGVja1N1YkltbSgpOwogdm9p
ZCB0ZXN0Q2hlY2tTdWJCYWRJbW0oKTsKIHZvaWQgdGVzdENoZWNrU3ViKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzEuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL3Rlc3RiM18xLmNwcAppbmRleCAyN2FjYmU2MDYxZWQ2NmNkNjEwNzQwZDRkYzgw
MDU1ZDE0NGZkMzdiLi44OGMyOTU0ODAyZjcyOTE4ZTZmNzlmYzQ4Mzc3YzhhMjEzMTcyZDgzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzEuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMS5jcHAKQEAgLTM0Miw2ICszNDIsMTEgQEAg
dm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQogICAgIFJVTih0ZXN0SVRvRFJlZHVjZWRUb0lU
b0Y2NEFyZygpKTsKICAgICBSVU4odGVzdElUb0RSZWR1Y2VkVG9JVG9GMzJBcmcoKSk7CiAKKyAg
ICBSVU5fVU5BUlkodGVzdENoZWNrQWRkUmVtb3ZlQ2hlY2tXaXRoU0V4dDgsIGludDhPcGVyYW5k
cygpKTsKKyAgICBSVU5fVU5BUlkodGVzdENoZWNrQWRkUmVtb3ZlQ2hlY2tXaXRoU0V4dDE2LCBp
bnQxNk9wZXJhbmRzKCkpOworICAgIFJVTl9VTkFSWSh0ZXN0Q2hlY2tBZGRSZW1vdmVDaGVja1dp
dGhTRXh0MzIsIGludDMyT3BlcmFuZHMoKSk7CisgICAgUlVOX1VOQVJZKHRlc3RDaGVja0FkZFJl
bW92ZUNoZWNrV2l0aFpFeHQzMiwgaW50MzJPcGVyYW5kcygpKTsKKwogICAgIFJVTih0ZXN0U3Rv
cmUzMig0NCkpOwogICAgIFJVTih0ZXN0U3RvcmVDb25zdGFudCg0OSkpOwogICAgIFJVTih0ZXN0
U3RvcmVDb25zdGFudFB0cig0OSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL3Rlc3RiM181LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfNS5jcHAK
aW5kZXggM2QwYjI5YTZmNWM2ZTBhYzFlNzI3Mzc5ZTUwZjgyYmJhZWI3OWIzMS4uMDYzN2M2MmM2
MmNiY2QxY2RjODRlMjk5ZTcyZGExYmNlZWNiMWYyMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL3Rlc3RiM181LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
dGVzdGIzXzUuY3BwCkBAIC05MzIsNiArOTMyLDc4IEBAIHZvaWQgdGVzdENoZWNrQWRkU2VsZk92
ZXJmbG93MzIoKQogICAgIENIRUNLKGludm9rZTxpbnQzMl90PigqY29kZSwgc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpID09IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46
Om1heCgpKTsKIH0KIAordm9pZCB0ZXN0Q2hlY2tBZGRSZW1vdmVDaGVja1dpdGhTRXh0OChpbnQ4
X3QgdmFsdWUpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9
IHByb2MuYWRkQmxvY2soKTsKKyAgICBWYWx1ZSogYXJnID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVl
Pihwcm9jLCBTRXh0MzIsIE9yaWdpbigpLCByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFNF
eHQ4LCBPcmlnaW4oKSwgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBUcnVuYywgT3JpZ2lu
KCksIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIwKSkpKTsKKyAgICBDaGVja1ZhbHVlKiBjaGVja0FkZCA9IHJvb3Qt
PmFwcGVuZE5ldzxDaGVja1ZhbHVlPihwcm9jLCBDaGVja0FkZCwgT3JpZ2luKCksIGFyZywgYXJn
KTsKKyAgICBjaGVja0FkZC0+c2V0R2VuZXJhdG9yKAorICAgICAgICBbJl0gKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICBB
bGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAg
ICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEIzT29wcyk7CisgICAgICAgIH0pOworICAgIHJvb3Qt
PmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBjaGVja0FkZCk7
CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKworICAgIENIRUNLKGludm9r
ZTxpbnQ2NF90PigqY29kZSwgdmFsdWUpID09IDJsbCAqIHN0YXRpY19jYXN0PGludDMyX3Q+KHZh
bHVlKSk7Cit9CisKK3ZvaWQgdGVzdENoZWNrQWRkUmVtb3ZlQ2hlY2tXaXRoU0V4dDE2KGludDE2
X3QgdmFsdWUpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9
IHByb2MuYWRkQmxvY2soKTsKKyAgICBWYWx1ZSogYXJnID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVl
Pihwcm9jLCBTRXh0MzIsIE9yaWdpbigpLCByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFNF
eHQxNiwgT3JpZ2luKCksIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgVHJ1bmMsIE9yaWdp
bigpLCByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQ
UkluZm86OmFyZ3VtZW50R1BSMCkpKSk7CisgICAgQ2hlY2tWYWx1ZSogY2hlY2tBZGQgPSByb290
LT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4ocHJvYywgQ2hlY2tBZGQsIE9yaWdpbigpLCBhcmcsIGFy
Zyk7CisgICAgY2hlY2tBZGQtPnNldEdlbmVyYXRvcigKKyAgICAgICAgWyZdIChDQ2FsbEhlbHBl
cnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAg
QWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAg
ICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihCM09vcHMpOworICAgICAgICB9KTsKKyAgICByb290
LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgY2hlY2tBZGQp
OworCisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisKKyAgICBDSEVDSyhpbnZv
a2U8aW50NjRfdD4oKmNvZGUsIHZhbHVlKSA9PSAybGwgKiB2YWx1ZSk7Cit9CisKK3ZvaWQgdGVz
dENoZWNrQWRkUmVtb3ZlQ2hlY2tXaXRoU0V4dDMyKGludDMyX3QgdmFsdWUpCit7CisgICAgUHJv
Y2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAg
ICBWYWx1ZSogYXJnID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTRXh0MzIsIE9yaWdp
bigpLCByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFRydW5jLCBPcmlnaW4oKSwgcm9vdC0+
YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjApKSk7CisgICAgQ2hlY2tWYWx1ZSogY2hlY2tBZGQgPSByb290LT5hcHBlbmROZXc8
Q2hlY2tWYWx1ZT4ocHJvYywgQ2hlY2tBZGQsIE9yaWdpbigpLCBhcmcsIGFyZyk7CisgICAgY2hl
Y2tBZGQtPnNldEdlbmVyYXRvcigKKyAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgQWxsb3dNYWNyb1Nj
cmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgaml0LmFi
b3J0V2l0aFJlYXNvbihCM09vcHMpOworICAgICAgICB9KTsKKyAgICByb290LT5hcHBlbmROZXdD
b250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgY2hlY2tBZGQpOworCisgICAgYXV0
byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisKKyAgICBDSEVDSyhpbnZva2U8aW50NjRfdD4o
KmNvZGUsIHZhbHVlKSA9PSAybGwgKiB2YWx1ZSk7Cit9CisKK3ZvaWQgdGVzdENoZWNrQWRkUmVt
b3ZlQ2hlY2tXaXRoWkV4dDMyKGludDMyX3QgdmFsdWUpCit7CisgICAgUHJvY2VkdXJlIHByb2M7
CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBWYWx1ZSogYXJn
ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBaRXh0MzIsIE9yaWdpbigpLCByb290LT5h
cHBlbmROZXc8VmFsdWU+KHByb2MsIFRydW5jLCBPcmlnaW4oKSwgcm9vdC0+YXBwZW5kTmV3PEFy
Z3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKSk7
CisgICAgQ2hlY2tWYWx1ZSogY2hlY2tBZGQgPSByb290LT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4o
cHJvYywgQ2hlY2tBZGQsIE9yaWdpbigpLCBhcmcsIGFyZyk7CisgICAgY2hlY2tBZGQtPnNldEdl
bmVyYXRvcigKKyAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3Rl
clVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgaml0LmFib3J0V2l0aFJlYXNv
bihCM09vcHMpOworICAgICAgICB9KTsKKyAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUo
cHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgY2hlY2tBZGQpOworCisgICAgYXV0byBjb2RlID0gY29t
cGlsZVByb2MocHJvYyk7CisKKyAgICBDSEVDSyhpbnZva2U8dWludDY0X3Q+KCpjb2RlLCB2YWx1
ZSkgPT0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KDIgKiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSkpKTsKK30KKwogdm9pZCB0ZXN0Q2hlY2tTdWJJbW0o
KQogewogICAgIFByb2NlZHVyZSBwcm9jOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379306</attachid>
            <date>2019-09-20 22:17:47 -0700</date>
            <delta_ts>2019-09-21 20:56:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201633-20190920221746.patch</filename>
            <type>text/plain</type>
            <size>10571</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUwMTMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
NzU5ZWZhNGUxYjBhOTc0YmY3OWU0YmM5YmI3OGFmODY3ZDQ2MjVkLi5iODE4ZTdjMmRmOTFmYThj
MDUyOThjMjQ3OTg4NzY4OTE5MDQwYjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MiBAQAorMjAxOS0wOS0yMCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIFJlbW92ZSBDaGVja0FkZCBpbiBKZXRTdHJlYW0yL2FzeW5jLWZz
J3MgTWF0aC5yYW5kb20gZnVuY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwMTYzMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEludDUyUmVwIGlzIHVzZWQgaW4gREZHIGFuZCBGVEwgdG8gY2FsY3Vs
YXRlIEludDUyIHRoaW5ncyBmYXN0ZXIuIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgd2hlbiB1c2Vy
IGNvZGUgc2VlIHVpbnQzMl90IHR5cGUuCisgICAgICAgIEluIEpTLCB3ZSBoYW5kbGVzIEludDMy
IHdlbGwsIGJ1dCBpZiB0aGUgdmFsdWUgZXhjZWVkcyBJbnQzMiByYW5nZSAobGlrZSwgdXNpbmcg
MHhmZmZmZmZmZiksIHdlIHVzZSBJbnQ1MiBpbnN0ZWFkIG5vdCB0byBmYWxsYmFjayB0byBEb3Vi
bGUuCisKKyAgICAgICAgVGhlIHByb2JsZW0gaXMgdGhhdCB3ZSBkbyBub3QgaGF2ZSBvcHRpbWl6
YXRpb25zIGZvciBJbnQ1MidzIG92ZXJmbG93IGNoZWNrcy4gVGhpcyBlbWl0cyBtYW55IEFyaXRo
QWRkKEludDUyUmVwIHggMiwgQ2hlY2tPdmVyZmxvdykuIEVhY2gKKyAgICAgICAgb2YgdGhlbSBl
bWl0cyBPU1IgZXhpdCwgd2hpY2ggcHJldmVudHMgZGVhZC1zdG9yZS1lbGltaW5hdGlvbiBpbiBC
MywgYW5kIG1ha2VzIFZhbHVlVG9JbnQzMihJbnQ1MikgYWxpdmUgaWYgaXQgaXMgcmVmZXJlbmNl
ZCBmcm9tIHNvbWUgdmFyaWFibGUgd2hpY2gKKyAgICAgICAgY2FuIGJlIHNlZW4gaWYgT1NSIGV4
aXQgb2NjdXJzLgorCisgICAgICAgIEluIHRoaXMgcGF0Y2gsIHdlIHBlcmZvcm0gc3RyZW5ndGgt
cmVkdWN0aW9uIGZvciBDaGVja0FkZCwgY29udmVydGluZyB0byBBZGQuIFdlIGFscmVhZHkgaGF2
ZSBzdWNoIGEgdGhpbmcuIEJ1dCB0aGUgZXhpc3Rpbmcgb25lIGRvZXMgbm90IGhhbmRsZSBpbnN0
cnVjdGlvbnMKKyAgICAgICAgd2VsbCBlbWl0dGVkIHdoZW4gSW50NTIgaXMgdXNlZC4KKworICAg
ICAgICBXaGVuIEludDUyIGlzIHVzZWQsIHdlIHR5cGljYWxseSBoYXZlIHRoZSBzZXF1ZW5jZSBs
aWtlLAorCisgICAgICAgICAgICBJbnQ2NCBANzggPSBTRXh0MzIoQDczLCBERkc6QDY3PEludDUy
PikgLy8gV2lkZW4gSW50MzIgdG8gSW50NjQKKyAgICAgICAgICAgIEludDY0IEA4MSA9IFNobChA
NzgsICQxMihAODApLCBERkc6QDE2MjxJbnQ1Mj4pIC8vIENvbnZlcnQgSW50MzIgdG8gSW50NTIK
KworICAgICAgICBXaGlsZSB3ZSBoYXZlIFNobCBoYW5kbGluZyBmb3IgaW50ZWdlci1yYW5nZSBv
cHRpbWl6YXRpb24gaW4gQjNSZWR1Y2VTdHJlbmd0aCwgd2UgbGFjayBoYW5kbGluZyBvZiBTRXh0
MzIgd2hpbGUgaXQgaXMgdmVyeSBlYXN5LgorICAgICAgICBUaGlzIHBhdGNoIGFkZHMgU0V4dDgs
IFNFeHQxNiwgU0V4dDMyLCBhbmQgWkV4dDMyIGhhbmRsaW5nIHRvIEIzUmVkdWNlU3RyZW5ndGgn
cyBpbnRlZ2VyIHJhbmdlIGFuYWx5c2lzLgorICAgICAgICBUaGlzIGNvbnZlcnRzIG1hbnkgQ2hl
Y2tBZGQgaW4gSmV0U3RyZWFtMi9hc3luYy1mcydzIGhvdCBmdW5jdGlvbiBzaW1wbGUgQWRkLCBy
ZW1vdmVzIGJ1bmNoIG9mIHVubmVjZXNzYXJ5IGluc3RydWN0aW9ucyB3aGljaCBleGlzdCBiZWNh
dXNlIG9mIHRoaXMgT1NSIGV4aXQuCisgICAgICAgIFdlIGNhbiBzZWUgfjUlIGltcHJvdmVtZW50
IGluIEpldFN0cmVhbTIvYXN5bmMtZnMuCisKKyAgICAgICAgKiBiMy9CM1JlZHVjZVN0cmVuZ3Ro
LmNwcDoKKyAgICAgICAgKiBiMy90ZXN0YjMuaDoKKyAgICAgICAgKGludDE2T3BlcmFuZHMpOgor
ICAgICAgICAoaW50OE9wZXJhbmRzKToKKyAgICAgICAgKiBiMy90ZXN0YjNfMS5jcHA6CisgICAg
ICAgIChydW4pOgorICAgICAgICAqIGIzL3Rlc3RiM181LmNwcDoKKyAgICAgICAgKHRlc3RDaGVj
a0FkZFJlbW92ZUNoZWNrV2l0aFNFeHQ4KToKKyAgICAgICAgKHRlc3RDaGVja0FkZFJlbW92ZUNo
ZWNrV2l0aFNFeHQxNik6CisgICAgICAgICh0ZXN0Q2hlY2tBZGRSZW1vdmVDaGVja1dpdGhTRXh0
MzIpOgorICAgICAgICAodGVzdENoZWNrQWRkUmVtb3ZlQ2hlY2tXaXRoWkV4dDMyKToKKwogMjAx
OS0wOS0yMCAgUGF1bG8gTWF0b3MgIDxwbWF0b3NAaWdhbGlhLmNvbT4KIAogICAgICAgICBJbXBs
ZW1lbnQgbWVtb3J5IG1vbml0b3JpbmcgZnVuY3Rpb25zIGZvciBMaW51eCBPUwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCmluZGV4IDlhOGM5YWIyNjI2
ZWFhMDVmYjY4OTEwODE1ZjZhZjQ5YWJlMjUyZGIuLjhmOTk0MDE4MWYzOWUxMzhmMTZmNjYzOWYy
Yzc1MWNmNzBmNmQyM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Jl
ZHVjZVN0cmVuZ3RoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VT
dHJlbmd0aC5jcHAKQEAgLTM5MSw2ICszOTEsMTUgQEAgY2xhc3MgSW50UmFuZ2UgewogICAgICAg
ICB9CiAgICAgfQogCisgICAgSW50UmFuZ2UgekV4dDMyKCkKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX21pbiA+PSBJTlQzMl9NSU4pOworICAgICAgICBBU1NFUlQobV9tYXggPD0gSU5UMzJfTUFY
KTsKKyAgICAgICAgaW50MzJfdCBtaW4gPSBtX21pbjsKKyAgICAgICAgaW50MzJfdCBtYXggPSBt
X21heDsKKyAgICAgICAgcmV0dXJuIEludFJhbmdlKHN0YXRpY19jYXN0PHVpbnQ2NF90PihzdGF0
aWNfY2FzdDx1aW50MzJfdD4obWluKSksIHN0YXRpY19jYXN0PHVpbnQ2NF90PihzdGF0aWNfY2Fz
dDx1aW50MzJfdD4obWF4KSkpOworICAgIH0KKwogcHJpdmF0ZToKICAgICBpbnQ2NF90IG1fbWlu
IHsgMCB9OwogICAgIGludDY0X3QgbV9tYXggeyAwIH07CkBAIC0yNTk1LDYgKzI2MDQsMTQgQEAg
Y2xhc3MgUmVkdWNlU3RyZW5ndGggewogICAgICAgICAgICAgcmV0dXJuIHJhbmdlRm9yKHZhbHVl
LT5jaGlsZCgwKSwgdGltZVRvTGl2ZSAtIDEpLm11bCgKICAgICAgICAgICAgICAgICByYW5nZUZv
cih2YWx1ZS0+Y2hpbGQoMSksIHRpbWVUb0xpdmUgLSAxKSwgdmFsdWUtPnR5cGUoKSk7CiAKKyAg
ICAgICAgY2FzZSBTRXh0ODoKKyAgICAgICAgY2FzZSBTRXh0MTY6CisgICAgICAgIGNhc2UgU0V4
dDMyOgorICAgICAgICAgICAgcmV0dXJuIHJhbmdlRm9yKHZhbHVlLT5jaGlsZCgwKSwgdGltZVRv
TGl2ZSAtIDEpOworCisgICAgICAgIGNhc2UgWkV4dDMyOgorICAgICAgICAgICAgcmV0dXJuIHJh
bmdlRm9yKHZhbHVlLT5jaGlsZCgwKSwgdGltZVRvTGl2ZSAtIDEpLnpFeHQzMigpOworCiAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL3Rlc3RiMy5oCmluZGV4IDkyNGM5YzVkZDg1YTM5MGQ0NWM3Mjg2M2ZlODgzOTljYTMxYWE1
YTAuLjM1ZDAxNzU2ZDUzMmE3MWVjMDdmZTQwM2VmN2E1MjUwYjVmYzZmNjEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvdGVzdGIzLmgKQEAgLTI3MCw2ICsyNzAsOCBAQCBzdHJ1Y3QgT3BlcmFuZCB7CiAK
IHR5cGVkZWYgT3BlcmFuZDxpbnQ2NF90PiBJbnQ2NE9wZXJhbmQ7CiB0eXBlZGVmIE9wZXJhbmQ8
aW50MzJfdD4gSW50MzJPcGVyYW5kOwordHlwZWRlZiBPcGVyYW5kPGludDE2X3Q+IEludDE2T3Bl
cmFuZDsKK3R5cGVkZWYgT3BlcmFuZDxpbnQ4X3Q+IEludDhPcGVyYW5kOwogCiAjZGVmaW5lIE1B
S0VfT1BFUkFORCh2YWx1ZSkgT3BlcmFuZDxkZWNsdHlwZSh2YWx1ZSk+IHsgI3ZhbHVlLCB2YWx1
ZSB9CiAKQEAgLTM0Myw2ICszNDUsMzggQEAgaW5saW5lIFZlY3RvcjxJbnQzMk9wZXJhbmQ+IGlu
dDMyT3BlcmFuZHMoKQogICAgIHJldHVybiBvcGVyYW5kczsKIH0KIAoraW5saW5lIFZlY3RvcjxJ
bnQxNk9wZXJhbmQ+IGludDE2T3BlcmFuZHMoKQoreworICAgIFZlY3RvcjxJbnQxNk9wZXJhbmQ+
IG9wZXJhbmRzKHsKKyAgICAgICAgeyAiMCIsIDAgfSwKKyAgICAgICAgeyAiMSIsIDEgfSwKKyAg
ICAgICAgeyAiLTEiLCAtMSB9LAorICAgICAgICB7ICI0MiIsIDQyIH0sCisgICAgICAgIHsgIi00
MiIsIC00MiB9LAorICAgICAgICB7ICJpbnQxNi1tYXgiLCBzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dDE2X3Q+OjptYXgoKSB9LAorICAgICAgICB7ICJpbnQxNi1taW4iLCBzdGQ6Om51bWVyaWNfbGlt
aXRzPGludDE2X3Q+OjptaW4oKSB9LAorICAgICAgICB7ICJ1aW50MTYtbWF4Iiwgc3RhdGljX2Nh
c3Q8aW50MTZfdD4oc3RkOjpudW1lcmljX2xpbWl0czx1aW50MTZfdD46Om1heCgpKSB9LAorICAg
ICAgICB7ICJ1aW50MTYtbWluIiwgc3RhdGljX2Nhc3Q8aW50MTZfdD4oc3RkOjpudW1lcmljX2xp
bWl0czx1aW50MTZfdD46Om1pbigpKSB9CisgICAgfSk7CisgICAgcmV0dXJuIG9wZXJhbmRzOwor
fQorCitpbmxpbmUgVmVjdG9yPEludDhPcGVyYW5kPiBpbnQ4T3BlcmFuZHMoKQoreworICAgIFZl
Y3RvcjxJbnQ4T3BlcmFuZD4gb3BlcmFuZHMoeworICAgICAgICB7ICIwIiwgMCB9LAorICAgICAg
ICB7ICIxIiwgMSB9LAorICAgICAgICB7ICItMSIsIC0xIH0sCisgICAgICAgIHsgIjQyIiwgNDIg
fSwKKyAgICAgICAgeyAiLTQyIiwgLTQyIH0sCisgICAgICAgIHsgImludDgtbWF4Iiwgc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQ4X3Q+OjptYXgoKSB9LAorICAgICAgICB7ICJpbnQ4LW1pbiIsIHN0
ZDo6bnVtZXJpY19saW1pdHM8aW50OF90Pjo6bWluKCkgfSwKKyAgICAgICAgeyAidWludDgtbWF4
Iiwgc3RhdGljX2Nhc3Q8aW50OF90PihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ4X3Q+OjptYXgo
KSkgfSwKKyAgICAgICAgeyAidWludDgtbWluIiwgc3RhdGljX2Nhc3Q8aW50OF90PihzdGQ6Om51
bWVyaWNfbGltaXRzPHVpbnQ4X3Q+OjptaW4oKSkgfQorICAgIH0pOworICAgIHJldHVybiBvcGVy
YW5kczsKK30KKwogaW5saW5lIHZvaWQgYWRkMzIoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBz
cmMxLCBHUFJSZWcgc3JjMiwgR1BSUmVnIGRlc3QpCiB7CiAgICAgaWYgKHNyYzIgPT0gZGVzdCkK
QEAgLTc2MSw2ICs3OTUsMTAgQEAgdm9pZCB0ZXN0Q2hlY2tBZGRBcmd1bWVudEFsaWFzaW5nNjQo
KTsKIHZvaWQgdGVzdENoZWNrQWRkQXJndW1lbnRBbGlhc2luZzMyKCk7CiB2b2lkIHRlc3RDaGVj
a0FkZFNlbGZPdmVyZmxvdzY0KCk7CiB2b2lkIHRlc3RDaGVja0FkZFNlbGZPdmVyZmxvdzMyKCk7
Cit2b2lkIHRlc3RDaGVja0FkZFJlbW92ZUNoZWNrV2l0aFNFeHQ4KGludDhfdCk7Cit2b2lkIHRl
c3RDaGVja0FkZFJlbW92ZUNoZWNrV2l0aFNFeHQxNihpbnQxNl90KTsKK3ZvaWQgdGVzdENoZWNr
QWRkUmVtb3ZlQ2hlY2tXaXRoU0V4dDMyKGludDMyX3QpOwordm9pZCB0ZXN0Q2hlY2tBZGRSZW1v
dmVDaGVja1dpdGhaRXh0MzIoaW50MzJfdCk7CiB2b2lkIHRlc3RDaGVja1N1YkltbSgpOwogdm9p
ZCB0ZXN0Q2hlY2tTdWJCYWRJbW0oKTsKIHZvaWQgdGVzdENoZWNrU3ViKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzEuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL3Rlc3RiM18xLmNwcAppbmRleCAyN2FjYmU2MDYxZWQ2NmNkNjEwNzQwZDRkYzgw
MDU1ZDE0NGZkMzdiLi44OGMyOTU0ODAyZjcyOTE4ZTZmNzlmYzQ4Mzc3YzhhMjEzMTcyZDgzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzEuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMS5jcHAKQEAgLTM0Miw2ICszNDIsMTEgQEAg
dm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQogICAgIFJVTih0ZXN0SVRvRFJlZHVjZWRUb0lU
b0Y2NEFyZygpKTsKICAgICBSVU4odGVzdElUb0RSZWR1Y2VkVG9JVG9GMzJBcmcoKSk7CiAKKyAg
ICBSVU5fVU5BUlkodGVzdENoZWNrQWRkUmVtb3ZlQ2hlY2tXaXRoU0V4dDgsIGludDhPcGVyYW5k
cygpKTsKKyAgICBSVU5fVU5BUlkodGVzdENoZWNrQWRkUmVtb3ZlQ2hlY2tXaXRoU0V4dDE2LCBp
bnQxNk9wZXJhbmRzKCkpOworICAgIFJVTl9VTkFSWSh0ZXN0Q2hlY2tBZGRSZW1vdmVDaGVja1dp
dGhTRXh0MzIsIGludDMyT3BlcmFuZHMoKSk7CisgICAgUlVOX1VOQVJZKHRlc3RDaGVja0FkZFJl
bW92ZUNoZWNrV2l0aFpFeHQzMiwgaW50MzJPcGVyYW5kcygpKTsKKwogICAgIFJVTih0ZXN0U3Rv
cmUzMig0NCkpOwogICAgIFJVTih0ZXN0U3RvcmVDb25zdGFudCg0OSkpOwogICAgIFJVTih0ZXN0
U3RvcmVDb25zdGFudFB0cig0OSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL3Rlc3RiM181LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfNS5jcHAK
aW5kZXggM2QwYjI5YTZmNWM2ZTBhYzFlNzI3Mzc5ZTUwZjgyYmJhZWI3OWIzMS4uMDYzN2M2MmM2
MmNiY2QxY2RjODRlMjk5ZTcyZGExYmNlZWNiMWYyMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL3Rlc3RiM181LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
dGVzdGIzXzUuY3BwCkBAIC05MzIsNiArOTMyLDc4IEBAIHZvaWQgdGVzdENoZWNrQWRkU2VsZk92
ZXJmbG93MzIoKQogICAgIENIRUNLKGludm9rZTxpbnQzMl90PigqY29kZSwgc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpID09IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46
Om1heCgpKTsKIH0KIAordm9pZCB0ZXN0Q2hlY2tBZGRSZW1vdmVDaGVja1dpdGhTRXh0OChpbnQ4
X3QgdmFsdWUpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9
IHByb2MuYWRkQmxvY2soKTsKKyAgICBWYWx1ZSogYXJnID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVl
Pihwcm9jLCBTRXh0MzIsIE9yaWdpbigpLCByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFNF
eHQ4LCBPcmlnaW4oKSwgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBUcnVuYywgT3JpZ2lu
KCksIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIwKSkpKTsKKyAgICBDaGVja1ZhbHVlKiBjaGVja0FkZCA9IHJvb3Qt
PmFwcGVuZE5ldzxDaGVja1ZhbHVlPihwcm9jLCBDaGVja0FkZCwgT3JpZ2luKCksIGFyZywgYXJn
KTsKKyAgICBjaGVja0FkZC0+c2V0R2VuZXJhdG9yKAorICAgICAgICBbJl0gKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICBB
bGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAg
ICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEIzT29wcyk7CisgICAgICAgIH0pOworICAgIHJvb3Qt
PmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBjaGVja0FkZCk7
CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKworICAgIENIRUNLKGludm9r
ZTxpbnQ2NF90PigqY29kZSwgdmFsdWUpID09IDJsbCAqIHN0YXRpY19jYXN0PGludDMyX3Q+KHZh
bHVlKSk7Cit9CisKK3ZvaWQgdGVzdENoZWNrQWRkUmVtb3ZlQ2hlY2tXaXRoU0V4dDE2KGludDE2
X3QgdmFsdWUpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9
IHByb2MuYWRkQmxvY2soKTsKKyAgICBWYWx1ZSogYXJnID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVl
Pihwcm9jLCBTRXh0MzIsIE9yaWdpbigpLCByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFNF
eHQxNiwgT3JpZ2luKCksIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgVHJ1bmMsIE9yaWdp
bigpLCByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQ
UkluZm86OmFyZ3VtZW50R1BSMCkpKSk7CisgICAgQ2hlY2tWYWx1ZSogY2hlY2tBZGQgPSByb290
LT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4ocHJvYywgQ2hlY2tBZGQsIE9yaWdpbigpLCBhcmcsIGFy
Zyk7CisgICAgY2hlY2tBZGQtPnNldEdlbmVyYXRvcigKKyAgICAgICAgWyZdIChDQ2FsbEhlbHBl
cnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAg
QWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAg
ICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihCM09vcHMpOworICAgICAgICB9KTsKKyAgICByb290
LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgY2hlY2tBZGQp
OworCisgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisKKyAgICBDSEVDSyhpbnZv
a2U8aW50NjRfdD4oKmNvZGUsIHZhbHVlKSA9PSAybGwgKiB2YWx1ZSk7Cit9CisKK3ZvaWQgdGVz
dENoZWNrQWRkUmVtb3ZlQ2hlY2tXaXRoU0V4dDMyKGludDMyX3QgdmFsdWUpCit7CisgICAgUHJv
Y2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAg
ICBWYWx1ZSogYXJnID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTRXh0MzIsIE9yaWdp
bigpLCByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFRydW5jLCBPcmlnaW4oKSwgcm9vdC0+
YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjApKSk7CisgICAgQ2hlY2tWYWx1ZSogY2hlY2tBZGQgPSByb290LT5hcHBlbmROZXc8
Q2hlY2tWYWx1ZT4ocHJvYywgQ2hlY2tBZGQsIE9yaWdpbigpLCBhcmcsIGFyZyk7CisgICAgY2hl
Y2tBZGQtPnNldEdlbmVyYXRvcigKKyAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgQWxsb3dNYWNyb1Nj
cmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgaml0LmFi
b3J0V2l0aFJlYXNvbihCM09vcHMpOworICAgICAgICB9KTsKKyAgICByb290LT5hcHBlbmROZXdD
b250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgY2hlY2tBZGQpOworCisgICAgYXV0
byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisKKyAgICBDSEVDSyhpbnZva2U8aW50NjRfdD4o
KmNvZGUsIHZhbHVlKSA9PSAybGwgKiB2YWx1ZSk7Cit9CisKK3ZvaWQgdGVzdENoZWNrQWRkUmVt
b3ZlQ2hlY2tXaXRoWkV4dDMyKGludDMyX3QgdmFsdWUpCit7CisgICAgUHJvY2VkdXJlIHByb2M7
CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBWYWx1ZSogYXJn
ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBaRXh0MzIsIE9yaWdpbigpLCByb290LT5h
cHBlbmROZXc8VmFsdWU+KHByb2MsIFRydW5jLCBPcmlnaW4oKSwgcm9vdC0+YXBwZW5kTmV3PEFy
Z3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKSk7
CisgICAgQ2hlY2tWYWx1ZSogY2hlY2tBZGQgPSByb290LT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4o
cHJvYywgQ2hlY2tBZGQsIE9yaWdpbigpLCBhcmcsIGFyZyk7CisgICAgY2hlY2tBZGQtPnNldEdl
bmVyYXRvcigKKyAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3Rl
clVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgaml0LmFib3J0V2l0aFJlYXNv
bihCM09vcHMpOworICAgICAgICB9KTsKKyAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUo
cHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgY2hlY2tBZGQpOworCisgICAgYXV0byBjb2RlID0gY29t
cGlsZVByb2MocHJvYyk7CisKKyAgICBDSEVDSyhpbnZva2U8dWludDY0X3Q+KCpjb2RlLCB2YWx1
ZSkgPT0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KDIgKiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSkpKTsKK30KKwogdm9pZCB0ZXN0Q2hlY2tTdWJJbW0o
KQogewogICAgIFByb2NlZHVyZSBwcm9jOwo=
</data>
<flag name="review"
          id="395011"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>