<?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>152165</bug_id>
          
          <creation_ts>2015-12-10 19:23:42 -0800</creation_ts>
          <short_desc>[JSC] Add an implementation of pow() taking an integer exponent to B3</short_desc>
          <delta_ts>2015-12-12 22:12:06 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1148398</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-12-10 19:23:42 -0800</bug_when>
    <thetext>[JSC] Add an implementation of pow() taking an integer exponent to B3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1148401</commentid>
    <comment_count>1</comment_count>
      <attachid>267151</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-12-10 19:28:27 -0800</bug_when>
    <thetext>Created attachment 267151
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1148555</commentid>
    <comment_count>2</comment_count>
      <attachid>267151</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-12-11 14:54:22 -0800</bug_when>
    <thetext>Comment on attachment 267151
Patch

r=me.  Classic pow strength reduced to muls.  Nice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1148577</commentid>
    <comment_count>3</comment_count>
      <attachid>267151</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-12-11 15:45:26 -0800</bug_when>
    <thetext>Comment on attachment 267151
Patch

Clearing flags on attachment: 267151

Committed r193989: &lt;http://trac.webkit.org/changeset/193989&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1148578</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-12-11 15:45:30 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1148781</commentid>
    <comment_count>5</comment_count>
      <attachid>267151</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-12 22:12:06 -0800</bug_when>
    <thetext>Comment on attachment 267151
Patch

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

&gt; Source/JavaScriptCore/b3/B3MathExtras.cpp:49
&gt; +    BasicBlock* functionCallCase = procedure.addBlock();
&gt; +    BasicBlock* loopPreHeaderCase = procedure.addBlock();
&gt; +    BasicBlock* loopTestForEvenCase = procedure.addBlock();
&gt; +    BasicBlock* loopOdd = procedure.addBlock();
&gt; +    BasicBlock* loopEvenOdd = procedure.addBlock();
&gt; +    BasicBlock* continuation = procedure.addBlock();

This breaks basic block ordering.  FTL creates all of the LLVM basic block entrypoints for DFG basic blocks, and then later it will insert basic blocks in between those other blocks so that all of the LLVM blocks associated with a DFG block are grouped together.  Right now, we have yet to port this feature from the LLVM version of Output to the B3 version.  But that does not mean that we will abandon the feature.  It&apos;s totally sensible for a compiler to assume that the incoming program order is appropriate for things like live ranges.

I don&apos;t see how to fix this given the restrictive API you&apos;ve created.  Your API does not allow the caller to designate which block new blocks should be inserted before.  This is why FTL::Output works the way that it does.  Please remove the powDoubleInt32() function from the B3 namespace and move it to FTL::Output, so that once we port our basic block ordering code to B3, we can make it work with this.

&gt; Source/JavaScriptCore/b3/B3MathExtras.h:41
&gt; +// Raise &quot;x&quot; to &quot;y&quot; power.
&gt; +// Return a new block continuing the flow and the value representing the result.
&gt; +JS_EXPORT_PRIVATE std::pair&lt;BasicBlock*, Value*&gt; powDoubleInt32(Procedure&amp;, BasicBlock*, Origin, Value* x, Value* y);

Let&apos;s not do this.  This belongs in FTLB3Output.  It&apos;s the wrong API, and it breaks the way that FTL orders basic blocks.  If you strongly feel that Pow(double, int) should be a B3 feature, then make it an opcode and handle it in LowerMacros.  But that doesn&apos;t seem like the right approach, since that just adds opcodes.

FTLOutput owns basic block ordering, which means that it has the power to implement an operation in terms of multiple basic blocks while still maintaining a sensible order.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>267151</attachid>
            <date>2015-12-10 19:28:27 -0800</date>
            <delta_ts>2015-12-11 15:45:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-152165-20151210192755.patch</filename>
            <type>text/plain</type>
            <size>25627</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkzOTI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
Y2Y2YzQ1ODBlNTNjZDRjZTU5MGYwY2Y2ODhhNDE4N2UzZTg0YTVjLi5mMWRmNWZlMDRkMGQzOTJl
NjkzZjJhNzUzODY4YWYxMjA2NjYyMjNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNyBAQAorMjAxNS0xMi0xMCAgQmVuamFtaW4gUG91bGFpbiAgPGJlbmphbWluQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgW0pTQ10gQWRkIGFuIGltcGxlbWVudGF0aW9uIG9mIHBvdygpIHRh
a2luZyBhbiBpbnRlZ2VyIGV4cG9uZW50IHRvIEIzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTIxNjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBMTFZNIGhhcyB0aGlzIHJlYWxseSBuZWF0IG9wdGltaXpl
ZCBvcGNvZGUgZm9yCisgICAgICAgIHJhaXNpbmcgdGhlIHBvd2VyIG9mIHNvbWV0aGluZyBieSBh
biBpbnRlZ2VyIGV4cG9uZW50LgorCisgICAgICAgIFRoZXJlIGlzIG5vIHN1Y2ggbmF0aXZlIGlu
c3RydWN0aW9uIHNvIHdlIG5lZWQgdG8gZXh0ZW5kCisgICAgICAgIHRoZSBleGlzdGluZyBGVExP
dXRwdXQgQVBJIHRvIHNvbWV0aGluZyBlZmZpY2llbnQuCisKKyAgICAgICAgREZHIGhhcyBhIHBy
ZXR0eSBjb21wZXRpdGl2ZSBpbXBsZW1lbnRhdGlvbi4gSW4gdGhpcyBwYXRjaCwKKyAgICAgICAg
SSBhZGRlZCBhIHZlcnNpb24gb2YgaXQgdG8gQjMuCisgICAgICAgIEkgY3JlYXRlZCBwb3dEb3Vi
bGVJbnQzMigpIGluc3RlYWQgb2YgcHV0dGluZyB0aGUgY29kZSBkaXJlY3RseQorICAgICAgICBp
biBGVEwgZm9yIGVhc2llciB0ZXN0aW5nIGFuZCBvcHRpbWl6YXRpb24uCisKKyAgICAgICAgKiBD
TWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIGIzL0IzTWF0aEV4dHJhcy5jcHA6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpCMzo6cG93RG91YmxlSW50MzIpOgorICAgICAgICAqIGIzL0IzTWF0aEV4dHJhcy5o
OiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM01lbW9yeVZhbHVlLmg6CisgICAgICAgICogYjMvdGVz
dGIzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RQb3dEb3VibGVCeUludGVnZXJMb29wKToK
KyAgICAgICAgKEpTQzo6QjM6OnJ1bik6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxlQXJpdGhQb3dJbnRlZ2VyRmFzdFBhdGgp
OgorICAgICAgICAqIGZ0bC9GVExCM091dHB1dC5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6T3V0
cHV0Ojpkb3VibGVQb3dpKToKKyAgICAgICAgKiBmdGwvRlRMQjNPdXRwdXQuaDoKKyAgICAgICAg
KEpTQzo6RlRMOjpPdXRwdXQ6OmRvdWJsZVBvd2kpOiBEZWxldGVkLgorCiAyMDE1LTEyLTEwICBD
c2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgW0IzXSBBZGQg
bmV3IGZpbGVzIHRvIHRoZSBjbWFrZSBidWlsZCBzeXN0ZW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFr
ZUxpc3RzLnR4dAppbmRleCA3MGRiYjJlZmY3OTg5YzM5MDk2YTIxMzMyYWU1Mzc2MmNjMjZjNjg1
Li5jMDkzZWFkNWExNDY2NWUyOTY2MzYyNzZlZTFmY2QzNDMzMWI3NjJiIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xMTUsNiArMTE1LDcgQEAgc2V0KEphdmFTY3JpcHRD
b3JlX1NPVVJDRVMKICAgICBiMy9CM0luc2VydGlvblNldC5jcHAKICAgICBiMy9CM0xvd2VyTWFj
cm9zLmNwcAogICAgIGIzL0IzTG93ZXJUb0Fpci5jcHAKKyAgICBiMy9CM01hdGhFeHRyYXMuY3Bw
CiAgICAgYjMvQjNNZW1vcnlWYWx1ZS5jcHAKICAgICBiMy9CM01vdmVDb25zdGFudHMuY3BwCiAg
ICAgYjMvQjNPcGFxdWVCeXByb2R1Y3RzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCBlN2I4MWZjYTJkN2VhM2RlNTllNGFhMjZhYjEzZjVmNmFiNmRiNzc3Li5lYTg1NWJjYmQ4
YzI4NzQzODZmYjVmODA1ZGMwYzMyY2ZkN2JmNTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtMTEzNSw2ICsxMTM1LDggQEAKIAkJNDM0MjJBNjMxQzE1OEU2RDAwRTJFQjk4IC8q
IEIzQ29uc3RGbG9hdFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0MzQyMkE2MTFDMTU4NzFCMDBFMkVCOTggLyogQjNDb25zdEZsb2F0VmFsdWUu
aCAqLzsgfTsKIAkJNDM0MjJBNjYxQzE2MjY3NTAwRTJFQjk4IC8qIEIzUmVkdWNlRG91YmxlVG9G
bG9hdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
MzQyMkE2NDFDMTYyMjFFMDBFMkVCOTggLyogQjNSZWR1Y2VEb3VibGVUb0Zsb2F0LmNwcCAqLzsg
fTsKIAkJNDM0MjJBNjcxQzE2MjY3ODAwRTJFQjk4IC8qIEIzUmVkdWNlRG91YmxlVG9GbG9hdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM0MjJBNjUx
QzE2MjIxRTAwRTJFQjk4IC8qIEIzUmVkdWNlRG91YmxlVG9GbG9hdC5oICovOyB9OworCQk0M0FC
MjZDNjFDMUE1MzU5MDBEODJBRTYgLyogQjNNYXRoRXh0cmFzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0M0FCMjZDNTFDMUE1MkY3MDBEODJBRTYgLyog
QjNNYXRoRXh0cmFzLmggKi87IH07CisJCTQzQUIyNkM3MUMxQTUzNUMwMEQ4MkFFNiAvKiBCM01h
dGhFeHRyYXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDNBQjI2QzQxQzFBNTJGNzAwRDgyQUU2IC8qIEIzTWF0aEV4dHJhcy5jcHAgKi87IH07CiAJ
CTQ0NDNBRTMzMTZFMTg4RDkwMDc2RjExMCAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayBpbiBGcmFt
ZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjBFQjYxMDVDODZD
NkIwMEU2REYxQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayAqLzsgfTsKIAkJNDUxNTM5QjkxMkRD
OTk0NTAwRUY3QUM0IC8qIFlhcnIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQ1MTUzOUI4MTJEQzk5NDUwMEVGN0FDNCAvKiBZYXJyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTI2NzhGOEUxQTAzMTAw
OTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjY3OEY4QzFBMDMxMDA5MDA2QTMwNkQgLyogQmFz
aWNCbG9ja0xvY2F0aW9uLmNwcCAqLzsgfTsKQEAgLTIwMTUsMTcgKzIwMTcsMTcgQEAKIAkJRkUz
OTEzNTQxQjc5NEY2RTAwRURBRjcxIC8qIExpdmVPYmplY3RMaXN0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMzkxMzUyMUI3OTRBQzkwMEVEQUY3
MSAvKiBMaXZlT2JqZWN0TGlzdC5jcHAgKi87IH07CiAJCUZFMzkxMzU1MUI3OTRGOEEwMEVEQUY3
MSAvKiBMaXZlT2JqZWN0RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkUzOTEzNTExQjc5NEFDOTAwRURBRjcxIC8qIExpdmVPYmplY3REYXRhLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkUzOTEz
NTYxQjc5NEY4RjAwRURBRjcxIC8qIExpdmVPYmplY3RMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTM5MTM1MzFCNzk0QUM5MDBFREFGNzEgLyog
TGl2ZU9iamVjdExpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwotCQlGRTNBMDZBNjFDMTBCNzJEMDAzOTBGREQgLyogSklUQml0T3JHZW5lcmF0b3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFM0EwNkE0
MUMxMEI3MDgwMDM5MEZERCAvKiBKSVRCaXRPckdlbmVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtB
U1NFVF9UQUdTID0gKCk7IH07IH07Ci0JCUZFM0EwNkE4MUMxMEJDODEwMDM5MEZERCAvKiBKSVRC
aXRCaW5hcnlPcEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkUzQTA2QTcxQzEwQkM3NDAwMzkwRkREIC8qIEpJVEJpdEJpbmFyeU9wR2Vu
ZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FTU0VUX1RBR1MgPSAoKTsgfTsgfTsKLQkJRkUzQTA2
QUMxQzEwQzM5RTAwMzkwRkREIC8qIEpJVEJpdE9yR2VuZXJhdG9yLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFM0EwNkEzMUMxMEI3MDgwMDM5MEZE
RCAvKiBKSVRCaXRPckdlbmVyYXRvci5jcHAgKi87IHNldHRpbmdzID0ge0FTU0VUX1RBR1MgPSAo
KTsgfTsgfTsKLQkJRkUzQTA2QjExQzEwQ0I4NDAwMzkwRkREIC8qIEpJVEJpdEFuZEdlbmVyYXRv
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTNB
MDZBRDFDMTBDQjZGMDAzOTBGREQgLyogSklUQml0QW5kR2VuZXJhdG9yLmNwcCAqLzsgc2V0dGlu
Z3MgPSB7QVNTRVRfVEFHUyA9ICgpOyB9OyB9OwotCQlGRTNBMDZCMjFDMTBDQjg5MDAzOTBGREQg
LyogSklUQml0QW5kR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRTNBMDZBRTFDMTBDQjZGMDAzOTBGREQgLyogSklUQml0QW5kR2VuZXJh
dG9yLmggKi87IHNldHRpbmdzID0ge0FTU0VUX1RBR1MgPSAoKTsgfTsgfTsKLQkJRkUzQTA2QjMx
QzEwQ0I4RTAwMzkwRkREIC8qIEpJVEJpdFhvckdlbmVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTNBMDZBRjFDMTBDQjZGMDAzOTBGREQg
LyogSklUQml0WG9yR2VuZXJhdG9yLmNwcCAqLzsgc2V0dGluZ3MgPSB7QVNTRVRfVEFHUyA9ICgp
OyB9OyB9OwotCQlGRTNBMDZCNDFDMTBDQjkzMDAzOTBGREQgLyogSklUQml0WG9yR2VuZXJhdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTNBMDZC
MDFDMTBDQjZGMDAzOTBGREQgLyogSklUQml0WG9yR2VuZXJhdG9yLmggKi87IHNldHRpbmdzID0g
e0FTU0VUX1RBR1MgPSAoKTsgfTsgfTsKLQkJRkUzQTA2QkQxQzExMDQwRDAwMzkwRkREIC8qIEpJ
VExlZnRTaGlmdEdlbmVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRTNBMDZCNjFDMTEwM0Q5MDAzOTBGREQgLyogSklUTGVmdFNoaWZ0R2Vu
ZXJhdG9yLmNwcCAqLzsgc2V0dGluZ3MgPSB7QVNTRVRfVEFHUyA9ICgpOyB9OyB9OwotCQlGRTNB
MDZCRTFDMTEwNDEyMDAzOTBGREQgLyogSklUTGVmdFNoaWZ0R2VuZXJhdG9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTNBMDZCNzFDMTEwM0Q5MDAz
OTBGREQgLyogSklUTGVmdFNoaWZ0R2VuZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FTU0VUX1RB
R1MgPSAoKTsgfTsgfTsKLQkJRkUzQTA2QkYxQzExMDQxNjAwMzkwRkREIC8qIEpJVFJpZ2h0U2hp
ZnRHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkUzQTA2QjgxQzExMDNEOTAwMzkwRkREIC8qIEpJVFJpZ2h0U2hpZnRHZW5lcmF0b3Iu
Y3BwICovOyBzZXR0aW5ncyA9IHtBU1NFVF9UQUdTID0gKCk7IH07IH07Ci0JCUZFM0EwNkMwMUMx
MTA0MUEwMDM5MEZERCAvKiBKSVRSaWdodFNoaWZ0R2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTNBMDZCOTFDMTEwM0Q5MDAzOTBGREQg
LyogSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtBU1NFVF9UQUdTID0g
KCk7IH07IH07CisJCUZFM0EwNkE2MUMxMEI3MkQwMDM5MEZERCAvKiBKSVRCaXRPckdlbmVyYXRv
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzQTA2
QTQxQzEwQjcwODAwMzkwRkREIC8qIEpJVEJpdE9yR2VuZXJhdG9yLmggKi87IH07CisJCUZFM0Ew
NkE4MUMxMEJDODEwMDM5MEZERCAvKiBKSVRCaXRCaW5hcnlPcEdlbmVyYXRvci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzQTA2QTcxQzEwQkM3NDAw
MzkwRkREIC8qIEpJVEJpdEJpbmFyeU9wR2VuZXJhdG9yLmggKi87IH07CisJCUZFM0EwNkFDMUMx
MEMzOUUwMDM5MEZERCAvKiBKSVRCaXRPckdlbmVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTNBMDZBMzFDMTBCNzA4MDAzOTBGREQgLyog
SklUQml0T3JHZW5lcmF0b3IuY3BwICovOyB9OworCQlGRTNBMDZCMTFDMTBDQjg0MDAzOTBGREQg
LyogSklUQml0QW5kR2VuZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEZFM0EwNkFEMUMxMENCNkYwMDM5MEZERCAvKiBKSVRCaXRBbmRHZW5l
cmF0b3IuY3BwICovOyB9OworCQlGRTNBMDZCMjFDMTBDQjg5MDAzOTBGREQgLyogSklUQml0QW5k
R2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRTNBMDZBRTFDMTBDQjZGMDAzOTBGREQgLyogSklUQml0QW5kR2VuZXJhdG9yLmggKi87IH07
CisJCUZFM0EwNkIzMUMxMENCOEUwMDM5MEZERCAvKiBKSVRCaXRYb3JHZW5lcmF0b3IuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzQTA2QUYxQzEw
Q0I2RjAwMzkwRkREIC8qIEpJVEJpdFhvckdlbmVyYXRvci5jcHAgKi87IH07CisJCUZFM0EwNkI0
MUMxMENCOTMwMDM5MEZERCAvKiBKSVRCaXRYb3JHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFM0EwNkIwMUMxMENCNkYwMDM5MEZERCAv
KiBKSVRCaXRYb3JHZW5lcmF0b3IuaCAqLzsgfTsKKwkJRkUzQTA2QkQxQzExMDQwRDAwMzkwRkRE
IC8qIEpJVExlZnRTaGlmdEdlbmVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRTNBMDZCNjFDMTEwM0Q5MDAzOTBGREQgLyogSklUTGVmdFNo
aWZ0R2VuZXJhdG9yLmNwcCAqLzsgfTsKKwkJRkUzQTA2QkUxQzExMDQxMjAwMzkwRkREIC8qIEpJ
VExlZnRTaGlmdEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkUzQTA2QjcxQzExMDNEOTAwMzkwRkREIC8qIEpJVExlZnRTaGlmdEdlbmVy
YXRvci5oICovOyB9OworCQlGRTNBMDZCRjFDMTEwNDE2MDAzOTBGREQgLyogSklUUmlnaHRTaGlm
dEdlbmVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRTNBMDZCODFDMTEwM0Q5MDAzOTBGREQgLyogSklUUmlnaHRTaGlmdEdlbmVyYXRvci5j
cHAgKi87IH07CisJCUZFM0EwNkMwMUMxMTA0MUEwMDM5MEZERCAvKiBKSVRSaWdodFNoaWZ0R2Vu
ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RTNBMDZCOTFDMTEwM0Q5MDAzOTBGREQgLyogSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oICovOyB9
OwogCQlGRTQyMzg5MDFCRTE4QzNDMDA1MTQ3MzcgLyogSklUU3ViR2VuZXJhdG9yLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNDIzODhGMUJFMThD
MTIwMDUxNDczNyAvKiBKSVRTdWJHZW5lcmF0b3IuY3BwICovOyB9OwogCQlGRTRCRkYyQjFBRDQ3
NkU3MDAwODhGODcgLyogRnVuY3Rpb25PdmVycmlkZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU0QkZGMjkxQUQ0NzZFNzAwMDg4Rjg3IC8qIEZ1
bmN0aW9uT3ZlcnJpZGVzLmNwcCAqLzsgfTsKIAkJRkU0QkZGMkMxQUQ0NzZFNzAwMDg4Rjg3IC8q
IEZ1bmN0aW9uT3ZlcnJpZGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRTRCRkYyQTFBRDQ3NkU3MDAwODhGODcgLyogRnVuY3Rpb25PdmVycmlkZXMu
aCAqLzsgfTsKQEAgLTMyMTEsNiArMzIxMyw4IEBACiAJCTQzNDIyQTYxMUMxNTg3MUIwMEUyRUI5
OCAvKiBCM0NvbnN0RmxvYXRWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBCM0NvbnN0RmxvYXRWYWx1ZS5oOyBwYXRoID0gYjMvQjNDb25zdEZsb2F0VmFsdWUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDM0MjJBNjQxQzE2MjIxRTAwRTJFQjk4IC8qIEIz
UmVkdWNlRG91YmxlVG9GbG9hdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBCM1JlZHVjZURvdWJsZVRvRmxvYXQuY3BwOyBwYXRoID0gYjMvQjNSZWR1Y2VEb3VibGVU
b0Zsb2F0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDM0MjJBNjUxQzE2MjIx
RTAwRTJFQjk4IC8qIEIzUmVkdWNlRG91YmxlVG9GbG9hdC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBCM1JlZHVjZURvdWJsZVRvRmxvYXQuaDsgcGF0aCA9IGIzL0IzUmVkdWNl
RG91YmxlVG9GbG9hdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0M0FCMjZDNDFD
MUE1MkY3MDBEODJBRTYgLyogQjNNYXRoRXh0cmFzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IEIzTWF0aEV4dHJhcy5jcHA7IHBhdGggPSBiMy9CM01hdGhFeHRyYXMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0M0FCMjZDNTFDMUE1MkY3MDBEODJB
RTYgLyogQjNNYXRoRXh0cmFzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIz
TWF0aEV4dHJhcy5oOyBwYXRoID0gYjMvQjNNYXRoRXh0cmFzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTQ0OTA5N0VFMEY4RjgxQjUwMDc2QTMyNyAvKiBGZWF0dXJlRGVmaW5lcy54
Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBGZWF0dXJlRGVmaW5lcy54
Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDUxNTM5QjgxMkRDOTk0NTAw
RUY3QUM0IC8qIFlhcnIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gWWFyci5o
OyBwYXRoID0geWFyci9ZYXJyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ1RTEy
RDg4MDZBNDlCMEYwMEU5REY4NCAvKiBqc2MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0ganNjLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgdGFiV2lkdGggPSA0OyB9OwpAQCAtNDYzNSw2ICs0NjM5LDggQEAKIAkJCQkwRjMzOEUx
QTFCRjI4NkVBMDAxM0M4OEYgLyogQjNMb3dlck1hY3Jvcy5oICovLAogCQkJCTBGRUM4NEQzMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuY3BwICovLAogCQkJCTBGRUM4NEQ0MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuaCAqLywKKwkJCQk0M0FCMjZDNDFDMUE1MkY3MDBE
ODJBRTYgLyogQjNNYXRoRXh0cmFzLmNwcCAqLywKKwkJCQk0M0FCMjZDNTFDMUE1MkY3MDBEODJB
RTYgLyogQjNNYXRoRXh0cmFzLmggKi8sCiAJCQkJMEZFQzg0RDUxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzTWVtb3J5VmFsdWUuY3BwICovLAogCQkJCTBGRUM4NEQ2MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M01lbW9yeVZhbHVlLmggKi8sCiAJCQkJMEYzMzhFMDMxQkYwMjc2QzAwMTNDODhGIC8qIEIzTW92
ZUNvbnN0YW50cy5jcHAgKi8sCkBAIC03NTY0LDYgKzc1NzAsNyBAQAogCQkJCTcwRUMwRUMzMUFB
MEQ3REEwMEI2QUFGQSAvKiBKU1N0cmluZ0l0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQky
NjAwQjVBNzE1MkJBQUE3MDA5MUVFNUYgLyogSlNTdHJpbmdKb2luZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDMThDNDI4MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU1N0cmluZ1JlZi5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNDNBQjI2QzYxQzFBNTM1OTAwRDgyQUU2IC8qIEIzTWF0aEV4dHJhcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjkwRTE2RjVDRDAwQjM0NDYwIC8qIEpTU3RyaW5nUmVm
Q0YuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMjhENEE4MTc3QjcxQzgwMDA3RkEzQyAvKiBKU1N0
cmluZ1JlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTE5RDBEMTU3RUUwQTIwMDRB
NEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmggaW4gSGVhZGVycyAqLywKQEAgLTg0MzcsNiAr
ODQ0NCw3IEBACiAJCQkJMEZFQzg1NzMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lh
bC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVDODU3NTFCREFDREM3MDA4MEZGNzQgLyogQWly
Q29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ1NzAzODFCRTQ0QzkxMDA2MkE2MjkgLyog
QWlyRWxpbWluYXRlRGVhZENvZGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDNBQjI2QzcxQzFB
NTM1QzAwRDgyQUU2IC8qIEIzTWF0aEV4dHJhcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVD
ODU3ODFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZFQzg1OTMxQkRCMUUxMDAwODBGRjc0IC8qIEFpckdlbmVyYXRlZC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkVDODU3QjFCREFDREM3MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2
ZXMuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNNYXRoRXh0cmFzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01hdGhFeHRy
YXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjI3NTZkODhmNGNjYmQ4NTU3ZmZkYTVmOWY2NjI5NzJkZTU3OTkx
ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNYXRoRXh0
cmFzLmNwcApAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM01hdGhFeHRy
YXMuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxp
bmVzLmgiCisjaW5jbHVkZSAiQjNDQ2FsbFZhbHVlLmgiCisjaW5jbHVkZSAiQjNDb25zdDMyVmFs
dWUuaCIKKyNpbmNsdWRlICJCM0NvbnN0RG91YmxlVmFsdWUuaCIKKyNpbmNsdWRlICJCM0NvbnN0
UHRyVmFsdWUuaCIKKyNpbmNsdWRlICJCM0NvbnRyb2xWYWx1ZS5oIgorI2luY2x1ZGUgIkIzVXBz
aWxvblZhbHVlLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKK3N0ZDo6cGFpcjxCYXNpY0Jsb2NrKiwgVmFsdWUqPiBwb3dE
b3VibGVJbnQzMihQcm9jZWR1cmUmIHByb2NlZHVyZSwgQmFzaWNCbG9jayogc3RhcnQsIE9yaWdp
biBvcmlnaW4sIFZhbHVlKiB4LCBWYWx1ZSogeSkKK3sKKyAgICBCYXNpY0Jsb2NrKiBmdW5jdGlv
bkNhbGxDYXNlID0gcHJvY2VkdXJlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogbG9vcFBy
ZUhlYWRlckNhc2UgPSBwcm9jZWR1cmUuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBsb29w
VGVzdEZvckV2ZW5DYXNlID0gcHJvY2VkdXJlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayog
bG9vcE9kZCA9IHByb2NlZHVyZS5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGxvb3BFdmVu
T2RkID0gcHJvY2VkdXJlLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogY29udGludWF0aW9u
ID0gcHJvY2VkdXJlLmFkZEJsb2NrKCk7CisKKyAgICBWYWx1ZSogc2hvdWxkR29TbG93UGF0aCA9
IHN0YXJ0LT5hcHBlbmROZXc8VmFsdWU+KHByb2NlZHVyZSwgQWJvdmUsIG9yaWdpbiwKKyAgICAg
ICAgeSwKKyAgICAgICAgc3RhcnQtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2NlZHVyZSwg
b3JpZ2luLCAxMDAwKSk7CisgICAgc3RhcnQtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAg
ICAgICBwcm9jZWR1cmUsIEJyYW5jaCwgb3JpZ2luLAorICAgICAgICBzaG91bGRHb1Nsb3dQYXRo
LAorICAgICAgICBGcmVxdWVudGVkQmxvY2soZnVuY3Rpb25DYWxsQ2FzZSksIEZyZXF1ZW50ZWRC
bG9jayhsb29wUHJlSGVhZGVyQ2FzZSkpOworCisgICAgLy8gRnVuY3Rpb24gY2FsbC4KKyAgICBW
YWx1ZSogeUFzRG91YmxlID0gZnVuY3Rpb25DYWxsQ2FzZS0+YXBwZW5kTmV3PFZhbHVlPihwcm9j
ZWR1cmUsIElUb0QsIG9yaWdpbiwgeSk7CisgICAgVmFsdWUqIHBvd1Jlc3VsdCA9IGZ1bmN0aW9u
Q2FsbENhc2UtPmFwcGVuZE5ldzxDQ2FsbFZhbHVlPigKKyAgICAgICAgcHJvY2VkdXJlLCBEb3Vi
bGUsIG9yaWdpbiwKKyAgICAgICAgZnVuY3Rpb25DYWxsQ2FzZS0+YXBwZW5kTmV3PENvbnN0UHRy
VmFsdWU+KHByb2NlZHVyZSwgb3JpZ2luLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHBvdykpLAorICAg
ICAgICB4LCB5QXNEb3VibGUpOworICAgIFVwc2lsb25WYWx1ZSogcG93UmVzdWx0VXBzaWxvbiA9
IGZ1bmN0aW9uQ2FsbENhc2UtPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KHByb2NlZHVyZSwgb3Jp
Z2luLCBwb3dSZXN1bHQpOworICAgIGZ1bmN0aW9uQ2FsbENhc2UtPmFwcGVuZE5ldzxDb250cm9s
VmFsdWU+KHByb2NlZHVyZSwgSnVtcCwgb3JpZ2luLCBGcmVxdWVudGVkQmxvY2soY29udGludWF0
aW9uKSk7CisKKyAgICAvLyBMb29wIHByZS1oZWFkZXIuCisgICAgVmFsdWUqIGluaXRpYWxSZXN1
bHQgPSBsb29wUHJlSGVhZGVyQ2FzZS0+YXBwZW5kTmV3PENvbnN0RG91YmxlVmFsdWU+KHByb2Nl
ZHVyZSwgb3JpZ2luLCAxLik7CisgICAgVXBzaWxvblZhbHVlKiBpbml0aWFsTG9vcFZhbHVlID0g
bG9vcFByZUhlYWRlckNhc2UtPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KHByb2NlZHVyZSwgb3Jp
Z2luLCBpbml0aWFsUmVzdWx0KTsKKyAgICBVcHNpbG9uVmFsdWUqIGluaXRpYWxSZXN1bHRWYWx1
ZSA9IGxvb3BQcmVIZWFkZXJDYXNlLT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPihwcm9jZWR1cmUs
IG9yaWdpbiwgaW5pdGlhbFJlc3VsdCk7CisgICAgVXBzaWxvblZhbHVlKiBpbml0aWFsU3F1YXJl
ZElucHV0ID0gbG9vcFByZUhlYWRlckNhc2UtPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KHByb2Nl
ZHVyZSwgb3JpZ2luLCB4KTsKKyAgICBVcHNpbG9uVmFsdWUqIGluaXRpYWxMb29wQ291bnRlciA9
IGxvb3BQcmVIZWFkZXJDYXNlLT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPihwcm9jZWR1cmUsIG9y
aWdpbiwgeSk7CisgICAgbG9vcFByZUhlYWRlckNhc2UtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+
KHByb2NlZHVyZSwgSnVtcCwgb3JpZ2luLCBGcmVxdWVudGVkQmxvY2sobG9vcFRlc3RGb3JFdmVu
Q2FzZSkpOworCisgICAgLy8gVGVzdCBpZiB3aGF0IGlzIGxlZnQgb2YgdGhlIGNvdW50ZXIgaXMg
ZXZlbi4KKyAgICBWYWx1ZSogaW5Mb29wQ291bnRlciA9IGxvb3BUZXN0Rm9yRXZlbkNhc2UtPmFw
cGVuZE5ldzxWYWx1ZT4ocHJvY2VkdXJlLCBQaGksIEludDMyLCBvcmlnaW4pOworICAgIFZhbHVl
KiBpbkxvb3BTcXVhcmVkSW5wdXQgPSBsb29wVGVzdEZvckV2ZW5DYXNlLT5hcHBlbmROZXc8VmFs
dWU+KHByb2NlZHVyZSwgUGhpLCBEb3VibGUsIG9yaWdpbik7CisgICAgVmFsdWUqIGxhc3RDb3Vu
dGVyQml0ID0gbG9vcFRlc3RGb3JFdmVuQ2FzZS0+YXBwZW5kTmV3PFZhbHVlPihwcm9jZWR1cmUs
IEJpdEFuZCwgb3JpZ2luLAorICAgICAgICBpbkxvb3BDb3VudGVyLAorICAgICAgICBsb29wVGVz
dEZvckV2ZW5DYXNlLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jZWR1cmUsIG9yaWdpbiwg
MSkpOworICAgIGxvb3BUZXN0Rm9yRXZlbkNhc2UtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAor
ICAgICAgICBwcm9jZWR1cmUsIEJyYW5jaCwgb3JpZ2luLAorICAgICAgICBsYXN0Q291bnRlckJp
dCwKKyAgICAgICAgRnJlcXVlbnRlZEJsb2NrKGxvb3BPZGQpLCBGcmVxdWVudGVkQmxvY2sobG9v
cEV2ZW5PZGQpKTsKKworICAgIC8vIENvdW50ZXIgaXMgb2RkLgorICAgIFZhbHVlKiBpbkxvb3BS
ZXN1bHQgPSBsb29wT2RkLT5hcHBlbmROZXc8VmFsdWU+KHByb2NlZHVyZSwgUGhpLCBEb3VibGUs
IG9yaWdpbik7CisgICAgVmFsdWUqIHVwZGF0ZWRSZXN1bHQgPSBsb29wT2RkLT5hcHBlbmROZXc8
VmFsdWU+KHByb2NlZHVyZSwgTXVsLCBvcmlnaW4sIGluTG9vcFJlc3VsdCwgaW5Mb29wU3F1YXJl
ZElucHV0KTsKKyAgICBVcHNpbG9uVmFsdWUqIHVwZGF0ZWRMb29wUmVzdWx0VXBzaWxvbiA9IGxv
b3BPZGQtPmFwcGVuZE5ldzxVcHNpbG9uVmFsdWU+KHByb2NlZHVyZSwgb3JpZ2luLCB1cGRhdGVk
UmVzdWx0KTsKKyAgICBpbml0aWFsTG9vcFZhbHVlLT5zZXRQaGkoaW5Mb29wUmVzdWx0KTsKKyAg
ICB1cGRhdGVkTG9vcFJlc3VsdFVwc2lsb24tPnNldFBoaShpbkxvb3BSZXN1bHQpOworICAgIFVw
c2lsb25WYWx1ZSogdXBkYXRlZExvb3BSZXN1bHQgPSBsb29wT2RkLT5hcHBlbmROZXc8VXBzaWxv
blZhbHVlPihwcm9jZWR1cmUsIG9yaWdpbiwgdXBkYXRlZFJlc3VsdCk7CisKKyAgICBsb29wT2Rk
LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPihwcm9jZWR1cmUsIEp1bXAsIG9yaWdpbiwgRnJlcXVl
bnRlZEJsb2NrKGxvb3BFdmVuT2RkKSk7CisKKyAgICAvLyBFdmVuIHZhbHVlIGFuZCBmb2xsb3dp
bmcgdGhlIE9kZC4KKyAgICBWYWx1ZSogc3F1YXJlZElucHV0ID0gbG9vcEV2ZW5PZGQtPmFwcGVu
ZE5ldzxWYWx1ZT4ocHJvY2VkdXJlLCBNdWwsIG9yaWdpbiwgaW5Mb29wU3F1YXJlZElucHV0LCBp
bkxvb3BTcXVhcmVkSW5wdXQpOworICAgIFVwc2lsb25WYWx1ZSogc3F1YXJlZElucHV0VXBzaWxv
biA9IGxvb3BFdmVuT2RkLT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPihwcm9jZWR1cmUsIG9yaWdp
biwgc3F1YXJlZElucHV0KTsKKyAgICBpbml0aWFsU3F1YXJlZElucHV0LT5zZXRQaGkoaW5Mb29w
U3F1YXJlZElucHV0KTsKKyAgICBzcXVhcmVkSW5wdXRVcHNpbG9uLT5zZXRQaGkoaW5Mb29wU3F1
YXJlZElucHV0KTsKKworICAgIFZhbHVlKiB1cGRhdGVkQ291bnRlciA9IGxvb3BFdmVuT2RkLT5h
cHBlbmROZXc8VmFsdWU+KHByb2NlZHVyZSwgWlNociwgb3JpZ2luLAorICAgICAgICBpbkxvb3BD
b3VudGVyLAorICAgICAgICBsb29wRXZlbk9kZC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJv
Y2VkdXJlLCBvcmlnaW4sIDEpKTsKKyAgICBVcHNpbG9uVmFsdWUqIHVwZGF0ZWRDb3VudGVyVXBz
aWxvbiA9IGxvb3BFdmVuT2RkLT5hcHBlbmROZXc8VXBzaWxvblZhbHVlPihwcm9jZWR1cmUsIG9y
aWdpbiwgdXBkYXRlZENvdW50ZXIpOworICAgIGluaXRpYWxMb29wQ291bnRlci0+c2V0UGhpKGlu
TG9vcENvdW50ZXIpOworICAgIHVwZGF0ZWRDb3VudGVyVXBzaWxvbi0+c2V0UGhpKGluTG9vcENv
dW50ZXIpOworCisgICAgbG9vcEV2ZW5PZGQtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAg
ICAgICBwcm9jZWR1cmUsIEJyYW5jaCwgb3JpZ2luLAorICAgICAgICB1cGRhdGVkQ291bnRlciwK
KyAgICAgICAgRnJlcXVlbnRlZEJsb2NrKGxvb3BUZXN0Rm9yRXZlbkNhc2UpLCBGcmVxdWVudGVk
QmxvY2soY29udGludWF0aW9uKSk7CisKKyAgICAvLyBJbmxpbmUgbG9vcC4KKyAgICBWYWx1ZSog
ZmluYWxSZXN1bHRQaGkgPSBjb250aW51YXRpb24tPmFwcGVuZE5ldzxWYWx1ZT4ocHJvY2VkdXJl
LCBQaGksIERvdWJsZSwgb3JpZ2luKTsKKyAgICBwb3dSZXN1bHRVcHNpbG9uLT5zZXRQaGkoZmlu
YWxSZXN1bHRQaGkpOworICAgIGluaXRpYWxSZXN1bHRWYWx1ZS0+c2V0UGhpKGZpbmFsUmVzdWx0
UGhpKTsKKyAgICB1cGRhdGVkTG9vcFJlc3VsdC0+c2V0UGhpKGZpbmFsUmVzdWx0UGhpKTsKKyAg
ICByZXR1cm4gc3RkOjptYWtlX3BhaXIoY29udGludWF0aW9uLCBmaW5hbFJlc3VsdFBoaSk7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
KwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWF0aEV4dHJhcy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWF0aEV4dHJhcy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY2NTBj
NjdmZDdjYzViMGZhZmRhNTFjZjAzMjdmYjVmOWE3N2QzYmMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNYXRoRXh0cmFzLmgKQEAgLTAsMCArMSw0OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIz
TWF0aEV4dHJhc19oCisjZGVmaW5lIEIzTWF0aEV4dHJhc19oCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQjNPcmlnaW4uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CitjbGFzcyBQcm9jZWR1cmU7CitjbGFzcyBWYWx1ZTsK
KworLy8gUmFpc2UgIngiIHRvICJ5IiBwb3dlci4KKy8vIFJldHVybiBhIG5ldyBibG9jayBjb250
aW51aW5nIHRoZSBmbG93IGFuZCB0aGUgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCitK
U19FWFBPUlRfUFJJVkFURSBzdGQ6OnBhaXI8QmFzaWNCbG9jayosIFZhbHVlKj4gcG93RG91Ymxl
SW50MzIoUHJvY2VkdXJlJiwgQmFzaWNCbG9jayosIE9yaWdpbiwgVmFsdWUqIHgsIFZhbHVlKiB5
KTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQorCisjZW5kaWYgLy8gQjNNYXRoRXh0cmFzX2gKKwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M01lbW9yeVZhbHVlLmgKaW5kZXggYTk2NDhlOWNhNTQzYTNjZDA1NjY0MmUzZjY4NjY4MmFjOWJk
NDU2OC4uOTNmMDQ4ZWEzZTQ3MTVmNmQ1OThlMmNmYzJkZGM5NDQ0NDNjMDc3NyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCkBAIC0yMCw3ICsyMCw3IEBACiAgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogICovCiAKICNpZm5kZWYgQjNNZW1vcnlWYWx1ZV9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy90ZXN0YjMuY3BwCmluZGV4IGQ3ZjJkMDViNmRmZmI0OTRlMDljYmFhMWQ3NzljMDg0MDYx
N2E4MjYuLmExNmZhMDY5Y2ZiYTY0ZDlkNmFlOGZjMjkxNjBiYWJlODUzYjY2MDEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiQjND
b25zdFB0clZhbHVlLmgiCiAjaW5jbHVkZSAiQjNDb250cm9sVmFsdWUuaCIKICNpbmNsdWRlICJC
M0VmZmVjdHMuaCIKKyNpbmNsdWRlICJCM01hdGhFeHRyYXMuaCIKICNpbmNsdWRlICJCM01lbW9y
eVZhbHVlLmgiCiAjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKICNpbmNsdWRlICJCM1N0YWNrU2xv
dFZhbHVlLmgiCkBAIC02Nzg3LDYgKzY3ODgsMjEgQEAgdm9pZCB0ZXN0U2VsZWN0SW52ZXJ0KCkK
ICAgICBDSEVDSyhpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCA0MywgNjQyNDYyLCAzMjUzMykgPT0g
MzI1MzMpOwogfQogCit2b2lkIHRlc3RQb3dEb3VibGVCeUludGVnZXJMb29wKGRvdWJsZSB4T3Bl
cmFuZCwgaW50MzJfdCB5T3BlcmFuZCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNp
Y0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgVmFsdWUqIHggPSByb290LT5h
cHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEZQUkluZm86OmFyZ3Vt
ZW50RlBSMCk7CisgICAgVmFsdWUqIHkgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFRy
dW5jLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICBhdXRvIHJlc3Vs
dCA9IHBvd0RvdWJsZUludDMyKHByb2MsIHJvb3QsIE9yaWdpbigpLCB4LCB5KTsKKyAgICBCYXNp
Y0Jsb2NrKiBjb250aW51YXRpb24gPSByZXN1bHQuZmlyc3Q7CisgICAgY29udGludWF0aW9uLT5h
cHBlbmROZXc8Q29udHJvbFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByZXN1bHQuc2Vj
b25kKTsKKworICAgIENIRUNLKGlzSWRlbnRpY2FsKGNvbXBpbGVBbmRSdW48ZG91YmxlPihwcm9j
LCB4T3BlcmFuZCwgeU9wZXJhbmQpLCBwb3coeE9wZXJhbmQsIHlPcGVyYW5kKSkpOworfQorCiAv
LyBNYWtlIHN1cmUgdGhlIGNvbXBpbGVyIGRvZXMgbm90IHRyeSB0byBvcHRpbWl6ZSBhbnl0aGlu
ZyBvdXQuCiBORVZFUl9JTkxJTkUgZG91YmxlIHplcm8oKQogewpAQCAtNzcwOCw2ICs3NzI0LDcg
QEAgdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQogICAgIFJVTih0ZXN0U2VsZWN0Rm9sZCg0
MikpOwogICAgIFJVTih0ZXN0U2VsZWN0Rm9sZCg0MykpOwogICAgIFJVTih0ZXN0U2VsZWN0SW52
ZXJ0KCkpOworICAgIFJVTl9CSU5BUlkodGVzdFBvd0RvdWJsZUJ5SW50ZWdlckxvb3AsIGZsb2F0
aW5nUG9pbnRPcGVyYW5kczxkb3VibGU+KCksIGludDY0T3BlcmFuZHMoKSk7CiAKICAgICBpZiAo
dGFza3MuaXNFbXB0eSgpKQogICAgICAgICB1c2FnZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAppbmRleCA0YjQwZTY3MDczMTlhOWU2MWFk
MWZmZDRhYjdjNTI5OTU3NGE3NzcxLi5mMjRmNDcyNzMwMTIxMTM0MzA0ZjdiMDExYjZkOGI5NGRk
YzA3MzkyIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcApAQCAtNDE5MCw4ICs0MTkwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUFyaXRoU3FydChOb2RlKiBub2RlKQogc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGNvbXBp
bGVBcml0aFBvd0ludGVnZXJGYXN0UGF0aChKSVRDb21waWxlciYgYXNzZW1ibGVyLCBGUFJSZWcg
eE9wZXJhbmQsIEdQUlJlZyB5T3BlcmFuZCwgRlBSUmVnIHJlc3VsdCkKIHsKICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3Qgc2tpcEZhc3RQYXRoOwotICAgIHNraXBGYXN0UGF0aC5hcHBlbmQo
YXNzZW1ibGVyLmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgeU9wZXJhbmQsIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCkpKTsKLSAgICBza2lwRmFzdFBhdGguYXBwZW5k
KGFzc2VtYmxlci5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW4sIHlPcGVyYW5k
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEwMDApKSk7CisgICAgc2tpcEZhc3RQYXRo
LmFwcGVuZChhc3NlbWJsZXIuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCB5T3BlcmFu
ZCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxMDAwKSkpOwogCiAgICAgc3RhdGljIGNv
bnN0IGRvdWJsZSBvbmVDb25zdGFudCA9IDEuMDsKICAgICBhc3NlbWJsZXIubG9hZERvdWJsZShN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmb25lQ29uc3RhbnQpLCByZXN1bHQpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExCM091dHB1dC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEIzT3V0cHV0LmNwcAppbmRleCA1ZWZjNjdkZTE5ZjM2
NGQ3N2EyMDhhZDVjODhiMTRkMDU1ZDc2MzM2Li41NDNmMmIwMDE3ZmQ5MmY0NGUxZDQyMjgyMGRi
ZTMyOGI1ODBmNGIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEIz
T3V0cHV0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEIzT3V0cHV0LmNw
cApAQCAtMjksNiArMjksOCBAQAogI2lmIEVOQUJMRShGVExfSklUKQogI2lmIEZUTF9VU0VTX0Iz
CiAKKyNpbmNsdWRlICJCM01hdGhFeHRyYXMuaCIKKwogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBGVEwgewogCiBPdXRwdXQ6Ok91dHB1dChTdGF0ZSYgc3RhdGUpCkBAIC02OSw2ICs3MSwxMyBA
QCBMVmFsdWUgT3V0cHV0Ojpsb2FkKFR5cGVkUG9pbnRlciBwb2ludGVyLCBMVHlwZSB0eXBlKQog
ICAgIHJldHVybiBsb2FkOwogfQogCitMVmFsdWUgT3V0cHV0Ojpkb3VibGVQb3dpKExWYWx1ZSB4
LCBMVmFsdWUgeSkKK3sKKyAgICBhdXRvIHJlc3VsdCA9IHBvd0RvdWJsZUludDMyKG1fcHJvYywg
bV9ibG9jaywgb3JpZ2luKCksIHgsIHkpOworICAgIG1fYmxvY2sgPSByZXN1bHQuZmlyc3Q7Cisg
ICAgcmV0dXJuIHJlc3VsdC5zZWNvbmQ7Cit9CisKIExWYWx1ZSBPdXRwdXQ6OmxvYWQ4U2lnbkV4
dDMyKFR5cGVkUG9pbnRlciBwb2ludGVyKQogewogICAgIExWYWx1ZSBsb2FkID0gbV9ibG9jay0+
YXBwZW5kTmV3PEIzOjpNZW1vcnlWYWx1ZT4obV9wcm9jLCBCMzo6TG9hZDhTLCBCMzo6SW50MzIs
IG9yaWdpbigpLCBwb2ludGVyLnZhbHVlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExCM091dHB1dC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExC
M091dHB1dC5oCmluZGV4IDViMDllNzI3NzkxMjJkNzkyZjQyMDUzZGI3NWVmZDQ3YjRlYjc2NzEu
LjgyMjkzMjgzZjI2ZDhkYjEyZWJiZmI2YjlhNWUwNmMwYjZhNTc1YzIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQjNPdXRwdXQuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEIzT3V0cHV0LmgKQEAgLTE2OCw3ICsxNjgsNyBAQCBwdWJsaWM6CiAK
ICAgICBMVmFsdWUgZG91YmxlUG93KExWYWx1ZSB4T3BlcmFuZCwgTFZhbHVlIHlPcGVyYW5kKSB7
IHJldHVybiBjYWxsV2l0aG91dFNpZGVFZmZlY3RzKEIzOjpEb3VibGUsIHBvdywgeE9wZXJhbmQs
IHlPcGVyYW5kKTsgfQogCi0gICAgTFZhbHVlIGRvdWJsZVBvd2koTFZhbHVlIHhPcGVyYW5kLCBM
VmFsdWUgeU9wZXJhbmQpIHsgQ1JBU0goKTsgfQorICAgIExWYWx1ZSBkb3VibGVQb3dpKExWYWx1
ZSB4T3BlcmFuZCwgTFZhbHVlIHlPcGVyYW5kKTsKIAogICAgIExWYWx1ZSBkb3VibGVTcXJ0KExW
YWx1ZSB2YWx1ZSkgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9j
LCBCMzo6U3FydCwgb3JpZ2luKCksIHZhbHVlKTsgfQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>