<?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>162342</bug_id>
          
          <creation_ts>2016-09-21 09:40:10 -0700</creation_ts>
          <short_desc>Optimize B3-&gt;Air lowering of Fence on ARM</short_desc>
          <delta_ts>2016-09-28 13:33: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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>162343</dependson>
          <blocked>162316</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1232090</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-21 09:40:10 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234503</commentid>
    <comment_count>1</comment_count>
      <attachid>290107</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-28 13:01:41 -0700</bug_when>
    <thetext>Created attachment 290107
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234512</commentid>
    <comment_count>2</comment_count>
      <attachid>290107</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-09-28 13:20:54 -0700</bug_when>
    <thetext>Comment on attachment 290107
the patch

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

r=me

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:2053
&gt; +            if (!fence-&gt;write &amp;&amp; !fence-&gt;read)
&gt;                  return;

Does this happen in practice? Seems strange to specify a no-op fence. Maybe we can prohibit it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234520</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-28 13:31:45 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 290107 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=290107&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:2053
&gt; &gt; +            if (!fence-&gt;write &amp;&amp; !fence-&gt;read)
&gt; &gt;                  return;
&gt; 
&gt; Does this happen in practice? Seems strange to specify a no-op fence. Maybe
&gt; we can prohibit it.

It&apos;s weird, but I think it&apos;s harmless to allow it and potentially harmful to prohibit it.

I can imagine writing a transformation that somehow removes something from all heap ranges in some part of the B3 IR.  Maybe some phase proves that some HeapRange can&apos;t actually be written to or read from by some mass of code.  Such a phase might render some Fence&apos;s read or write range empty, since if it removes a range that is a superset of those ranges, then the ranges will become empty.  I believe that this is sound: if the program really doesn&apos;t care about some abstract heap and a fence is meant to protect motion of accesses in that abstract heap, then it is correct to weaken the fence.  But this means that the fence may be weakened all the way to the no-op fence.

You could argue that it&apos;s such an optimization&apos;s job to then remove the Fence.  But in my experience, it&apos;s not a good idea to do these mandatory optimizations, where the discovery of an optimization opportunity means that the compiler is obligated to do the optimization.  It buys you nothing but asserts that aren&apos;t catching any bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234522</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-28 13:33:24 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/206539</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290107</attachid>
            <date>2016-09-28 13:01:41 -0700</date>
            <delta_ts>2016-09-28 13:20:54 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>15035</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA2NTM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBA
CisyMDE2LTA5LTI4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
T3B0aW1pemUgQjMtPkFpciBsb3dlcmluZyBvZiBGZW5jZSBvbiBBUk0KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjM0MgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgZ2l2ZXMgdXMgY29tcHJlaGVu
c2l2ZSBzdXBwb3J0IGZvciBzdGFuZGFsb25lIGZlbmNlcyBvbiB4ODYgYW5kIEFSTS4gVGhlIGNo
YW5nZXMgYXJlIGFzCisgICAgICAgIGZvbGxvd3M6CisKKyAgICAgICAgLSBTZXRzIGluIHN0b25l
IHRoZSBydWxlIHRoYXQgdGhlIGhlYXBzIG9mIGEgQjM6OkZlbmNlIHRlbGwgeW91IHdoYXQgdGhl
IGZlbmNlIHByb3RlY3RzLiBJZiB0aGUKKyAgICAgICAgICBmZW5jZSByZWFkcywgaXQgcHJvdGVj
dHMgbW90aW9uIG9mIHN0b3Jlcy4gSWYgdGhlIGZlbmNlIHdyaXRlcywgaXQgcHJvdGVjdHMgbW90
aW9uIG9mIGxvYWRzLgorICAgICAgICAgIFRoaXMgYWxsb3dzIHVzIHRvIGV4cHJlc3MgZm9yIGV4
YW1wbGUgbG9hZC1sb2FkIGZlbmNlcyBpbiBhIHBvcnRhYmxlIHdheTogb24geDg2IHRoZXkgd2ls
bCBqdXN0CisgICAgICAgICAgYmxvY2sgQjMgb3B0aW1pemF0aW9ucyBhbmQgZW1pdCBubyBjb2Rl
LCB3aGlsZSBvbiBBUk0geW91IHdpbGwgZ2V0IHNvbWUgZmVuY2UuCisKKyAgICAgICAgLSBBZGRz
IGNvbXByZWhlbnNpdmUgc3VwcG9ydCBmb3IgV1RGLXN0eWxlIGZlbmNlcyBpbiB0aGUgQVJNIGFz
c2VtYmxlci4gSSBzaW1wbGlmaWVkIGl0IGp1c3QgYSBiaXQKKyAgICAgICAgICB0byBtYXRjaCB3
aGF0IEIzLCB0aGUgbWFpbiBjbGllbnQsIGtub3dzLiBUaGVyZSBhcmUgdGhyZWUgZmVuY2VzOiBN
ZW1vcnlGZW5jZSwgU3RvcmVGZW5jZSwgYW5kCisgICAgICAgICAgTG9hZEZlbmNlLiBPbiB4ODYs
IE1lbW9yeUZlbmNlIGlzIG9ydG9wIHdoaWxlIFN0b3JlRmVuY2UgYW5kIExvYWRGZW5jZSBlbWl0
IG5vIGNvZGUuIE9uIEFSTTY0LAorICAgICAgICAgIE1lbW9yeUZlbmNlIGFuZCBMb2FkRmVuY2Ug
YXJlIGRtYiBpc2ggd2hpbGUgU3RvcmVGZW5jZSBpcyBkbWIgaXNoc3QuCisKKyAgICAgICAgLSBU
ZXN0cyEgVG8gdGVzdCB0aGlzLCBJIG5lZWRlZCB0byB0ZWFjaCB0aGUgZGlzYXNzZW1ibGVyIGhv
dyB0byBkaXNhc3NlbWJsZSBkbWIgaXNoIGFuZCBkbWIKKyAgICAgICAgICBpc2hzdC4gSSB0aGlu
ayB0aGF0IHRoZSBjYW5vbmljYWwgd2F5IHRvIGRvIGl0IHdvdWxkIGJlIHRvIGNyZWF0ZSBhIGdy
b3VwIGZvciBkbWIgYW5kIHRoZW4gdGVhY2gKKyAgICAgICAgICB0aGF0IGdyb3VwIGhvdyB0byBk
ZWNvZGUgdGhlIG9wZXJhbmRzLiBCdXQgSSBkb24ndCBhY3R1YWxseSBrbm93IHdoYXQgYXJlIGFs
bCBvZiB0aGUgd2F5cyBvZgorICAgICAgICAgIGVuY29kaW5nIGRtYiwgc28gSSdkIHJhdGhlciB0
aGF0IHVucmVjb2duaXplZCBlbmNvZGluZ3MgZmFsbCB0aHJvdWdoIHRvIHRoZSAiLmxvbmcgYmxh
aCIKKyAgICAgICAgICBiYWlsb3V0LiBTbywgdGhpcyBjcmVhdGVzIGV4cGxpY2l0IG1hdGNoaW5n
IHJ1bGVzIGZvciAiZG1iIGlzaCIgYW5kICJkbWIgaXNoc3QiLCB3aGljaCBpcyB0aGUKKyAgICAg
ICAgICBtb3N0IGNvbnNlcnZhdGl2ZSB0aGluZyB3ZSBjYW4gZG8uCisKKyAgICAgICAgKiBhc3Nl
bWJsZXIvQVJNNjRBc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QVJNNjRBc3NlbWJsZXI6OmRt
YklTSCk6CisgICAgICAgIChKU0M6OkFSTTY0QXNzZW1ibGVyOjpkbWJJU0hTVCk6CisgICAgICAg
IChKU0M6OkFSTTY0QXNzZW1ibGVyOjpkbWJTWSk6IERlbGV0ZWQuCisgICAgICAgICogYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJB
Uk02NDo6bWVtb3J5RmVuY2UpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojpz
dG9yZUZlbmNlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6bG9hZEZlbmNl
KToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaDoKKyAgICAg
ICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZDb21tb246OnN0b3JlRmVuY2UpOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6bG9hZEZlbmNlKToKKyAgICAgICAgKiBiMy9C
M0ZlbmNlVmFsdWUuaDoKKyAgICAgICAgKiBiMy9CM0xvd2VyVG9BaXIuY3BwOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpsb3dlcik6CisgICAgICAgICogYjMvYWlyL0Fpck9w
Y29kZS5vcGNvZGVzOgorICAgICAgICAqIGIzL3Rlc3RiMy5jcHA6CisgICAgICAgIChKU0M6OkIz
Ojp0ZXN0TWVtb3J5RmVuY2UpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdFN0b3JlRmVuY2UpOgor
ICAgICAgICAoSlNDOjpCMzo6dGVzdExvYWRGZW5jZSk6CisgICAgICAgIChKU0M6OkIzOjpydW4p
OgorICAgICAgICAoSlNDOjpCMzo6dGVzdFg4Nk1GZW5jZSk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkIzOjp0ZXN0WDg2Q29tcGlsZXJGZW5jZSk6IERlbGV0ZWQuCisgICAgICAgICogZGlzYXNz
ZW1ibGVyL0FSTTY0L0E2NERPcGNvZGUuY3BwOgorICAgICAgICAoSlNDOjpBUk02NERpc2Fzc2Vt
Ymxlcjo6QTY0RE9wY29kZURtYklzaDo6Zm9ybWF0KToKKyAgICAgICAgKEpTQzo6QVJNNjREaXNh
c3NlbWJsZXI6OkE2NERPcGNvZGVEbWJJc2hTdDo6Zm9ybWF0KToKKyAgICAgICAgKiBkaXNhc3Nl
bWJsZXIvQVJNNjQvQTY0RE9wY29kZS5oOgorICAgICAgICAoSlNDOjpBUk02NERpc2Fzc2VtYmxl
cjo6QTY0RE9wY29kZURtYklzaDo6b3BOYW1lKToKKyAgICAgICAgKEpTQzo6QVJNNjREaXNhc3Nl
bWJsZXI6OkE2NERPcGNvZGVEbWJJc2hTdDo6b3BOYW1lKToKKwogMjAxNi0wOS0yOCAgSm9zZXBo
IFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIEFkb3B0ICNwcmFnbWEg
b25jZSBpbiBzb21lIGdlbmVyYXRlZCByZXNvdXJjZXMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTTY0QXNzZW1ibGVyLmgJKHJldmlzaW9uIDIwNjUyOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMTQ5Niw5ICsxNDk2LDE0IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAg
IH0KICAgICAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZG1iU1koKQorICAgIEFMV0FZU19JTkxJ
TkUgdm9pZCBkbWJJU0goKQogICAgIHsKLSAgICAgICAgaW5zbigweGQ1MDMzZmJmKTsKKyAgICAg
ICAgaW5zbigweGQ1MDMzYmJmKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZG1i
SVNIU1QoKQorICAgIHsKKyAgICAgICAgaW5zbigweGQ1MDMzYWJmKTsKICAgICB9CiAKICAgICB0
ZW1wbGF0ZTxpbnQgZGF0YXNpemU+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAkocmV2aXNpb24gMjA2NTI5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMyMTUsMTEgKzMyMTUsMjYgQEAgcHVibGljOgogICAgICAgICBt
X2Fzc2VtYmxlci5ub3AoKTsKICAgICB9CiAgICAgCisgICAgLy8gV2UgdGFrZSBtZW1vcnlGZW5j
ZSB0byBtZWFuIGFjcXJlbC4gVGhpcyBoYXMgYWNxcmVsIHNlbWFudGljcyBvbiBBUk02NC4KICAg
ICB2b2lkIG1lbW9yeUZlbmNlKCkKICAgICB7Ci0gICAgICAgIG1fYXNzZW1ibGVyLmRtYlNZKCk7
CisgICAgICAgIG1fYXNzZW1ibGVyLmRtYklTSCgpOwogICAgIH0KIAorICAgIC8vIFdlIHRha2Ug
dGhpcyB0byBtZWFuIHRoYXQgaXQgcHJldmVudHMgbW90aW9uIG9mIG5vcm1hbCBzdG9yZXMuIFRo
YXQncyBhIHN0b3JlIGZlbmNlIG9uIEFSTTY0IChoZW5jZSB0aGUgIlNUIikuCisgICAgdm9pZCBz
dG9yZUZlbmNlKCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmRtYklTSFNUKCk7CisgICAg
fQorCisgICAgLy8gV2UgdGFrZSB0aGlzIHRvIG1lYW4gdGhhdCBpdCBwcmV2ZW50cyBtb3Rpb24g
b2Ygbm9ybWFsIGxvYWRzLiBJZGVhbGx5IHdlJ2QgaGF2ZSBleHByZXNzZWQgdGhpcworICAgIC8v
IHVzaW5nIGRlcGVuZGVuY2llcyBvciBoYWxmIGZlbmNlcywgYnV0IHRoZXJlIGFyZSBjYXNlcyB3
aGVyZSB0aGlzIGlzIGFzIGdvb2QgYXMgaXQgZ2V0cy4gVGhlIG9ubHkKKyAgICAvLyB3YXkgdG8g
Z2V0IGEgc3RhbmRhbG9uZSBsb2FkIGZlbmNlIGluc3RydWN0aW9uIG9uIEFSTSBpcyB0byB1c2Ug
dGhlIElTSCBmZW5jZSwgd2hpY2ggaXMganVzdCBsaWtlCisgICAgLy8gdGhlIG1lbW9yeUZlbmNl
KCkuCisgICAgdm9pZCBsb2FkRmVuY2UoKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuZG1i
SVNIKCk7CisgICAgfQogCiAgICAgLy8gTWlzYyBoZWxwZXIgZnVuY3Rpb25zLgogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlclg4NkNvbW1vbi5oCShyZXZpc2lvbiAyMDY1MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI2MzYsNiArMjYzNiwxNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLm9ybF9pbSgw
LCAwLCBYODZSZWdpc3RlcnM6OmVzcCk7CiAgICAgfQogCisgICAgLy8gV2UgdGFrZSB0aGlzIHRv
IG1lYW4gdGhhdCBpdCBwcmV2ZW50cyBtb3Rpb24gb2Ygbm9ybWFsIHN0b3Jlcy4gU28sIGl0J3Mg
YSBuby1vcCBvbiB4ODYuCisgICAgdm9pZCBzdG9yZUZlbmNlKCkKKyAgICB7CisgICAgfQorCisg
ICAgLy8gV2UgdGFrZSB0aGlzIHRvIG1lYW4gdGhhdCBpdCBwcmV2ZW50cyBtb3Rpb24gb2Ygbm9y
bWFsIGxvYWRzLiBTbywgaXQncyBhIG5vLW9wIG9uIHg4Ni4KKyAgICB2b2lkIGxvYWRGZW5jZSgp
CisgICAgeworICAgIH0KKwogICAgIHN0YXRpYyB2b2lkIHJlcGxhY2VXaXRoSnVtcChDb2RlTG9j
YXRpb25MYWJlbCBpbnN0cnVjdGlvblN0YXJ0LCBDb2RlTG9jYXRpb25MYWJlbCBkZXN0aW5hdGlv
bikKICAgICB7CiAgICAgICAgIFg4NkFzc2VtYmxlcjo6cmVwbGFjZVdpdGhKdW1wKGluc3RydWN0
aW9uU3RhcnQuZXhlY3V0YWJsZUFkZHJlc3MoKSwgZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJl
c3MoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGZW5jZVZhbHVlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRmVuY2VWYWx1ZS5oCShyZXZp
c2lvbiAyMDY1MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGZW5jZVZhbHVlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDkgQEAgcHVibGljOgogICAgIC8vIFRoZSByZWFk
L3dyaXRlIGhlYXBzIGFyZSByZWZsZWN0ZWQgaW4gdGhlIGVmZmVjdHMoKSBvZiB0aGlzIHZhbHVl
LiBUaGUgY29tcGlsZXIgbWF5IGNoYW5nZQogICAgIC8vIHRoZSBsb3dlcmluZyBvZiBhIEZlbmNl
IGJhc2VkIG9uIHRoZSBoZWFwcy4gRm9yIGV4YW1wbGUsIGlmIGEgZmVuY2UgZG9lcyBub3Qgd3Jp
dGUgYW55dGhpbmcKICAgICAvLyB0aGVuIGl0IGlzIHVuZGVyc3Rvb2QgdG8gYmUgYSBzdG9yZS1z
dG9yZSBmZW5jZS4gT24geDg2LCB0aGlzIG1heSBsZWFkIHVzIHRvIG5vdCBlbWl0IGFueQotICAg
IC8vIGNvZGUsIHdoaWxlIG9uIEFSTSB3ZSBtYXkgZW1pdCBhIGNoZWFwZXIgZmVuY2UgKGRtYiBp
c2hzdCBpbnN0ZWFkIG9mIGRtYiBpc2gpLgorICAgIC8vIGNvZGUsIHdoaWxlIG9uIEFSTSB3ZSBt
YXkgZW1pdCBhIGNoZWFwZXIgZmVuY2UgKGRtYiBpc2hzdCBpbnN0ZWFkIG9mIGRtYiBpc2gpLiBX
ZSB3aWxsIGRvCisgICAgLy8gdGhlIHNhbWUgb3B0aW1pemF0aW9uIGZvciBsb2FkLWxvYWQgZmVu
Y2VzLCB3aGljaCBhcmUgZXhwcmVzc2VkIGFzIGEgRmVuY2UgdGhhdCB3cml0ZXMgYnV0CisgICAg
Ly8gZG9lcyBub3QgcmVhZC4KICAgICAvLwogICAgIC8vIFRoaXMgYWJzdHJhY3Rpb24gYWxsb3dz
IHVzIHRvIGNvdmVyIGFsbCBvZiB0aGUgZmVuY2VzIG9uIHg4NiBhbmQgYWxsIG9mIHRoZSBzdGFu
ZGFsb25lIGZlbmNlcwogICAgIC8vIG9uIEFSTS4gWDg2IHJlYWxseSBqdXN0IGhhcyBvbmUgZmVu
Y2U6IG1mZW5jZS4gVGhpcyBmZW5jZSBzaG91bGQgYmUgdXNlZCB0byBwcm90ZWN0IHN0b3JlcwpA
QCAtNjUsNyArNjcsNiBAQCBwdWJsaWM6CiAgICAgLy8gT24gQVJNIHRoZXJlIGFyZSBtYW55IG1v
cmUgZmVuY2VzLiBUaGUgRmVuY2UgaW5zdHJ1Y3Rpb24gaXMgbWVhbnQgdG8gbW9kZWwganVzdCB0
d28gb2YgdGhlbToKICAgICAvLyBkbWIgaXNoIGFuZCBkbWIgaXNoc3QuIFlvdSBjYW4gZW1pdCBh
IGRtYiBpc2hzdCBieSB1c2luZyBhIEZlbmNlIHdpdGggYW4gZW1wdHkgd3JpdGUgaGVhcC4KICAg
ICAvLyBPdGhlcndpc2UsIHlvdSB3aWxsIGdldCBhIGRtYiBpc2guCi0gICAgLy8gRklYTUU6IE1h
a2UgdGhpcyB3b3JrIHJpZ2h0IG9uIEFSTS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2MjM0MgogICAgIC8vIEZJWE1FOiBBZGQgZmVuY2VkIG1lbW9yeSBhY2Nlc3Nl
cy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjM0OQogICAgIC8v
IEZJWE1FOiBBZGQgYSBEZXBlbmQgb3BlcmF0aW9uLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTYyMzUwCiAgICAgSGVhcFJhbmdlIHJlYWQgeyBIZWFwUmFuZ2U6OnRv
cCgpIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAko
cmV2aXNpb24gMjA2NTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fp
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNDksMTAgKzIwNDksMTggQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIAogICAgICAgICBjYXNlIEZlbmNlOiB7CiAgICAgICAgICAgICBGZW5jZVZhbHVl
KiBmZW5jZSA9IG1fdmFsdWUtPmFzPEZlbmNlVmFsdWU+KCk7Ci0gICAgICAgICAgICBpZiAoaXNY
ODYoKSAmJiAhZmVuY2UtPndyaXRlKQorICAgICAgICAgICAgaWYgKCFmZW5jZS0+d3JpdGUgJiYg
IWZlbmNlLT5yZWFkKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIC8vIEZJ
WE1FOiBPcHRpbWl6ZSB0aGlzIG9uIEFSTS4KLSAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjIzNDIKKyAgICAgICAgICAgIGlmICghZmVuY2Ut
PndyaXRlKSB7CisgICAgICAgICAgICAgICAgLy8gQSBmZW5jZSB0aGF0IHJlYWRzIGJ1dCBkb2Vz
IG5vdCB3cml0ZSBpcyBmb3IgcHJvdGVjdGluZyBtb3Rpb24gb2Ygc3RvcmVzLgorICAgICAgICAg
ICAgICAgIGFwcGVuZChTdG9yZUZlbmNlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWZlbmNlLT5yZWFkKSB7CisgICAgICAgICAgICAg
ICAgLy8gQSBmZW5jZSB0aGF0IHdyaXRlcyBidXQgZG9lcyBub3QgcmVhZCBpcyBmb3IgcHJvdGVj
dGluZyBtb3Rpb24gb2YgbG9hZHMuCisgICAgICAgICAgICAgICAgYXBwZW5kKExvYWRGZW5jZSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQogICAgICAgICAgICAgYXBw
ZW5kKE1lbW9yeUZlbmNlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHJldmlzaW9uIDIwNjUyOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzA1Miwz
MiArMTMwNTIsNTggQEAgdm9pZCB0ZXN0UGF0Y2hwb2ludFRlcm1pbmFsUmV0dXJuVmFsdWUoYgog
ICAgIENIRUNLX0VRKGludm9rZTxpbnQ+KCpjb2RlLCAtMSksIDY2Nik7CiB9CiAKLXZvaWQgdGVz
dFg4Nk1GZW5jZSgpCit2b2lkIHRlc3RNZW1vcnlGZW5jZSgpCiB7CiAgICAgUHJvY2VkdXJlIHBy
b2M7CiAgICAgCiAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKICAgICAK
ICAgICByb290LT5hcHBlbmROZXc8RmVuY2VWYWx1ZT4ocHJvYywgT3JpZ2luKCkpOwotICAgIHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSk7CisgICAgcm9vdC0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByb290LT5hcHBlbmRJbnRD
b25zdGFudChwcm9jLCBPcmlnaW4oKSwgSW50MzIsIDQyKSk7CiAgICAgCiAgICAgYXV0byBjb2Rl
ID0gY29tcGlsZShwcm9jKTsKLSAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgImxvY2sg
b3IgJDB4MCwgKCVyc3ApIik7CisgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oKmNvZGUpLCA0Mik7
CisgICAgaWYgKGlzWDg2KCkpCisgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAi
bG9jayBvciAkMHgwLCAoJXJzcCkiKTsKKyAgICBpZiAoaXNBUk02NCgpKQorICAgICAgICBjaGVj
a1VzZXNJbnN0cnVjdGlvbigqY29kZSwgImRtYiAgICBpc2giKTsKICAgICBjaGVja0RvZXNOb3RV
c2VJbnN0cnVjdGlvbigqY29kZSwgIm1mZW5jZSIpOworICAgIGNoZWNrRG9lc05vdFVzZUluc3Ry
dWN0aW9uKCpjb2RlLCAiZG1iICAgIGlzaHN0Iik7CiB9CiAKLXZvaWQgdGVzdFg4NkNvbXBpbGVy
RmVuY2UoKQordm9pZCB0ZXN0U3RvcmVGZW5jZSgpCiB7CiAgICAgUHJvY2VkdXJlIHByb2M7CiAg
ICAgCiAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKICAgICAKICAgICBy
b290LT5hcHBlbmROZXc8RmVuY2VWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEhlYXBSYW5nZTo6dG9w
KCksIEhlYXBSYW5nZSgpKTsKLSAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVy
biwgT3JpZ2luKCkpOworICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJuLCBP
cmlnaW4oKSwgcm9vdC0+YXBwZW5kSW50Q29uc3RhbnQocHJvYywgT3JpZ2luKCksIEludDMyLCA0
MikpOwogICAgIAogICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgQ0hFQ0tfRVEo
aW52b2tlPGludD4oKmNvZGUpLCA0Mik7CiAgICAgY2hlY2tEb2VzTm90VXNlSW5zdHJ1Y3Rpb24o
KmNvZGUsICJsb2NrIik7CiAgICAgY2hlY2tEb2VzTm90VXNlSW5zdHJ1Y3Rpb24oKmNvZGUsICJt
ZmVuY2UiKTsKKyAgICBpZiAoaXNBUk02NCgpKQorICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlv
bigqY29kZSwgImRtYiAgICBpc2hzdCIpOworfQorCit2b2lkIHRlc3RMb2FkRmVuY2UoKQorewor
ICAgIFByb2NlZHVyZSBwcm9jOworICAgIAorICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFk
ZEJsb2NrKCk7CisgICAgCisgICAgcm9vdC0+YXBwZW5kTmV3PEZlbmNlVmFsdWU+KHByb2MsIE9y
aWdpbigpLCBIZWFwUmFuZ2UoKSwgSGVhcFJhbmdlOjp0b3AoKSk7CisgICAgcm9vdC0+YXBwZW5k
TmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByb290LT5hcHBlbmRJbnRDb25zdGFu
dChwcm9jLCBPcmlnaW4oKSwgSW50MzIsIDQyKSk7CisgICAgCisgICAgYXV0byBjb2RlID0gY29t
cGlsZShwcm9jKTsKKyAgICBDSEVDS19FUShpbnZva2U8aW50PigqY29kZSksIDQyKTsKKyAgICBj
aGVja0RvZXNOb3RVc2VJbnN0cnVjdGlvbigqY29kZSwgImxvY2siKTsKKyAgICBjaGVja0RvZXNO
b3RVc2VJbnN0cnVjdGlvbigqY29kZSwgIm1mZW5jZSIpOworICAgIGlmIChpc0FSTTY0KCkpCisg
ICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAiZG1iICAgIGlzaCIpOworICAgIGNo
ZWNrRG9lc05vdFVzZUluc3RydWN0aW9uKCpjb2RlLCAiZG1iICAgIGlzaHN0Iik7CiB9CiAKIC8v
IE1ha2Ugc3VyZSB0aGUgY29tcGlsZXIgZG9lcyBub3QgdHJ5IHRvIG9wdGltaXplIGFueXRoaW5n
IG91dC4KQEAgLTE0NTEwLDggKzE0NTM2LDYgQEAgdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVy
KQogICAgICAgICBSVU4odGVzdEJyYW5jaEJpdEFuZEltbUZ1c2lvbihMb2FkLCBJbnQzMiwgMSwg
QWlyOjpCcmFuY2hUZXN0MzIsIEFpcjo6QXJnOjpBZGRyKSk7CiAgICAgICAgIFJVTih0ZXN0QnJh
bmNoQml0QW5kSW1tRnVzaW9uKExvYWQsIEludDY0LCAxLCBBaXI6OkJyYW5jaFRlc3QzMiwgQWly
OjpBcmc6OkFkZHIpKTsKICAgICAgICAgCi0gICAgICAgIFJVTih0ZXN0WDg2TUZlbmNlKCkpOwot
ICAgICAgICBSVU4odGVzdFg4NkNvbXBpbGVyRmVuY2UoKSk7CiAgICAgfQogCiAgICAgaWYgKGlz
QVJNNjQoKSkgewpAQCAtMTQ1MTksNiArMTQ1NDMsMTAgQEAgdm9pZCBydW4oY29uc3QgY2hhciog
ZmlsdGVyKQogICAgICAgICBSVU4odGVzdFRlcm5hcnlTdWJJbnN0cnVjdGlvblNlbGVjdGlvbihU
cnVuYywgSW50MzIsIEFpcjo6U3ViMzIpKTsKICAgICB9CiAKKyAgICBSVU4odGVzdE1lbW9yeUZl
bmNlKCkpOworICAgIFJVTih0ZXN0U3RvcmVGZW5jZSgpKTsKKyAgICBSVU4odGVzdExvYWRGZW5j
ZSgpKTsKKyAgICAKICAgICBpZiAodGFza3MuaXNFbXB0eSgpKQogICAgICAgICB1c2FnZSgpOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29k
ZXMJKHJldmlzaW9uIDIwNjUyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
T3Bjb2RlLm9wY29kZXMJKHdvcmtpbmcgY29weSkKQEAgLTg0NCw2ICs4NDQsOCBAQCBNb3ZlRG91
YmxlQ29uZGl0aW9uYWxseUZsb2F0IFU6RzozMiwgVTpGCiAgICAgRG91YmxlQ29uZCwgVG1wLCBU
bXAsIFRtcCwgVG1wLCBUbXAKIAogTWVtb3J5RmVuY2UgL2VmZmVjdHMKK1N0b3JlRmVuY2UgL2Vm
ZmVjdHMKK0xvYWRGZW5jZSAvZWZmZWN0cwogCiBKdW1wIC9icmFuY2gKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9BUk02NC9BNjRET3Bjb2RlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0FSTTY0L0E2NERPcGNv
ZGUuY3BwCShyZXZpc2lvbiAyMDY1MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNz
ZW1ibGVyL0FSTTY0L0E2NERPcGNvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04NCw2ICs4NCw4IEBA
IHN0YXRpYyBPcGNvZGVHcm91cEluaXRpYWxpemVyIG9wY29kZUdyb3UKICAgICBPUENPREVfR1JP
VVBfRU5UUlkoMHgxNSwgQTY0RE9wY29kZUNvbmRpdGlvbmFsQnJhbmNoSW1tZWRpYXRlKSwKICAg
ICBPUENPREVfR1JPVVBfRU5UUlkoMHgxNSwgQTY0RE9wY29kZUNvbXBhcmVBbmRCcmFuY2hJbW1l
ZGlhdGUpLAogICAgIE9QQ09ERV9HUk9VUF9FTlRSWSgweDE1LCBBNjRET3Bjb2RlSGludCksCisg
ICAgT1BDT0RFX0dST1VQX0VOVFJZKDB4MTUsIEE2NERPcGNvZGVEbWJJc2gpLAorICAgIE9QQ09E
RV9HUk9VUF9FTlRSWSgweDE1LCBBNjRET3Bjb2RlRG1iSXNoU3QpLAogICAgIE9QQ09ERV9HUk9V
UF9FTlRSWSgweDE2LCBBNjRET3Bjb2RlVW5jb25kaXRpb25hbEJyYW5jaEltbWVkaWF0ZSksCiAg
ICAgT1BDT0RFX0dST1VQX0VOVFJZKDB4MTYsIEE2NERPcGNvZGVVbmNvbmRpdGlvbmFsQnJhbmNo
UmVnaXN0ZXIpLAogICAgIE9QQ09ERV9HUk9VUF9FTlRSWSgweDE2LCBBNjRET3Bjb2RlVGVzdEFu
ZEJyYW5jaEltbWVkaWF0ZSksCkBAIC04MjMsNiArODI1LDIwIEBAIGNvbnN0IGNoYXIqIEE2NERP
cGNvZGVIaW50Ojpmb3JtYXQoKQogICAgIHJldHVybiBtX2Zvcm1hdEJ1ZmZlcjsKIH0KIAorY29u
c3QgY2hhciogQTY0RE9wY29kZURtYklzaDo6Zm9ybWF0KCkKK3sKKyAgICBhcHBlbmRJbnN0cnVj
dGlvbk5hbWUoImRtYiIpOworICAgIGFwcGVuZFN0cmluZygiaXNoIik7CisgICAgcmV0dXJuIG1f
Zm9ybWF0QnVmZmVyOworfQorCitjb25zdCBjaGFyKiBBNjRET3Bjb2RlRG1iSXNoU3Q6OmZvcm1h
dCgpCit7CisgICAgYXBwZW5kSW5zdHJ1Y3Rpb25OYW1lKCJkbWIiKTsKKyAgICBhcHBlbmRTdHJp
bmcoImlzaHN0Iik7CisgICAgcmV0dXJuIG1fZm9ybWF0QnVmZmVyOworfQorCiAvLyBBIHplcm8g
aW4gYW4gZW50cnkgb2YgdGhlIHRhYmxlIG1lYW5zIHRoZSBpbnN0cnVjdGlvbiBpcyBVbmFsbG9j
YXRlZAogY29uc3QgY2hhciogY29uc3QgQTY0RE9wY29kZUxvYWRTdG9yZTo6c19vcE5hbWVzWzMy
XSA9IHsKICAgICAic3RyYiIsICJsZHJiIiwgImxkcnNiIiwgImxkcnNiIiwgInN0ciIsICJsZHIi
LCAic3RyIiwgImxkciIsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVy
L0FSTTY0L0E2NERPcGNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGlzYXNzZW1ibGVyL0FSTTY0L0E2NERPcGNvZGUuaAkocmV2aXNpb24gMjA2NTI5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9BUk02NC9BNjRET3Bjb2RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTUwOSw2ICs1MDksMzAgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGltbWVkaWF0
ZTcoKSB7IHJldHVybiAobV9vcGNvZGUgPj4gNSkgJiAweDdmOyB9CiB9OwogCitjbGFzcyBBNjRE
T3Bjb2RlRG1iSXNoIDogcHVibGljIEE2NERPcGNvZGUgeworcHVibGljOgorICAgIHN0YXRpYyBj
b25zdCB1aW50MzJfdCBtYXNrID0gMHhmZmZmZmZmZjsKKyAgICBzdGF0aWMgY29uc3QgdWludDMy
X3QgcGF0dGVybiA9IDB4ZDUwMzNiYmY7CisKKyAgICBERUZJTkVfU1RBVElDX0ZPUk1BVChBNjRE
T3Bjb2RlRG1iSXNoLCB0aGlzT2JqKTsKKworICAgIGNvbnN0IGNoYXIqIGZvcm1hdCgpOworCisg
ICAgY29uc3QgY2hhciogb3BOYW1lKCkgeyByZXR1cm4gImRtYiI7IH0KK307CisKK2NsYXNzIEE2
NERPcGNvZGVEbWJJc2hTdCA6IHB1YmxpYyBBNjRET3Bjb2RlIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgY29uc3QgdWludDMyX3QgbWFzayA9IDB4ZmZmZmZmZmY7CisgICAgc3RhdGljIGNvbnN0IHVp
bnQzMl90IHBhdHRlcm4gPSAweGQ1MDMzYWJmOworCisgICAgREVGSU5FX1NUQVRJQ19GT1JNQVQo
QTY0RE9wY29kZURtYklzaFN0LCB0aGlzT2JqKTsKKworICAgIGNvbnN0IGNoYXIqIGZvcm1hdCgp
OworCisgICAgY29uc3QgY2hhciogb3BOYW1lKCkgeyByZXR1cm4gImRtYiI7IH0KK307CisKIGNs
YXNzIEE2NERPcGNvZGVMb2FkU3RvcmUgOiBwdWJsaWMgQTY0RE9wY29kZSB7CiBwcml2YXRlOgog
ICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBzX29wTmFtZXNbMzJdOwo=
</data>
<flag name="review"
          id="313315"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>